Skip to content
Latchkey

Deploy Viewer workflow (earthtojake/text-to-cad)

The Deploy Viewer workflow from earthtojake/text-to-cad, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get caching, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: earthtojake/text-to-cad.github/workflows/deploy-viewer.ymlLicense MITView source

What it does

This is the Deploy Viewer workflow from the earthtojake/text-to-cad repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
name: Deploy Viewer

on:
  workflow_dispatch:
    inputs:
      ref:
        description: Production-layout ref to deploy, normally main or a publish commit.
        required: true
        default: main
        type: string
  workflow_call:
    inputs:
      ref:
        description: Production-layout ref to deploy.
        required: true
        type: string

permissions:
  contents: read

concurrency:
  group: deploy-viewer
  cancel-in-progress: false

jobs:
  deploy:
    name: Deploy demo viewer app
    runs-on: ubuntu-latest

    steps:
      - name: Check out deploy ref
        uses: actions/checkout@v4
        with:
          ref: ${{ inputs.ref }}
          persist-credentials: false

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "22"

      - name: Install Vercel CLI
        run: npm install --global vercel@50.28.0

      - name: Deploy demo viewer app to Vercel production
        env:
          VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
          VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
          VERCEL_VIEWER_PROJECT_ID: ${{ secrets.VERCEL_VIEWER_PROJECT_ID }}
        run: |
          for name in VERCEL_TOKEN VERCEL_ORG_ID VERCEL_VIEWER_PROJECT_ID; do
            if [ -z "${!name:-}" ]; then
              echo "Missing GitHub Actions secret: $name" >&2
              exit 1
            fi
          done
          scripts/github-workflows/deploy-vercel-app.sh \
            --label "Demo viewer app" \
            --project-id "$VERCEL_VIEWER_PROJECT_ID" \
            --public-urls "https://demo.cadskills.xyz https://demo.cad.fun"

The same workflow, on Latchkey

Estimated ~20% faster on cache hits, plus fewer wasted runs and a safer supply chain. Added and changed lines are highlighted.

name: Deploy Viewer
 
on:
  workflow_dispatch:
    inputs:
      ref:
        description: Production-layout ref to deploy, normally main or a publish commit.
        required: true
        default: main
        type: string
  workflow_call:
    inputs:
      ref:
        description: Production-layout ref to deploy.
        required: true
        type: string
 
permissions:
  contents: read
 
concurrency:
  group: deploy-viewer
  cancel-in-progress: false
 
jobs:
  deploy:
    timeout-minutes: 30
    name: Deploy demo viewer app
    runs-on: latchkey-small
 
    steps:
      - name: Check out deploy ref
        uses: actions/checkout@v4
        with:
          ref: ${{ inputs.ref }}
          persist-credentials: false
 
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          cache: 'npm'
          node-version: "22"
 
      - name: Install Vercel CLI
        run: npm install --global vercel@50.28.0
 
      - name: Deploy demo viewer app to Vercel production
        env:
          VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
          VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
          VERCEL_VIEWER_PROJECT_ID: ${{ secrets.VERCEL_VIEWER_PROJECT_ID }}
        run: |
          for name in VERCEL_TOKEN VERCEL_ORG_ID VERCEL_VIEWER_PROJECT_ID; do
            if [ -z "${!name:-}" ]; then
              echo "Missing GitHub Actions secret: $name" >&2
              exit 1
            fi
          done
          scripts/github-workflows/deploy-vercel-app.sh \
            --label "Demo viewer app" \
            --project-id "$VERCEL_VIEWER_PROJECT_ID" \
            --public-urls "https://demo.cadskills.xyz https://demo.cad.fun"
 

What changed

What Latchkey heals here

This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:

This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow