Skip to content

ci: migrate release signing to cosign v3 (deliberate, dry-run verified + documented) #148

Description

@thc1006

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

  1. Remove the cosign-release: v2.6.3 pin from release.yml (let installer v4 default to cosign v3.x), on a feature branch.
  2. 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.)
  3. 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.
  4. Decide explicitly: keep v3 defaults (referrers + new bundle) or retain legacy format for consumer continuity (cosign v3 still allows the old behavior via flags).
  5. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions