This runbook covers how stable vercel CLI releases are published from this repository.
- Merge normal PRs with changesets into
main. - Wait for the
Releaseworkflow to open/update theVersion PackagesPR. - Have an admin force merge that PR even if required checks look stuck.
- Merging triggers
Releaseonmainagain, which publishes the release.
The release PR is created by changesets/action in .github/workflows/release.yml using GITHUB_TOKEN.
For this repo, that Version Packages PR is intentionally treated as a fast handoff PR:
- PR CI is not expected to run for this bot-generated PR.
- Rulesets can still require checks like
Summary,Summary (lint), andSummary (python-packages). - Those checks may remain in an expected/pending state indefinitely for this PR.
This is expected and intentional. We do not wait for CI here because the merge to main immediately triggers the real release workflow.
Before triggering a release:
- Changesets for the intended changes are already merged into
main. - The
Releaseworkflow onmainis healthy. - An admin with branch/ruleset bypass permissions is available to merge the release PR.
After changesets land on main, GitHub Actions Release (.github/workflows/release.yml) will run and create or update a PR titled:
Version Packages
Review the diff and confirm it only contains expected release-generated changes, such as:
package.jsonversion updates- package changelog updates
If the PR includes unexpected file changes, stop and investigate before merging.
An admin should merge the Version Packages PR using bypass/force-merge permissions. The list of users who can bypass is here.
- Do not wait for required checks that are not running.
- This is the intended path for release PRs in this repository.
Merging the PR pushes to main, which triggers Release again.
In that run, changesets/action executes:
pnpm ci:versionpnpm ci:publish
If there are publishable changes, this publishes packages (including vercel) and creates tags.
After Release succeeds:
- Confirm package version on npm:
npm view vercel version
- Confirm dist-tags:
npm dist-tag ls vercel
- Optionally verify git tags created by changesets.
If latest points to the wrong version, run:
- Workflow:
Rollback Latest Tag(.github/workflows/rollback-latest-tag.yml) - Input: desired stable version (for example
39.2.4)
This updates npm dist-tag latest without republishing.
- Stable release:
.github/workflows/release.yml - Canary publish:
.github/workflows/canary.yml - Python package manual publish:
.github/workflows/release-python-package.yml - Rust crate publish:
.github/workflows/release-crates.yml - NPM latest rollback:
.github/workflows/rollback-latest-tag.yml
Version PackagesPR does not appear:- Check latest
Releaserun onmainfor failures beforechangesets/action.
- Check latest
Version PackagesPR checks appear stuck:- Expected for this flow; admin bypass merge is required.
- Release run on
mainfails after merge:- Fix failure on
main, then re-runReleaseworkflow or land the required fix and allow next run to publish.
- Fix failure on