fix(release): support frozen validation tooling

This commit is contained in:
Vincent Koc
2026-08-11 07:20:44 +08:00
parent 87475758dc
commit 546bb29055
6 changed files with 51 additions and 4 deletions
@@ -1983,6 +1983,12 @@ jobs:
workflow="openclaw-release-telegram-qa.yml"
run_id=""
run_name=""
telegram_target_ref="$TARGET_REF"
case "$telegram_target_ref" in
validation/target-* | refs/heads/validation/target-*)
telegram_target_ref="$TARGET_SHA"
;;
esac
find_child_runs() {
RUN_NAME="$run_name" gh api -X GET \
@@ -2035,7 +2041,7 @@ jobs:
--ref main \
-f dispatch_id="$dispatch_id" \
-f expected_trusted_workflow_sha="$expected_trusted_workflow_sha" \
-f target_ref="$TARGET_REF" \
-f target_ref="$telegram_target_ref" \
-f target_sha="$TARGET_SHA"
for _ in $(seq 1 60); do
+1 -1
View File
@@ -1544,7 +1544,7 @@ if [ -n "${OPENCLAW_CLAWHUB_URL:-}" ]; then
fi
phase assert-prepublish-requests node \
"${OPENCLAW_UPGRADE_SURVIVOR_CLAWHUB_FIXTURE_SERVER:-scripts/e2e/lib/clawhub-fixture-server.cjs}" \
assert-prepublish-requests "$OPENCLAW_CLAWHUB_URL" "@openclaw/whatsapp" "$candidate_version" "$clawhub_security_mode"
assert-prepublish-requests "$OPENCLAW_CLAWHUB_URL" "@openclaw/matrix" "$candidate_version" "$clawhub_security_mode"
fi
phase root-managed-vps-cli-usable assert_root_managed_vps_cli_usable
phase assert-legacy-plugin-dependency-debris-before-doctor assert_legacy_plugin_dependency_debris_before_doctor
+5 -1
View File
@@ -50,7 +50,11 @@ openclaw_live_link_runtime_tree "$tmp_dir"
openclaw_live_stage_state_dir "$tmp_dir/.openclaw-state"
openclaw_live_prepare_staged_config
cd "$tmp_dir"
node --import tsx scripts/test-live.mts -- src/gateway/gateway-models.profiles.live.test.ts
if [[ -f scripts/test-live.mjs ]]; then
node scripts/test-live.mjs -- src/gateway/gateway-models.profiles.live.test.ts
else
node --import tsx scripts/test-live.mts -- src/gateway/gateway-models.profiles.live.test.ts
fi
EOF
OPENCLAW_LIVE_DOCKER_REPO_ROOT="$ROOT_DIR" "$TRUSTED_HARNESS_DIR/scripts/test-live-build-docker.sh"
+5 -1
View File
@@ -64,7 +64,11 @@ openclaw_live_link_runtime_tree "$tmp_dir"
openclaw_live_stage_state_dir "$tmp_dir/.openclaw-state"
openclaw_live_prepare_staged_config
cd "$tmp_dir"
node --import tsx scripts/test-live.mts -- src/agents/models.profiles.live.test.ts
if [[ -f scripts/test-live.mjs ]]; then
node scripts/test-live.mjs -- src/agents/models.profiles.live.test.ts
else
node --import tsx scripts/test-live.mts -- src/agents/models.profiles.live.test.ts
fi
EOF
OPENCLAW_LIVE_DOCKER_REPO_ROOT="$ROOT_DIR" "$TRUSTED_HARNESS_DIR/scripts/test-live-build-docker.sh"
+15
View File
@@ -7002,6 +7002,21 @@ printf '%s\n' "\${CURL_SUCCESS_IP:-203.0.113.7}"
},
);
it("pins transient validation refs before trusted Telegram QA dispatch", () => {
const releaseWorkflow = readReleaseChecksWorkflow();
const dispatchStep = releaseWorkflow.jobs.qa_live_telegram_release_checks.steps.find(
(step: WorkflowStep) => step.name === "Dispatch and await trusted Telegram QA",
);
expect(dispatchStep.env.TARGET_REF).toBe("${{ needs.resolve_target.outputs.ref }}");
expect(dispatchStep.env.TARGET_SHA).toBe("${{ needs.resolve_target.outputs.revision }}");
expect(dispatchStep.run).toContain('telegram_target_ref="$TARGET_REF"');
expect(dispatchStep.run).toContain("validation/target-* | refs/heads/validation/target-*)");
expect(dispatchStep.run).toContain('telegram_target_ref="$TARGET_SHA"');
expect(dispatchStep.run).toContain('-f target_ref="$telegram_target_ref"');
expect(dispatchStep.run).not.toContain("release/* | refs/heads/release/*)");
});
it("keeps maturity scorecard release docs opt-in from release checks", () => {
const releaseWorkflow = readReleaseChecksWorkflow();
const job = releaseWorkflow.jobs.maturity_scorecard_release_checks;
+18
View File
@@ -2370,6 +2370,9 @@ docker_e2e_docker_run_cmd run demo
publishedRunner.indexOf("phase assert-prepublish-requests node"),
);
expect(publishedRunner).toContain('if [ "$candidate_version" = "2026.6.35" ]; then');
expect(publishedRunner).toContain(
'assert-prepublish-requests "$OPENCLAW_CLAWHUB_URL" "@openclaw/matrix" "$candidate_version"',
);
expect(publishedRunner).toContain('"$clawhub_security_mode"');
expect(publishedRunner.indexOf("phase assert-prepublish-requests node")).toBeLessThan(
publishedRunner.indexOf("phase doctor run_doctor"),
@@ -2478,6 +2481,21 @@ docker_e2e_docker_run_cmd run demo
expect(inner.status, inner.stderr).toBe(0);
});
it("selects the live model test runner shipped by the staged candidate", () => {
for (const scriptPath of [
"scripts/test-live-gateway-models-docker.sh",
"scripts/test-live-models-docker.sh",
]) {
const script = readFileSync(scriptPath, "utf8");
const legacyRunnerIndex = script.indexOf("node scripts/test-live.mjs --");
const currentRunnerIndex = script.indexOf("node --import tsx scripts/test-live.mts --");
expect(script).toContain("if [[ -f scripts/test-live.mjs ]]; then");
expect(legacyRunnerIndex).toBeGreaterThan(-1);
expect(currentRunnerIndex).toBeGreaterThan(legacyRunnerIndex);
}
});
it("wraps package-backed scenario OpenClaw CLI calls with the shared timeout helper", () => {
const paths = [
CODEX_ON_DEMAND_DOCKER_E2E_PATH,