mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-15 22:03:18 +02:00
9.8 KiB
9.8 KiB
title, summary, read_when
| title | summary | read_when | ||
|---|---|---|---|---|
| Release Policy | Public release channels, version naming, and cadence |
|
Release Policy
OpenClaw has three public release lanes:
- stable: tagged releases that publish to npm
betaby default, or to npmlatestwhen explicitly requested - beta: prerelease tags that publish to npm
beta - dev: the moving head of
main
Version naming
- Stable release version:
YYYY.M.D- Git tag:
vYYYY.M.D
- Git tag:
- Stable correction release version:
YYYY.M.D-N- Git tag:
vYYYY.M.D-N
- Git tag:
- Beta prerelease version:
YYYY.M.D-beta.N- Git tag:
vYYYY.M.D-beta.N
- Git tag:
- Do not zero-pad month or day
latestmeans the current promoted stable npm releasebetameans the current beta install target- Stable and stable correction releases publish to npm
betaby default; release operators can targetlatestexplicitly, or promote a vetted beta build later - Every OpenClaw release ships the npm package and macOS app together
Release cadence
- Releases move beta-first
- Stable follows only after the latest beta is validated
- Detailed release procedure, approvals, credentials, and recovery notes are maintainer-only
Release preflight
- Run
pnpm build && pnpm ui:buildbeforepnpm release:checkso the expecteddist/*release artifacts and Control UI bundle exist for the pack validation step - Run
pnpm release:checkbefore every tagged release - Release checks now run in a separate manual workflow:
OpenClaw Release Checks - This split is intentional: keep the real npm release path short, deterministic, and artifact-focused, while slower live checks stay in their own lane so they do not stall or block publish
- Release checks must be dispatched from the
mainworkflow ref so the workflow logic and secrets stay canonical - That workflow accepts either an existing release tag or the current full
40-character
maincommit SHA - In commit-SHA mode it only accepts the current
origin/mainHEAD; use a release tag for older release commits OpenClaw NPM Releasevalidation-only preflight also accepts the current full 40-charactermaincommit SHA without requiring a pushed tag- That SHA path is validation-only and cannot be promoted into a real publish
- In SHA mode the workflow synthesizes
v<package.json version>only for the package metadata check; real publish still requires a real release tag - Both workflows keep the real publish and promotion path on GitHub-hosted runners, while the non-mutating validation path can use the larger Blacksmith Linux runners
- That workflow runs
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheusing bothOPENAI_API_KEYandANTHROPIC_API_KEYworkflow secrets - npm release preflight no longer waits on the separate release checks lane
- Run
RELEASE_TAG=vYYYY.M.D node --import tsx scripts/openclaw-npm-release-check.ts(or the matching beta/correction tag) before approval - After npm publish, run
node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D(or the matching beta/correction version) to verify the published registry install path in a fresh temp prefix - Maintainer release automation now uses preflight-then-promote:
- real npm publish must pass a successful npm
preflight_run_id - stable npm releases default to
beta - stable npm publish can target
latestexplicitly via workflow input - stable npm promotion from
betatolatestis still available as an explicit manual mode on the trustedOpenClaw NPM Releaseworkflow - direct stable publishes can also run an explicit dist-tag sync mode that
points both
latestandbetaat the already-published stable version - those dist-tag modes still need a valid
NPM_TOKENin thenpm-releaseenvironment because npmdist-tagmanagement is separate from trusted publishing - public
macOS Releaseis validation-only - real private mac publish must pass successful private mac
preflight_run_idandvalidate_run_id - the real publish paths promote prepared artifacts instead of rebuilding them again
- real npm publish must pass a successful npm
- For stable correction releases like
YYYY.M.D-N, the post-publish verifier also checks the same temp-prefix upgrade path fromYYYY.M.DtoYYYY.M.D-Nso release corrections cannot silently leave older global installs on the base stable payload - npm release preflight fails closed unless the tarball includes both
dist/control-ui/index.htmland a non-emptydist/control-ui/assets/payload so we do not ship an empty browser dashboard again pnpm test:install:smokealso enforces the npm packunpackedSizebudget on the candidate update tarball, so installer e2e catches accidental pack bloat before the release publish path- If the release work touched CI planning, extension timing manifests, or
extension test matrices, regenerate and review the planner-owned
checks-node-extensionsworkflow matrix outputs from.github/workflows/ci.ymlbefore approval so release notes do not describe a stale CI layout - Stable macOS release readiness also includes the updater surfaces:
- the GitHub release must end up with the packaged
.zip,.dmg, and.dSYM.zip appcast.xmlonmainmust point at the new stable zip after publish- the packaged app must keep a non-debug bundle id, a non-empty Sparkle feed
URL, and a
CFBundleVersionat or above the canonical Sparkle build floor for that release version
- the GitHub release must end up with the packaged
NPM workflow inputs
OpenClaw NPM Release accepts these operator-controlled inputs:
tag: required release tag such asv2026.4.2,v2026.4.2-1, orv2026.4.2-beta.1; whenpreflight_only=true, it may also be the current full 40-charactermaincommit SHA for validation-only preflightpreflight_only:truefor validation/build/package only,falsefor the real publish pathpreflight_run_id: required on the real publish path so the workflow reuses the prepared tarball from the successful preflight runnpm_dist_tag: npm target tag for the publish path; defaults tobetapromote_beta_to_latest:trueto skip publish and move an already-published stablebetabuild ontolatestsync_stable_dist_tags:trueto skip publish and point bothlatestandbetaat an already-published stable version
OpenClaw Release Checks accepts these operator-controlled inputs:
ref: existing release tag or the current full 40-charactermaincommit SHA to validate
Rules:
- Stable and correction tags may publish to either
betaorlatest - Beta prerelease tags may publish only to
beta - Full commit SHA input is allowed only when
preflight_only=true - Release checks commit-SHA mode also requires the current
origin/mainHEAD - The real publish path must use the same
npm_dist_tagused during preflight; the workflow verifies that metadata before publish continues - Promotion mode must use a stable or correction tag,
preflight_only=false, an emptypreflight_run_id, andnpm_dist_tag=beta - Dist-tag sync mode must use a stable or correction tag,
preflight_only=false, an emptypreflight_run_id,npm_dist_tag=latest, andpromote_beta_to_latest=false - Promotion and dist-tag sync modes also require a valid
NPM_TOKENbecausenpm dist-tag addstill needs regular npm auth; trusted publishing covers the package publish path only
Stable npm release sequence
When cutting a stable npm release:
- Run
OpenClaw NPM Releasewithpreflight_only=true- Before a tag exists, you may use the current full
maincommit SHA for a validation-only dry run of the preflight workflow
- Before a tag exists, you may use the current full
- Choose
npm_dist_tag=betafor the normal beta-first flow, orlatestonly when you intentionally want a direct stable publish - Run
OpenClaw Release Checksseparately with the same tag or the full currentmaincommit SHA when you want live prompt cache coverage- This is separate on purpose so live coverage stays available without recoupling long-running or flaky checks to the publish workflow
- Save the successful
preflight_run_id - Run
OpenClaw NPM Releaseagain withpreflight_only=false, the sametag, the samenpm_dist_tag, and the savedpreflight_run_id - If the release landed on
beta, runOpenClaw NPM Releaselater with the same stabletag,promote_beta_to_latest=true,preflight_only=false,preflight_run_idempty, andnpm_dist_tag=betawhen you want to move that published build tolatest - If the release intentionally published directly to
latestandbetashould follow the same stable build, runOpenClaw NPM Releasewith the same stabletag,sync_stable_dist_tags=true,promote_beta_to_latest=false,preflight_only=false,preflight_run_idempty, andnpm_dist_tag=latest
The promotion and dist-tag sync modes still require the npm-release
environment approval and a valid NPM_TOKEN accessible to that workflow run.
That keeps the direct publish path and the beta-first promotion path both documented and operator-visible.
Public references
.github/workflows/openclaw-npm-release.yml.github/workflows/openclaw-release-checks.ymlscripts/openclaw-npm-release-check.tsscripts/package-mac-dist.shscripts/make_appcast.sh
Maintainers use the private release docs in
openclaw/maintainers/release/README.md
for the actual runbook.