Skip to content

fix(release): migrate signing to cosign v3 bundle format#2

Merged
YannickGagnon merged 1 commit into
mainfrom
fix/cosign-v3-release-signing
Jun 5, 2026
Merged

fix(release): migrate signing to cosign v3 bundle format#2
YannickGagnon merged 1 commit into
mainfrom
fix/cosign-v3-release-signing

Conversation

@YannickGagnon

Copy link
Copy Markdown
Collaborator

The v0.1.0 release run failed at goreleaser setup — before our own signing ran.

Root cause

goreleaser/goreleaser-action verifies its own pinned goreleaser download using cosign against the Sigstore bundle format. sigstore/cosign-installer@v3.7.0 installs cosign v2.4.x, which can't parse that bundle:

cosign verify-blob --certificate-identity .../goreleaser/...@refs/tags/v2.16.0 --bundle <f> <f>
Error: bundle does not contain cert for verification, please provide public key

cosign v3 streamlined signing into a single .sigstore.json bundle; verifying goreleaser's download (and producing our own signature) now requires cosign v3.

Fix — align with GoReleaser's canonical supply-chain example

  • release.yml: cosign-installer@v3.7.0@v4.1.2 (installs cosign v3.0.x); pin goreleaser-action@v7@v7.2.2.
  • .goreleaser.yml signs block → bundle format: --bundle=${signature} with signature: "${artifact}.sigstore.json", dropping the separate --output-certificate/--output-signature (.pem/.sig).
  • README.md: verify with cosign verify-blob --bundle checksums.txt.sigstore.json ….

Validation

goreleaser check passes; YAML parses. Keyless signing needs Actions OIDC, so it can only be exercised in CI — the re-cut v0.1.0 run is the real test.

🤖 Generated with Claude Code

The v0.1.0 release run failed at goreleaser setup: goreleaser-action
verifies its own pinned tool download using cosign's Sigstore-bundle
format, but cosign-installer@v3.7.0 ships cosign v2.4.x, which can't
read that bundle ("bundle does not contain cert for verification,
please provide public key").

Align with GoReleaser's canonical supply-chain example:
- release.yml: cosign-installer @v3.7.0 -> @v4.1.2 (installs cosign
  v3.0.x); pin goreleaser-action @v7 -> @v7.2.2.
- .goreleaser.yml signs block: emit a single self-contained Sigstore
  bundle (checksums.txt.sigstore.json) via `--bundle=${signature}`
  instead of separate --output-certificate/--output-signature
  (.pem/.sig) files.
- README: verify with `cosign verify-blob --bundle
  checksums.txt.sigstore.json ...` (no more .sig/.pem).

Validated with `goreleaser check`. Keyless signing itself can only be
exercised in CI (needs Actions OIDC), so the re-tagged release run is
the real test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@YannickGagnon YannickGagnon merged commit f3318a1 into main Jun 5, 2026
4 checks passed
@YannickGagnon YannickGagnon deleted the fix/cosign-v3-release-signing branch June 5, 2026 12:34
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