Skip to content

ci(release): attest build provenance and attach the bundle to releases - #97

Merged
adrianbrad merged 1 commit into
mainfrom
ci/release-attestations
Nov 7, 2026
Merged

adrianbrad merged 1 commit into
mainfrom
ci/release-attestations

Conversation

@adrianbrad

Copy link
Copy Markdown
Owner

The release job has requested attestations: write since the cosign work but never produced provenance, which is why Scorecard's Signed-Releases sits at 8 with "does not have provenance" on every release. After goreleaser publishes, the job now attests every artifact listed in checksums.txt (source tarball and SBOM) with actions/attest-build-provenance, giving SLSA v1 build provenance signed keyless via Sigstore and stored in GitHub's attestation API, then uploads the Sigstore bundle to the release as queue-<version>.sigstore.json so it can be verified with gh attestation verify --bundle without API access. The release footer gains both verification commands. Existing cosign signatures are unchanged.

The SLSA generic generator was the other route and was rejected after research: its README says it is no longer maintained and points new integrations at artifact attestations, it must be referenced by tag which would drop Pinned-Dependencies from 10, and it ships Node 20 actions with an unanswered Node 24 issue. Scorecard itself has an open proposal to stop using it (ossf/scorecard#5308).

Risk: Signed-Releases stays at 8 for now. Scorecard only credits a .intoto.jsonl asset as provenance; attestation-API support is pending in ossf/scorecard#5001, after which every asset here is already attested. Renaming the bundle to .intoto.jsonl would score 10 today but misdescribe a Sigstore bundle as DSSE JSON Lines, so it is deliberately not done.

Verified with actionlint and YAML parsing only. The real test is the next tagged release: the bundle should appear as a release asset and gh attestation verify queue-<version>-source.tar.gz -R adrianbrad/queue should pass.

The release job already requested attestations: write but produced no
provenance. After goreleaser publishes, attest every artifact listed in
checksums.txt (source tarball and SBOM) with actions/attest-build-provenance,
which records SLSA v1 build provenance signed keyless via Sigstore in GitHub's
attestation API, and upload the Sigstore bundle to the release as
queue-<version>.sigstore.json so it can be verified without API access.

The SLSA generic generator was considered and rejected: it is no longer
maintained, must be referenced by tag (costing Pinned-Dependencies points),
and the SLSA project itself now points new integrations at artifact
attestations. Scorecard's Signed-Releases check stays at 8 until it learns
to credit attestations (ossf/scorecard#5001); renaming the bundle to
.intoto.jsonl to force a 10 would misdescribe its format and is not done.

The release footer documents gh attestation verify, online and with the
attached bundle.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@codecov

codecov Bot commented Nov 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (41a3ec2) to head (570adf5).

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #97   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            6         6           
  Lines          552       552           
=========================================
  Hits           552       552           
Flag Coverage Δ
unittests 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@adrianbrad
adrianbrad merged commit ee88d98 into main Nov 7, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant