diff --git a/.github/workflows/full-release-validation.yml b/.github/workflows/full-release-validation.yml index 264130880b3..d24589f4559 100644 --- a/.github/workflows/full-release-validation.yml +++ b/.github/workflows/full-release-validation.yml @@ -82,8 +82,8 @@ permissions: contents: read concurrency: - group: full-release-validation-${{ inputs.ref }} - cancel-in-progress: ${{ inputs.ref == 'main' }} + group: full-release-validation-${{ inputs.ref }}-${{ inputs.rerun_group }} + cancel-in-progress: true env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" diff --git a/.github/workflows/openclaw-release-checks.yml b/.github/workflows/openclaw-release-checks.yml index d1d2c6e1087..30fd1d58be6 100644 --- a/.github/workflows/openclaw-release-checks.yml +++ b/.github/workflows/openclaw-release-checks.yml @@ -55,8 +55,8 @@ on: - qa-live concurrency: - group: openclaw-release-checks-${{ inputs.ref }} - cancel-in-progress: ${{ inputs.ref == 'main' }} + group: openclaw-release-checks-${{ inputs.expected_sha || inputs.ref }}-${{ inputs.rerun_group }} + cancel-in-progress: true env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" diff --git a/test/scripts/plugin-prerelease-test-plan.test.ts b/test/scripts/plugin-prerelease-test-plan.test.ts index fabb22fb355..977890b28b1 100644 --- a/test/scripts/plugin-prerelease-test-plan.test.ts +++ b/test/scripts/plugin-prerelease-test-plan.test.ts @@ -287,6 +287,23 @@ describe("scripts/lib/plugin-prerelease-test-plan.mjs", () => { ]); }); + it("cancels superseded manual release validation runs for the same target and group", () => { + const releaseChecksWorkflow = parse( + readFileSync(".github/workflows/openclaw-release-checks.yml", "utf8"), + ); + const fullReleaseWorkflow = readFullReleaseValidationWorkflow(); + + expect(releaseChecksWorkflow.concurrency).toEqual({ + group: + "openclaw-release-checks-${{ inputs.expected_sha || inputs.ref }}-${{ inputs.rerun_group }}", + "cancel-in-progress": true, + }); + expect(fullReleaseWorkflow.concurrency).toEqual({ + group: "full-release-validation-${{ inputs.ref }}-${{ inputs.rerun_group }}", + "cancel-in-progress": true, + }); + }); + it("keeps the live-ish availability check redacted", () => { const output = execFileSync( process.execPath,