Skip to content
๐ŸŽ‰ GoReleaser v2.15 is out! with Flatpak, SRPM, and more!
Upgrading to Cosign v3

Upgrading to Cosign v3

November 5, 2025ยทcaarlos0

Cosign v3 streamlined its signing workflow by introducing the --bundle flag, replacing the previous approach that required separate certificate and signature files.

What Changed

Previously, signing artifacts with cosign required managing two separate outputs:

  • A .pem certificate file via --output-certificate
  • A .sig signature file via --output-signature

Now, the --bundle flag combines both into a single .sigstore.json file, simplifying both signing and verification workflows.

Updating Your GoReleaser Configuration

Here’s how to update your .goreleaser.yaml:

# https://goreleaser.com/customization/sign
signs:
  - cmd: cosign
-   certificate: "${artifact}.pem"
+   signature: "${artifact}.sigstore.json"
    args:
      - sign-blob
-     - "--output-certificate=${certificate}"
-     - "--output-signature=${signature}"
+     - "--bundle=${signature}"
      - "${artifact}"
      - "--yes"
    artifacts: checksum

The key changes:

  1. Remove the certificate field
  2. Update signature to use .sigstore.json extension
  3. Replace --output-certificate and --output-signature flags with a single --bundle flag

Verifying Signatures

Verification is now simpler too. Instead of:

cosign verify-blob \
  --certificate artifact.pem \
  --signature artifact.sig \
  artifact

You now just need:

cosign verify-blob \
  --bundle artifact.sigstore.json \
  artifact

Try It Out

Check out the complete working example at github.com/goreleaser/example-secure to see the new bundle-based signing in action.

This change reduces complexity and makes artifact signing more straightforward for everyone.

For more details, see goreleaser/goreleaser#6195.

Last updated on