From e6fe95f19618a029153ec3448eaf27ca3d0de2da Mon Sep 17 00:00:00 2001 From: Rahul Krishna Date: Mon, 3 Aug 2026 07:14:24 -0700 Subject: [PATCH] Fix dead release test gate: use outcome, not conclusion The release workflow's test step sets continue-on-error: true, which rewrites steps.test.conclusion to 'success' regardless of the real result. The follow-up "Delete tag on failure" step gated on steps.test.conclusion == 'failure', so it could never fire: a red suite still produced a green release and shipped the artifact. Gate on steps.test.outcome instead, which preserves the step's actual result. continue-on-error stays -- without it the job aborts before the tag-deletion step can run -- and both halves now carry a comment saying why they must be paired that way. Note this fixes the mechanical gate only. Making the suite honestly green is the other half of #255 and is not addressed here. Refs #255 --- .github/workflows/release.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4768160..2230736 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,11 +41,17 @@ jobs: - name: Run Tests id: test + # continue-on-error is deliberate: without it a red suite fails the job + # immediately and the tag-deletion step below never runs. It must be paired + # with `outcome` (not `conclusion`) in that step — see the comment there. continue-on-error: true run: uv run make test - name: Delete tag on failure - if: steps.test.conclusion == 'failure' + # MUST be `outcome`, not `conclusion`: continue-on-error rewrites `conclusion` + # to `success`, so `steps.test.conclusion == 'failure'` is never true and this + # step never fires. `outcome` preserves the step's real result. + if: steps.test.outcome == 'failure' run: | echo "Tests failed. Deleting tag ${GITHUB_REF#refs/tags/}..." git push --delete origin ${GITHUB_REF#refs/tags/}