Skip to content

feat(workflows): sign release images and bundle (keyless) - #52

Merged
jmservera merged 1 commit into
mainfrom
release-signing/hybrid-attest-cosign
Jul 30, 2026
Merged

feat(workflows): sign release images and bundle (keyless)#52
jmservera merged 1 commit into
mainfrom
release-signing/hybrid-attest-cosign

Conversation

@jmservera

Copy link
Copy Markdown
Owner

Summary

Adds keyless supply-chain signing to the release pipeline (issue #15) using the hybrid model: GitHub build-provenance attestations for images, cosign sign-blob for the bundle. No private key is stored — both use GitHub Actions OIDC and the Sigstore transparency log.

Changes

.github/workflows/release.yml

  • publish-images: adds id-token: write + attestations: write, gives the build step an id, and adds actions/attest-build-provenance@v4.1.1 per image keyed by subject-digest with push-to-registry: true. One attestation per image covers both the pinned version tag and :beta (same digest).
  • publish-release: adds id-token: write, installs sigstore/cosign-installer@v4.1.0, signs each archive and checksums.txt with cosign sign-blob --bundle, and uploads the three .cosign.bundle files as release assets.

README.md

  • Adds a "Verifying a release" section with gh attestation verify (images) and cosign verify-blob (bundle), noting checksums.txt still covers plain integrity.

Verification for consumers

gh attestation verify oci://ghcr.io/jmservera/uberos/frontend:0.4.0-beta --repo jmservera/UbeROS

cosign verify-blob \
  --bundle uberos-0.4.0-beta.tar.gz.cosign.bundle \
  --certificate-identity-regexp 'https://github.com/jmservera/UbeROS/.github/workflows/release.yml@.*' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  uberos-0.4.0-beta.tar.gz

Validation

  • actionlint on the workflow — clean.
  • Markdown lint on the README — clean.
  • Signing/attestation runs only on a v* tag, so it validates end to end on the next release after merge. Steps are fail-closed so an unsigned or unattested artifact is never published silently.

Notes

Follow-up: optional installer-side signature verification (cosign verify-blob preflight in install.sh) ships separately on release-signing/installer-verify.

- attest SLSA build provenance for each GHCR image via GitHub OIDC
- sign release archives and checksums with cosign sign-blob
- document gh attestation and cosign verify-blob in the README

🔏 - Generated by Copilot
Copilot AI review requested due to automatic review settings July 30, 2026 10:54

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds keyless supply-chain integrity signals to the release process by publishing GitHub build provenance attestations for container images and Sigstore cosign bundles for release archives, plus documentation for consumers to verify both.

Changes:

  • Add build-provenance attestation generation for each pushed GHCR image in the release workflow.
  • Add keyless cosign sign-blob --bundle signing for release archives and checksums, and upload the resulting .cosign.bundle assets.
  • Document verification commands for image attestations (gh attestation verify) and bundle signatures (cosign verify-blob).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
.github/workflows/release.yml Adds OIDC-based attestations for images and cosign bundle signing + upload for release artifacts.
README.md Adds consumer-facing verification instructions for image attestations and cosign bundle signatures.

Comment thread README.md
Comment on lines +254 to +258
cosign verify-blob \
--bundle uberos-0.4.0-beta.tar.gz.cosign.bundle \
--certificate-identity-regexp 'https://github.com/jmservera/UbeROS/.github/workflows/release.yml@.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
uberos-0.4.0-beta.tar.gz
Comment on lines 153 to +155
permissions:
contents: write
id-token: write # keyless cosign sign-blob via GitHub OIDC (issue #15)
@jmservera
jmservera merged commit 8a6a9a9 into main Jul 30, 2026
15 checks passed
@jmservera
jmservera deleted the release-signing/hybrid-attest-cosign branch July 30, 2026 11:41
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.

2 participants