Code Freeze workflow (vercel/next.js)
The Code Freeze workflow from vercel/next.js, 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.
What it does
This is the Code Freeze workflow from the vercel/next.js 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)
on:
workflow_dispatch:
inputs:
type:
description: Enable/disable code freeze
required: true
type: choice
options:
- enable
- disable
secrets:
CODE_FREEZE_TOKEN:
required: true
name: Code Freeze
env:
NAPI_CLI_VERSION: 2.18.4
TURBO_VERSION: 2.9.4
NODE_LTS_VERSION: 20
jobs:
start:
runs-on: ubuntu-latest
environment: release-${{ github.event.inputs.releaseType }}
steps:
- name: Setup node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_LTS_VERSION }}
check-latest: true
package-manager-cache: false
- name: Setup corepack
run: |
npm i -g corepack@0.31
corepack enable
- run: git clone https://github.com/vercel/next.js.git --depth=1 .
# https://github.com/actions/virtual-environments/issues/1187
- name: tune linux network
run: sudo ethtool -K eth0 tx off rx off
- run: node ./scripts/code-freeze.js --type "${INPUT_TYPE}"
env:
CODE_FREEZE_TOKEN: ${{ secrets.CODE_FREEZE_TOKEN }}
INPUT_TYPE: ${{ github.event.inputs.type }}
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.
on: workflow_dispatch: inputs: type: description: Enable/disable code freeze required: true type: choice options: - enable - disable secrets: CODE_FREEZE_TOKEN: required: true name: Code Freeze env: NAPI_CLI_VERSION: 2.18.4 TURBO_VERSION: 2.9.4 NODE_LTS_VERSION: 20 jobs: start: timeout-minutes: 30 runs-on: latchkey-small environment: release-${{ github.event.inputs.releaseType }} steps: - name: Setup node uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: cache: 'npm' node-version: ${{ env.NODE_LTS_VERSION }} check-latest: true package-manager-cache: false - name: Setup corepack run: | npm i -g corepack@0.31 corepack enable - run: git clone https://github.com/vercel/next.js.git --depth=1 . # https://github.com/actions/virtual-environments/issues/1187 - name: tune linux network run: sudo ethtool -K eth0 tx off rx off - run: node ./scripts/code-freeze.js --type "${INPUT_TYPE}" env: CODE_FREEZE_TOKEN: ${{ secrets.CODE_FREEZE_TOKEN }} INPUT_TYPE: ${{ github.event.inputs.type }}
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. - Cache dependency installs on the setup step so they are served from cache.
- Add a job timeout so a hung step cannot burn hours of runner time.
This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.