Context
release.yml uses sigstore/cosign-installer to sign release images (keyless OIDC) and attest the SPDX SBOM. As of #146-era work, the installer is bumped to v4.1.2, but the cosign binary is explicitly pinned to cosign-release: v2.6.3.
Why pinned: cosign-installer v4 defaults to cosign v3.0.6, and cosign v3 flips two defaults ON that change our published artifacts:
- container signatures stored as OCI Image 1.1 referring artifacts (v2 used the legacy
.sig tag), and
- the new protobuf Sigstore bundle format for attestations.
These change the signature/attestation format vs v0.4.0 and could affect the anonymous cosign verify chain-of-trust we advertise. To keep the v0.5.0 release low-risk and format-consistent with v0.4.0, we deliberately stayed on cosign v2.x. This issue tracks migrating to cosign v3 properly — tested and documented — rather than as a side-effect of a feature release.
Migration plan
- Remove the
cosign-release: v2.6.3 pin from release.yml (let installer v4 default to cosign v3.x), on a feature branch.
- Before tagging any real release, run
release.yml via workflow_dispatch with dry_run=false — this publishes a synthetic-version image and exercises the full v3 cosign sign --recursive + cosign attest path. (Clean up the synthetic image/tag afterward.)
- Anonymously verify the synthetic image end-to-end:
cosign verify (signature) and cosign verify-attestation --type spdxjson (SBOM), with no local trust material, confirming the OCI-1.1-referrer + protobuf-bundle chain resolves on GHCR.
- Confirm GHCR's Referrers API support / cosign's tag-schema fallback behavior.
- Decide explicitly: keep v3 defaults (referrers + new bundle) or retain legacy format for consumer continuity (cosign v3 still allows the old behavior via flags).
- Document the format change in the release notes and update any user-facing
cosign verify instructions — the format differs from v0.4.0/v0.5.0, so existing verifier scripts/expectations may need updating.
Acceptance criteria
- A release image (or synthetic dry-run image) produced with cosign v3 verifies anonymously via
cosign verify + cosign verify-attestation against GHCR.
- The signature/attestation format change is documented for downstream consumers.
- Decision recorded (keep v3 defaults vs retain legacy format).
Refs
Context
release.ymlusessigstore/cosign-installerto sign release images (keyless OIDC) and attest the SPDX SBOM. As of #146-era work, the installer is bumped to v4.1.2, but the cosign binary is explicitly pinned tocosign-release: v2.6.3.Why pinned: cosign-installer v4 defaults to cosign v3.0.6, and cosign v3 flips two defaults ON that change our published artifacts:
.sigtag), andThese change the signature/attestation format vs v0.4.0 and could affect the anonymous
cosign verifychain-of-trust we advertise. To keep the v0.5.0 release low-risk and format-consistent with v0.4.0, we deliberately stayed on cosign v2.x. This issue tracks migrating to cosign v3 properly — tested and documented — rather than as a side-effect of a feature release.Migration plan
cosign-release: v2.6.3pin fromrelease.yml(let installer v4 default to cosign v3.x), on a feature branch.release.ymlviaworkflow_dispatchwithdry_run=false— this publishes a synthetic-version image and exercises the full v3cosign sign --recursive+cosign attestpath. (Clean up the synthetic image/tag afterward.)cosign verify(signature) andcosign verify-attestation --type spdxjson(SBOM), with no local trust material, confirming the OCI-1.1-referrer + protobuf-bundle chain resolves on GHCR.cosign verifyinstructions — the format differs from v0.4.0/v0.5.0, so existing verifier scripts/expectations may need updating.Acceptance criteria
cosign verify+cosign verify-attestationagainst GHCR.Refs