mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-03 13:22:14 +00:00
6.1 KiB
6.1 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 - 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 a separate manual workflow step - that promotion workflow exchanges the GitHub Actions OIDC token for a short-lived npm registry token instead of depending on a stored
NPM_TOKEN - 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 - If the release work touched CI planning, extension timing manifests, or fast
test matrices, regenerate and review the planner-owned
checks-fast-extensionsshard plan vianode scripts/ci-write-manifest-outputs.mjs --workflow cibefore 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.1preflight_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 tobeta
Rules:
- Stable and correction tags may publish to either
betaorlatest - Beta prerelease tags may publish only to
beta - The real publish path must use the same
npm_dist_tagused during preflight; the workflow verifies that metadata before publish continues
Stable npm release sequence
When cutting a stable npm release:
- Run
OpenClaw NPM Releasewithpreflight_only=true - Choose
npm_dist_tag=betafor the normal beta-first flow, orlatestonly when you intentionally want a direct stable publish - 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 Promote Betalater with the exact stable version when you want to move that published build tolatest
The promotion workflow still requires the npm-release environment approval,
but it no longer depends on a long-lived npm publish token.
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-npm-promote-beta.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.