AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Moderate 60 Bitcoin

CI: never replace files already on the release

Public commit record

What the developer wrote

Authored by Níckolas Goline

97/100 · Strong
CI: never replace files already on the release

The release job uploaded release/* with action-gh-release, which replaces
any asset of the same name. Re-running it after the release captains had
added their signatures to SHA256SUMS-<version>.asc replaced that file with
one carrying only the CI signature, so users verifying the release found
the maintainers' signatures gone.

Upload with tools/publish-release-assets.sh instead:

- files the release does not have yet are uploaded;
- files it already has must be identical, otherwise the job stops before
touching anything (the builds disagree, and nothing should be signed);
- an .asc it already has gets our signature appended, after normalising
the armor so gpg reads every block; one that already carries our
signature is left alone, so re-runs are harmless.

The draft release is created with gh when it does not exist yet, with the
same title and pre-release flag as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
The short version

What changed, and why it matters

This commit fixes a release-pipeline bug where re-running the automated release job could accidentally wipe out human maintainers' cryptographic signatures from the release's checksum file. Before the fix, the CI tool replaced any existing file with the same name, so if release captains had already added their GPG signatures to SHA256SUMS-<version>.asc, a re-run would overwrite it with a version signed only by the CI bot. Users who later checked the signatures would see only one signature and could not verify that multiple maintainers had approved the release. The fix introduces a new script that only adds missing files, refuses to change files that differ, and appends the CI signature to existing signature files instead of replacing them.

Recommended action

Review and merge the commit, then verify the new script in a staging release workflow. Ensure the GH_TOKEN and gpg signing key are available in the release job. Consider adding a CI test that simulates a re-run against a draft release to confirm .asc files are appended, not overwritten, and that mismatched non-signature files cause the job to abort.

Security signals we found

01

Loss of maintainer signatures on release artifacts

02

CI job overwriting manually-added GPG signatures

03

Supply-chain / release-integrity risk from incomplete signature set

04

New script enforces byte-identical non-signature assets and signature merging

05

Normalization of PGP armor blocks to prevent skipped signatures

Risk score

Why this scored 60/100

Our methodology →
Potential impact 18/30
Exploitability 8/25
Stealth signal 10/15
Affected reach 12/15
Confidence 8/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.