Build Unlighthouse Demo workflow (harlan-zw/unlighthouse)
The Build Unlighthouse Demo workflow from harlan-zw/unlighthouse, explained and optimized by Latchkey.
CI health: C - fair
Point runs-on at Latchkey and get run de-duplication, job timeouts, SHA-pinned actions, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the Build Unlighthouse Demo workflow from the harlan-zw/unlighthouse 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
name: Build Unlighthouse Demo
on:
workflow_dispatch:
push:
tags:
- 'v*'
permissions:
contents: read
jobs:
demo:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: 22.x
registry-url: https://registry.npmjs.org/
cache: pnpm
- run: pnpm i
- run: pnpm build
- name: Run Unlighthouse CI
run: pnpm ci:docs && mv .unlighthouse dist
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Deploy to Netlify
uses: nwtgck/actions-netlify@v3.0
with:
publish-dir: ./dist
production-branch: main
production-deploy: true
github-token: ${{ secrets.GITHUB_TOKEN }}
deploy-message: New Release Deploy from GitHub Actions
enable-pull-request-comment: false
enable-commit-comment: true
overwrites-pull-request-comment: true
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_DEMO_SITE_ID }}
timeout-minutes: 1
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: Build Unlighthouse Demo on: workflow_dispatch: push: tags: - 'v*' permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: demo: timeout-minutes: 30 runs-on: latchkey-small steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - uses: pnpm/action-setup@v6 - uses: actions/setup-node@v6 with: node-version: 22.x registry-url: https://registry.npmjs.org/ cache: pnpm - run: pnpm i - run: pnpm build - name: Run Unlighthouse CI run: pnpm ci:docs && mv .unlighthouse dist env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Deploy to Netlify uses: nwtgck/actions-netlify@v3.0 with: publish-dir: ./dist production-branch: main production-deploy: true github-token: ${{ secrets.GITHUB_TOKEN }} deploy-message: New Release Deploy from GitHub Actions enable-pull-request-comment: false enable-commit-comment: true overwrites-pull-request-comment: true env: NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} NETLIFY_SITE_ID: ${{ secrets.NETLIFY_DEMO_SITE_ID }} timeout-minutes: 1
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Cancel superseded runs when a branch or PR gets a newer push.
- Add a job timeout so a hung step cannot burn hours of runner time.
2 third-party actions are referenced by a movable tag. Pin them to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.
This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.