Skip to content

Commit 4b4dfe4

Browse files
committed
ci: expand release upgrade baselines
1 parent e18a383 commit 4b4dfe4

10 files changed

Lines changed: 85 additions & 18 deletions

.github/workflows/full-release-validation.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ on:
6868
required: false
6969
default: ""
7070
type: string
71+
package_acceptance_package_spec:
72+
description: Optional published package spec for Package Acceptance; blank uses the SHA-built release artifact
73+
required: false
74+
default: ""
75+
type: string
7176
npm_telegram_provider_mode:
7277
description: Provider mode for the package Telegram E2E lane
7378
required: false
@@ -127,6 +132,7 @@ jobs:
127132
CHILD_WORKFLOW_REF: ${{ github.ref_name }}
128133
NPM_TELEGRAM_PACKAGE_SPEC: ${{ inputs.npm_telegram_package_spec }}
129134
EVIDENCE_PACKAGE_SPEC: ${{ inputs.evidence_package_spec }}
135+
PACKAGE_ACCEPTANCE_PACKAGE_SPEC: ${{ inputs.package_acceptance_package_spec }}
130136
RELEASE_PROFILE: ${{ inputs.release_profile }}
131137
RERUN_GROUP: ${{ inputs.rerun_group }}
132138
LIVE_SUITE_FILTER: ${{ inputs.live_suite_filter }}
@@ -166,6 +172,11 @@ jobs:
166172
if [[ -n "${EVIDENCE_PACKAGE_SPEC// }" ]]; then
167173
echo "- Private evidence package proof: \`${EVIDENCE_PACKAGE_SPEC}\`"
168174
fi
175+
if [[ -n "${PACKAGE_ACCEPTANCE_PACKAGE_SPEC// }" ]]; then
176+
echo "- Package Acceptance package spec: \`${PACKAGE_ACCEPTANCE_PACKAGE_SPEC}\`"
177+
else
178+
echo "- Package Acceptance package spec: SHA-built release artifact"
179+
fi
169180
} >> "$GITHUB_STEP_SUMMARY"
170181
171182
normal_ci:
@@ -377,6 +388,7 @@ jobs:
377388
RELEASE_PROFILE: ${{ inputs.release_profile }}
378389
RERUN_GROUP: ${{ inputs.rerun_group }}
379390
LIVE_SUITE_FILTER: ${{ inputs.live_suite_filter }}
391+
PACKAGE_ACCEPTANCE_PACKAGE_SPEC: ${{ inputs.package_acceptance_package_spec }}
380392
run: |
381393
set -euo pipefail
382394
@@ -455,6 +467,9 @@ jobs:
455467
if [[ -n "${LIVE_SUITE_FILTER// }" ]]; then
456468
echo "- Live suite filter: \`${LIVE_SUITE_FILTER}\`"
457469
fi
470+
if [[ -n "${PACKAGE_ACCEPTANCE_PACKAGE_SPEC// }" ]]; then
471+
echo "- Package Acceptance package spec: \`${PACKAGE_ACCEPTANCE_PACKAGE_SPEC}\`"
472+
fi
458473
} >> "$GITHUB_STEP_SUMMARY"
459474
460475
child_rerun_group="$RERUN_GROUP"
@@ -473,6 +488,9 @@ jobs:
473488
if [[ -n "${LIVE_SUITE_FILTER// }" ]]; then
474489
args+=(-f live_suite_filter="$LIVE_SUITE_FILTER")
475490
fi
491+
if [[ -n "${PACKAGE_ACCEPTANCE_PACKAGE_SPEC// }" ]]; then
492+
args+=(-f package_acceptance_package_spec="$PACKAGE_ACCEPTANCE_PACKAGE_SPEC")
493+
fi
476494
477495
dispatch_and_wait openclaw-release-checks.yml "${args[@]}"
478496

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ on:
5858
required: false
5959
default: ""
6060
type: string
61+
package_acceptance_package_spec:
62+
description: Optional published package spec for Package Acceptance; blank uses the prepared release artifact
63+
required: false
64+
default: ""
65+
type: string
6166

6267
concurrency:
6368
group: openclaw-release-checks-${{ inputs.expected_sha || inputs.ref }}-${{ inputs.rerun_group }}
@@ -83,6 +88,7 @@ jobs:
8388
release_profile: ${{ steps.inputs.outputs.release_profile }}
8489
rerun_group: ${{ steps.inputs.outputs.rerun_group }}
8590
live_suite_filter: ${{ steps.inputs.outputs.live_suite_filter }}
91+
package_acceptance_package_spec: ${{ steps.inputs.outputs.package_acceptance_package_spec }}
8692
steps:
8793
- name: Require main or release workflow ref for release checks
8894
env:
@@ -199,6 +205,7 @@ jobs:
199205
RELEASE_PROFILE_INPUT: ${{ inputs.release_profile }}
200206
RELEASE_RERUN_GROUP_INPUT: ${{ inputs.rerun_group }}
201207
RELEASE_LIVE_SUITE_FILTER_INPUT: ${{ inputs.live_suite_filter }}
208+
RELEASE_PACKAGE_ACCEPTANCE_PACKAGE_SPEC_INPUT: ${{ inputs.package_acceptance_package_spec }}
202209
run: |
203210
set -euo pipefail
204211
{
@@ -208,6 +215,7 @@ jobs:
208215
printf 'release_profile=%s\n' "$RELEASE_PROFILE_INPUT"
209216
printf 'rerun_group=%s\n' "$RELEASE_RERUN_GROUP_INPUT"
210217
printf 'live_suite_filter=%s\n' "$RELEASE_LIVE_SUITE_FILTER_INPUT"
218+
printf 'package_acceptance_package_spec=%s\n' "$RELEASE_PACKAGE_ACCEPTANCE_PACKAGE_SPEC_INPUT"
211219
} >> "$GITHUB_OUTPUT"
212220
213221
- name: Summarize validated ref
@@ -220,6 +228,7 @@ jobs:
220228
RELEASE_PROFILE: ${{ inputs.release_profile }}
221229
RELEASE_RERUN_GROUP: ${{ inputs.rerun_group }}
222230
RELEASE_LIVE_SUITE_FILTER: ${{ inputs.live_suite_filter }}
231+
PACKAGE_ACCEPTANCE_PACKAGE_SPEC: ${{ inputs.package_acceptance_package_spec }}
223232
run: |
224233
{
225234
echo "## Release checks"
@@ -234,6 +243,11 @@ jobs:
234243
if [[ -n "${RELEASE_LIVE_SUITE_FILTER// }" ]]; then
235244
echo "- Live suite filter: \`${RELEASE_LIVE_SUITE_FILTER}\`"
236245
fi
246+
if [[ -n "${PACKAGE_ACCEPTANCE_PACKAGE_SPEC// }" ]]; then
247+
echo "- Package Acceptance package spec: \`${PACKAGE_ACCEPTANCE_PACKAGE_SPEC}\`"
248+
else
249+
echo "- Package Acceptance package spec: prepared release artifact"
250+
fi
237251
echo "- This run will execute cross-OS release validation, install smoke, QA Lab parity, Matrix, and Telegram lanes, and the non-Parallels Docker/live/openwebui coverage from the CI migration plan."
238252
} >> "$GITHUB_STEP_SUMMARY"
239253
@@ -439,12 +453,13 @@ jobs:
439453
uses: ./.github/workflows/package-acceptance.yml
440454
with:
441455
workflow_ref: ${{ github.ref_name }}
442-
source: artifact
456+
source: ${{ needs.resolve_target.outputs.package_acceptance_package_spec != '' && 'npm' || 'artifact' }}
457+
package_spec: ${{ needs.resolve_target.outputs.package_acceptance_package_spec || 'openclaw@beta' }}
443458
artifact_name: ${{ needs.prepare_release_package.outputs.artifact_name }}
444459
package_sha256: ${{ needs.prepare_release_package.outputs.package_sha256 }}
445460
suite_profile: custom
446461
docker_lanes: doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update
447-
published_upgrade_survivor_baselines: release-history
462+
published_upgrade_survivor_baselines: all-since-2026.4.23
448463
published_upgrade_survivor_scenarios: reported-issues
449464
telegram_mode: mock-openai
450465
telegram_scenarios: telegram-help-command,telegram-commands-command,telegram-tools-compact-command,telegram-whoami-command,telegram-context-command,telegram-mention-gating

.github/workflows/package-acceptance.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ on:
7070
default: openclaw@latest
7171
type: string
7272
published_upgrade_survivor_baselines:
73-
description: Optional baseline list for published-upgrade-survivor/update-migration; use release-history or all-since-2026.4.23
73+
description: Optional baseline list for published-upgrade-survivor/update-migration; use all-since-2026.4.23, release-history, or exact versions
7474
required: false
7575
default: ""
7676
type: string
@@ -150,7 +150,7 @@ on:
150150
default: openclaw@latest
151151
type: string
152152
published_upgrade_survivor_baselines:
153-
description: Optional baseline list for published-upgrade-survivor/update-migration; use release-history or all-since-2026.4.23
153+
description: Optional baseline list for published-upgrade-survivor/update-migration; use all-since-2026.4.23, release-history, or exact versions
154154
required: false
155155
default: ""
156156
type: string

docs/ci.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ For the dedicated update and plugin testing policy, including local commands,
260260
Docker lanes, Package Acceptance inputs, release defaults, and failure triage,
261261
see [Testing updates and plugins](/help/testing-updates-plugins).
262262

263-
Release checks call Package Acceptance with `source=artifact`, the prepared release package artifact, `suite_profile=custom`, `docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`, `published_upgrade_survivor_baselines=release-history`, `published_upgrade_survivor_scenarios=reported-issues`, and `telegram_mode=mock-openai`. This keeps package migration, update, stale-plugin-dependency cleanup, configured-plugin install repair, offline plugin, plugin-update, and Telegram proof on the same resolved package tarball. Cross-OS release checks still cover OS-specific onboarding, installer, and platform behavior; package/update product validation should start with Package Acceptance. The `published-upgrade-survivor` Docker lane validates one published package baseline per run. In Package Acceptance, the resolved `package-under-test` tarball is always the candidate and `published_upgrade_survivor_baseline` selects the fallback published baseline, defaulting to `openclaw@latest`; failed-lane rerun commands preserve that baseline. Set `published_upgrade_survivor_baselines=release-history` to expand the lane across a deduped history matrix: the latest six stable releases, `2026.4.23`, and the latest stable release before `2026-03-15`. Set `published_upgrade_survivor_scenarios=reported-issues` to expand the same baselines across issue-shaped fixtures for Feishu config, preserved bootstrap/persona files, configured OpenClaw plugin installs, tilde log paths, and stale legacy plugin dependency roots. The separate `Update Migration` workflow uses the `update-migration` Docker lane with `all-since-2026.4.23` and `plugin-deps-cleanup` when the question is exhaustive published update cleanup, not normal Full Release CI breadth. Local aggregate runs can pass exact package specs with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`, keep a single lane with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` such as `[email protected]`, or set `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` for the scenario matrix. The published lane configures the baseline with a baked `openclaw config set` command recipe, records recipe steps in `summary.json`, and probes `/healthz`, `/readyz`, plus RPC status after Gateway start. The Windows packaged and installer fresh lanes also verify that an installed package can import a browser-control override from a raw absolute Windows path. The OpenAI cross-OS agent-turn smoke defaults to `OPENCLAW_CROSS_OS_OPENAI_MODEL` when set, otherwise `openai/gpt-5.4`, so the install and gateway proof stays on a GPT-5 test model while avoiding GPT-4.x defaults.
263+
Release checks call Package Acceptance with `source=artifact`, the prepared release package artifact, `suite_profile=custom`, `docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`, `published_upgrade_survivor_baselines=all-since-2026.4.23`, `published_upgrade_survivor_scenarios=reported-issues`, and `telegram_mode=mock-openai`. This keeps package migration, update, stale-plugin-dependency cleanup, configured-plugin install repair, offline plugin, plugin-update, and Telegram proof on the same resolved package tarball. Set `package_acceptance_package_spec` on Full Release Validation or OpenClaw Release Checks to run that same matrix against a shipped npm package instead of the SHA-built artifact. Cross-OS release checks still cover OS-specific onboarding, installer, and platform behavior; package/update product validation should start with Package Acceptance. The `published-upgrade-survivor` Docker lane validates one published package baseline per run. In Package Acceptance, the resolved `package-under-test` tarball is always the candidate and `published_upgrade_survivor_baseline` selects the fallback published baseline, defaulting to `openclaw@latest`; failed-lane rerun commands preserve that baseline. Set `published_upgrade_survivor_baselines=all-since-2026.4.23` to expand Full Release CI across every stable npm release from `2026.4.23` through `latest`; `release-history` remains available for manual wider sampling with the older pre-date anchor. Set `published_upgrade_survivor_scenarios=reported-issues` to expand the same baselines across issue-shaped fixtures for Feishu config, preserved bootstrap/persona files, configured OpenClaw plugin installs, tilde log paths, and stale legacy plugin dependency roots. The separate `Update Migration` workflow uses the `update-migration` Docker lane with `all-since-2026.4.23` and `plugin-deps-cleanup` when the question is exhaustive published update cleanup, not normal Full Release CI breadth. Local aggregate runs can pass exact package specs with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`, keep a single lane with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` such as `[email protected]`, or set `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` for the scenario matrix. The published lane configures the baseline with a baked `openclaw config set` command recipe, records recipe steps in `summary.json`, and probes `/healthz`, `/readyz`, plus RPC status after Gateway start. The Windows packaged and installer fresh lanes also verify that an installed package can import a browser-control override from a raw absolute Windows path. The OpenAI cross-OS agent-turn smoke defaults to `OPENCLAW_CROSS_OS_OPENAI_MODEL` when set, otherwise `openai/gpt-5.4`, so the install and gateway proof stays on a GPT-5 test model while avoiding GPT-4.x defaults.
264264

265265
### Legacy compatibility windows
266266

docs/help/testing-updates-plugins.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ Candidate sources:
154154
- `source=url`: validate an HTTPS tarball with required `package_sha256`.
155155
- `source=artifact`: reuse a tarball uploaded by another Actions run.
156156

157+
Full Release Validation uses `source=artifact` by default, built from the
158+
resolved release SHA. For post-publish proof, pass
159+
`[email protected]` so the same upgrade matrix
160+
targets the shipped npm package instead.
161+
157162
Release checks call Package Acceptance with the package/update/plugin set:
158163

159164
```text
@@ -163,7 +168,7 @@ doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor
163168
They also pass:
164169

165170
```text
166-
published_upgrade_survivor_baselines=release-history
171+
published_upgrade_survivor_baselines=all-since-2026.4.23
167172
published_upgrade_survivor_scenarios=reported-issues
168173
telegram_mode=mock-openai
169174
```
@@ -172,10 +177,11 @@ This keeps package migration, update channel switching, stale plugin dependency
172177
cleanup, offline plugin coverage, plugin update behavior, and Telegram package
173178
QA on the same resolved artifact.
174179

175-
`release-history` is a bounded release-check sample: latest six stable releases,
176-
`2026.4.23`, and one older pre-date anchor. For exhaustive published update
177-
migration coverage, use `all-since-2026.4.23` in the separate Update Migration
178-
workflow instead of Full Release CI.
180+
`all-since-2026.4.23` is the Full Release CI upgrade sample: every stable npm-published release from `2026.4.23` through `latest`. For exhaustive published
181+
update migration coverage, use `all-since-2026.4.23` in the separate Update
182+
Migration workflow instead of Full Release CI. `release-history` remains
183+
available for manual wider sampling when you also want the legacy pre-date
184+
anchor.
179185

180186
Run a package profile manually when validating a candidate before release:
181187

@@ -186,7 +192,7 @@ gh workflow run package-acceptance.yml \
186192
-f source=npm \
187193
-f package_spec=openclaw@beta \
188194
-f suite_profile=package \
189-
-f published_upgrade_survivor_baselines=release-history \
195+
-f published_upgrade_survivor_baselines=all-since-2026.4.23 \
190196
-f published_upgrade_survivor_scenarios=reported-issues \
191197
-f telegram_mode=mock-openai
192198
```

docs/help/testing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ The live-model Docker runners also bind-mount only the needed CLI auth homes (or
627627
- Npm tarball onboarding/channel/agent smoke: `pnpm test:docker:npm-onboard-channel-agent` installs the packed OpenClaw tarball globally in Docker, configures OpenAI via env-ref onboarding plus Telegram by default, runs doctor, and runs one mocked OpenAI agent turn. Reuse a prebuilt tarball with `OPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz`, skip the host rebuild with `OPENCLAW_NPM_ONBOARD_HOST_BUILD=0`, or switch channel with `OPENCLAW_NPM_ONBOARD_CHANNEL=discord`.
628628
- Update channel switch smoke: `pnpm test:docker:update-channel-switch` installs the packed OpenClaw tarball globally in Docker, switches from package `stable` to git `dev`, verifies the persisted channel and plugin post-update work, then switches back to package `stable` and checks update status.
629629
- Upgrade survivor smoke: `pnpm test:docker:upgrade-survivor` installs the packed OpenClaw tarball over a dirty old-user fixture with agents, channel config, plugin allowlists, stale plugin dependency state, and existing workspace/session files. It runs package update plus non-interactive doctor without live provider or channel keys, then starts a loopback Gateway and checks config/state preservation plus startup/status budgets.
630-
- Published upgrade survivor smoke: `pnpm test:docker:published-upgrade-survivor` installs `openclaw@latest` by default, seeds realistic existing-user files, configures that baseline with a baked command recipe, validates the resulting config, updates that published install to the candidate tarball, runs non-interactive doctor, writes `.artifacts/upgrade-survivor/summary.json`, then starts a loopback Gateway and checks configured intents, state preservation, startup, `/healthz`, `/readyz`, and RPC status budgets. Override one baseline with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC`, ask the aggregate scheduler to expand exact baselines with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`, and expand issue-shaped fixtures with `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` such as `reported-issues`; the reported-issues set includes `configured-plugin-installs` for automatic external OpenClaw plugin install repair. Package Acceptance exposes those as `published_upgrade_survivor_baseline`, `published_upgrade_survivor_baselines`, and `published_upgrade_survivor_scenarios`.
630+
- Published upgrade survivor smoke: `pnpm test:docker:published-upgrade-survivor` installs `openclaw@latest` by default, seeds realistic existing-user files, configures that baseline with a baked command recipe, validates the resulting config, updates that published install to the candidate tarball, runs non-interactive doctor, writes `.artifacts/upgrade-survivor/summary.json`, then starts a loopback Gateway and checks configured intents, state preservation, startup, `/healthz`, `/readyz`, and RPC status budgets. Override one baseline with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC`, ask the aggregate scheduler to expand exact baselines with `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS` such as `all-since-2026.4.23`, and expand issue-shaped fixtures with `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` such as `reported-issues`; the reported-issues set includes `configured-plugin-installs` for automatic external OpenClaw plugin install repair. Package Acceptance exposes those as `published_upgrade_survivor_baseline`, `published_upgrade_survivor_baselines`, and `published_upgrade_survivor_scenarios`.
631631
- Session runtime context smoke: `pnpm test:docker:session-runtime-context` verifies hidden runtime context transcript persistence plus doctor repair of affected duplicated prompt-rewrite branches.
632632
- Bun global install smoke: `bash scripts/e2e/bun-global-install-smoke.sh` packs the current tree, installs it with `bun install -g` in an isolated home, and verifies `openclaw infer image providers --json` returns bundled image providers instead of hanging. Reuse a prebuilt tarball with `OPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz`, skip the host build with `OPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0`, or copy `dist/` from a built Docker image with `OPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local`.
633633
- Installer Docker smoke: `bash scripts/test-install-sh-docker.sh` shares one npm cache across its root, update, and direct-npm containers. Update smoke defaults to npm `latest` as the stable baseline before upgrading to the candidate tarball. Override with `OPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22` locally, or with the Install Smoke workflow's `update_baseline_version` input on GitHub. Non-root installer checks keep an isolated npm cache so root-owned cache entries do not mask user-local install behavior. Set `OPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cache` to reuse the root/update/direct-npm cache across local reruns.

0 commit comments

Comments
 (0)