Skip to content

Commit f5a7f61

Browse files
authored
fix(release): use monthly patch versions
Switch release train handling to YYYY.M.PATCH monthly patch numbering, preserve pre-transition compatibility, and pin the June 2026 stable/beta floor at 2026.6.5 after the published beta. Verification: - node scripts/run-vitest.mjs run test/appcast.test.ts test/release-check.test.ts test/scripts/package-mac-app.test.ts test/scripts/package-mac-dist.test.ts test/openclaw-npm-release-check.test.ts test/npm-publish-plan.test.ts src/infra/npm-registry-spec.test.ts src/infra/clawhub.test.ts src/plugins/clawhub.test.ts test/plugin-npm-release.test.ts test/scripts/ios-version.test.ts test/scripts/ios-pin-version.test.ts - node --import tsx scripts/plugin-npm-release-check.ts --base-ref origin/main --head-ref HEAD - node --import tsx scripts/plugin-clawhub-release-check.ts --base-ref origin/main --head-ref HEAD - git diff --check origin/main...HEAD - .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main --no-web-search
1 parent 15cb26e commit f5a7f61

35 files changed

Lines changed: 431 additions & 230 deletions

.github/workflows/macos-release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ on:
1313
default: true
1414
type: boolean
1515
public_release_branch:
16-
description: Public branch that contains the release tag commit, usually main or release/YYYY.M.D
16+
description: Public branch that contains the release tag commit, usually main or release/YYYY.M.PATCH
1717
required: false
1818
default: main
1919
type: string
@@ -73,7 +73,7 @@ jobs:
7373
run: |
7474
set -euo pipefail
7575
if [[ "${PUBLIC_RELEASE_BRANCH}" != "main" && ! "${PUBLIC_RELEASE_BRANCH}" =~ ^release/[0-9]{4}\.[1-9][0-9]*\.[1-9][0-9]*$ ]]; then
76-
echo "public_release_branch must be main or release/YYYY.M.D, got ${PUBLIC_RELEASE_BRANCH}." >&2
76+
echo "public_release_branch must be main or release/YYYY.M.PATCH, got ${PUBLIC_RELEASE_BRANCH}." >&2
7777
exit 1
7878
fi
7979
RELEASE_SHA=$(git rev-parse HEAD)

.github/workflows/openclaw-npm-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ jobs:
391391
tideclaw_alpha_publish=true
392392
fi
393393
if [[ "${WORKFLOW_REF}" != "refs/heads/main" ]] && [[ ! "${WORKFLOW_REF}" =~ ^refs/heads/release/[0-9]{4}\.[1-9][0-9]*\.[1-9][0-9]*$ ]] && [[ "${tideclaw_alpha_publish}" != "true" ]]; then
394-
echo "Real publish runs must be dispatched from main, release/YYYY.M.D, or a Tideclaw alpha branch for alpha prereleases. Use preflight_only=true for other branch validation."
394+
echo "Real publish runs must be dispatched from main, release/YYYY.M.PATCH, or a Tideclaw alpha branch for alpha prereleases. Use preflight_only=true for other branch validation."
395395
exit 1
396396
fi
397397

.github/workflows/openclaw-release-checks.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ jobs:
132132
fi
133133
fi
134134
if [[ "${WORKFLOW_REF}" != "refs/heads/main" ]] && [[ ! "${WORKFLOW_REF}" =~ ^refs/heads/release/[0-9]{4}\.[1-9][0-9]*\.[1-9][0-9]*$ ]] && [[ ! "${WORKFLOW_REF}" =~ ^refs/heads/release-ci/[0-9a-f]{12}-[0-9]+$ ]] && [[ "${tideclaw_alpha_check}" != "true" ]]; then
135-
echo "Release checks must be dispatched from main, release/YYYY.M.D, a Full Release Validation release-ci/<sha>-<timestamp> ref, or a Tideclaw alpha branch for alpha prereleases." >&2
135+
echo "Release checks must be dispatched from main, release/YYYY.M.PATCH, a Full Release Validation release-ci/<sha>-<timestamp> ref, or a Tideclaw alpha branch for alpha prereleases." >&2
136136
exit 1
137137
fi
138138

.github/workflows/openclaw-release-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ jobs:
120120
tideclaw_alpha_publish=true
121121
fi
122122
if [[ "${PUBLISH_OPENCLAW_NPM}" == "true" && "${WORKFLOW_REF}" != "refs/heads/main" && ! "${WORKFLOW_REF}" =~ ^refs/heads/release/[0-9]{4}\.[1-9][0-9]*\.[1-9][0-9]*$ && "${tideclaw_alpha_publish}" != "true" ]]; then
123-
echo "publish_openclaw_npm=true requires dispatching this workflow from main, release/YYYY.M.D, or a Tideclaw alpha branch for alpha prereleases." >&2
123+
echo "publish_openclaw_npm=true requires dispatching this workflow from main, release/YYYY.M.PATCH, or a Tideclaw alpha branch for alpha prereleases." >&2
124124
exit 1
125125
fi
126126
if [[ "${PUBLISH_OPENCLAW_NPM}" == "true" && "${PLUGIN_PUBLISH_SCOPE}" != "all-publishable" ]]; then

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Docs: https://docs.openclaw.ai
2525
- Mobile: Android provider/model screens now surface expiring, unavailable, unresolved, and attention states more clearly, while iOS settings and Talk tabs keep diagnostics, gateway rows, attachment labels, and unavailable Talk controls reachable.
2626
- Memory: QMD search can use the new rerank toggle, and memory adapter status uses the resolved default model identity when checking plain status. (#61834)
2727
- Docs/tooling: add Parallel search docs, refresh weather-skill guidance toward `web_fetch`, clarify legacy `openai-codex` auth, document release/test helper scripts, and tighten changed-test routing docs for CI/debugging work. (#90028, #90250) Thanks @fuller-stack-dev.
28+
- Release/process: switch release trains to `YYYY.M.PATCH` monthly patch numbering, keep pre-transition tags compatible, and pin the June 2026 floor at `2026.6.5` after the published beta.
2829
- Platform maintenance: refresh Android, Swift/macOS, Docker, CodeQL, Buildx, Docker build/push, and Codex Action dependencies for this release train. (#74980, #81757, #86481, #86483, #90601)
2930

3031
### Fixes

docs/ci.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ Manual CI dispatches run the same job graph as normal CI but force every non-And
116116
Manual runs use a unique concurrency group so a release-candidate full suite is not cancelled by another push or PR run on the same ref. The optional `target_ref` input lets a trusted caller run that graph against a branch, tag, or full commit SHA while using the workflow file from the selected dispatch ref.
117117

118118
```bash
119-
gh workflow run ci.yml --ref release/YYYY.M.D
119+
gh workflow run ci.yml --ref release/YYYY.M.PATCH
120120
gh workflow run ci.yml --ref main -f target_ref=<branch-or-sha> -f include_android=true
121121
gh workflow run full-release-validation.yml --ref main -f ref=<branch-or-sha>
122122
```
@@ -196,16 +196,16 @@ stage matrix, exact workflow job names, profile differences, artifacts, and
196196
focused rerun handles.
197197

198198
`OpenClaw Release Publish` is the manual mutating release workflow. Dispatch it
199-
from `release/YYYY.M.D` or `main` after the release tag exists and after the
199+
from `release/YYYY.M.PATCH` or `main` after the release tag exists and after the
200200
OpenClaw npm preflight has succeeded. It verifies `pnpm plugins:sync:check`,
201201
dispatches `Plugin NPM Release` for all publishable plugin packages, dispatches
202202
`Plugin ClawHub Release` for the same release SHA, and only then dispatches
203203
`OpenClaw NPM Release` with the saved `preflight_run_id`.
204204

205205
```bash
206206
gh workflow run openclaw-release-publish.yml \
207-
--ref release/YYYY.M.D \
208-
-f tag=vYYYY.M.D-beta.N \
207+
--ref release/YYYY.M.PATCH \
208+
-f tag=vYYYY.M.PATCH-beta.N \
209209
-f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \
210210
-f npm_dist_tag=beta
211211
```
@@ -334,7 +334,7 @@ gh workflow run package-acceptance.yml \
334334
--ref main \
335335
-f workflow_ref=main \
336336
-f source=ref \
337-
-f package_ref=release/YYYY.M.D \
337+
-f package_ref=release/YYYY.M.PATCH \
338338
-f suite_profile=package \
339339
-f telegram_mode=mock-openai
340340

docs/help/testing-updates-plugins.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ Candidate sources:
175175

176176
Full Release Validation uses `source=artifact` by default, built from the
177177
resolved release SHA. For post-publish proof, pass
178-
`package_acceptance_package_spec=openclaw@YYYY.M.D` so the same upgrade matrix
178+
`package_acceptance_package_spec=openclaw@YYYY.M.PATCH` so the same upgrade matrix
179179
targets the shipped npm package instead.
180180

181181
Release checks call Package Acceptance with the package/update/restart/plugin set:

docs/install/development-channels.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,12 @@ source (config, git tag, git branch, or default).
123123

124124
## Tagging best practices
125125

126-
- Tag releases you want git checkouts to land on (`vYYYY.M.D` for stable,
127-
`vYYYY.M.D-beta.N` for beta; named semver prerelease suffixes such as
126+
- Tag releases you want git checkouts to land on (`vYYYY.M.PATCH` for stable,
127+
`vYYYY.M.PATCH-beta.N` for beta; named semver prerelease suffixes such as
128128
`-alpha.N`, `-rc.N`, and `-next.N` are not stable targets).
129-
- Legacy numeric stable tags such as `vYYYY.M.D-1` and `v1.0.1-1` are still
129+
- Legacy numeric stable tags such as `vYYYY.M.PATCH-1` and `v1.0.1-1` are still
130130
recognized as stable git tags for compatibility.
131-
- `vYYYY.M.D.beta.N` is also recognized for compatibility, but prefer `-beta.N`.
131+
- `vYYYY.M.PATCH.beta.N` is also recognized for compatibility, but prefer `-beta.N`.
132132
- Keep tags immutable: never move or reuse a tag.
133133
- npm dist-tags remain the source of truth for npm installs:
134134
- `latest` -> stable

0 commit comments

Comments
 (0)