This runbook defines the maintainers' standard release flow.
Last verified: February 21, 2026.
- Keep releases predictable and repeatable.
- Publish only from code already in
master. - Verify multi-target artifacts before publish.
- Keep release cadence regular even with high PR volume.
- Patch/minor releases: weekly or bi-weekly.
- Emergency security fixes: out-of-band.
- Never wait for very large commit batches to accumulate.
Release automation lives in:
.github/workflows/pub-release.yml.github/workflows/pub-homebrew-core.yml(manual Homebrew formula PR, bot-owned)
Modes:
- Tag push
v*: publish mode. - Manual dispatch: verification-only or publish mode.
- Weekly schedule: verification-only mode.
Publish-mode guardrails:
- Tag must match semver-like format
vX.Y.Z[-suffix]. - Tag must already exist on origin.
- Tag commit must be reachable from
origin/master. - Matching GHCR image tag (
ghcr.io/<owner>/<repo>:<tag>) must be available before GitHub Release publish completes. - Artifacts are verified before publish.
- Ensure required checks are green on latest
master. - Confirm no high-priority incidents or known regressions are open.
- Confirm installer and Docker workflows are healthy on recent
mastercommits.
Run Pub Release manually:
publish_release:falserelease_ref:master
Expected outcome:
- Full target matrix builds successfully.
verify-artifactsconfirms all expected archives exist.- No GitHub Release is published.
From a clean local checkout synced to origin/master:
scripts/release/cut_release_tag.sh vX.Y.Z --pushThis script enforces:
- clean working tree
HEAD == origin/master- non-duplicate tag
- semver-like tag format
After tag push, monitor:
Pub Releasepublish modePub Docker Imgpublish job
Expected publish outputs:
- release archives
SHA256SUMSCycloneDXandSPDXSBOMs- cosign signatures/certificates
- GitHub Release notes + assets
- Verify GitHub Release assets are downloadable.
- Verify GHCR tags for the released version (
vX.Y.Z) and release commit SHA tag (sha-<12>). - Verify install paths that rely on release assets (for example bootstrap binary download).
Run Pub Homebrew Core manually:
release_tag:vX.Y.Zdry_run:truefirst, thenfalse
Required repository settings for non-dry-run:
- secret:
HOMEBREW_CORE_BOT_TOKEN(token from a dedicated bot account, not a personal maintainer account) - variable:
HOMEBREW_CORE_BOT_FORK_REPO(for examplezeroclaw-release-bot/homebrew-core) - optional variable:
HOMEBREW_CORE_BOT_EMAIL
Workflow guardrails:
- release tag must match
Cargo.tomlversion - formula source URL and SHA256 are updated from the tagged tarball
- formula license is normalized to
Apache-2.0 OR MIT - PR is opened from the bot fork into
Homebrew/homebrew-core:master
If tag-push release fails after artifacts are validated:
- Fix workflow or packaging issue on
master. - Re-run manual
Pub Releasein publish mode with:publish_release=truerelease_tag=<existing tag>release_refis automatically pinned torelease_tagin publish mode
- Re-validate released assets.
- Keep release changes small and reversible.
- Prefer one release issue/checklist per version so handoff is clear.
- Avoid publishing from ad-hoc feature branches.