decision: should release.sh check CI before it tags a commit? #519
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sixfold-space/madtea#519
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What happens
scripts/release.shnever checks CI. Its preflight covers the working tree, the branch, the remote, GoReleaser, the token, the signing key, and the satellite repos. So a release can be cut from a redmain, and nothing in the release path runs the gate: no tests, no govulncheck, no license inventory check.v0.19.0 was released on 2026-09-15 while the push CI run for that commit was failing.
Open question
Should the preflight resolve the CI result for the commit being tagged, and if so, what does it do?
Acceptance
release: refuse to tag a commit whose CI is not greento decision: should release.sh check CI before it tags a commit?There is a tension between blocking the release on failed CI and then failing to have a signed release. Not sure how to resolve yet.
Decided: option 1. The preflight resolves the CI result for the commit being tagged. It refuses on a failed run, and it refuses when no run exists.
My earlier comment named a tension that is not real. I checked the signing path:
scripts/release.sh:211-218needs the local GPG secret key in the keyring, and aborts when it is absent..goreleaser.yaml:82-96signschecksums.txtby calling localgpgwithGPG_FINGERPRINT.scripts/release.sh:367tags locally, and:394verifies the signature before publish.Every signature is made on the release machine. The forge signs nothing, and it must not. So a refusal cannot produce an unsigned release. It only delays the release until CI is green, which is the behaviour I want.
Refusing on a missing run is deliberate. A missing run is an unknown state, not a safe one. The fix is to make CI run for that commit, not to tag past the gap.
Build outline:
docs/contributing/releasing.md, in the preflight list.Acceptance stays as written: a release attempt against a red commit stops, and a release attempt against a commit with no run stops.
This is independent of #499. That issue makes
mainrequire the checks it already claims to require. This gate is in the release path, where the tag is cut.