feat(release): cosign-sign connector + ATOR sidecar images via keyless OIDC#66
Merged
Conversation
…s OIDC Adds sigstore/cosign-installer@v3 + cosign sign --yes to all three docker/build-push-action publish steps (build-and-publish.yml:docker, build-and-publish.yml:sidecar, release.yml:docker-release). Signs by digest (steps.<id>.outputs.digest) using GitHub's OIDC token — no static keys, no secrets beyond GITHUB_TOKEN. Adds id-token: write permission at the job level for each of the three signing jobs. Documents the supply-chain guarantee in CONNECTOR_RELEASE_CONTRACT.md (new ## Supply-chain signing section with cosign verify command + notes on index-digest coverage and Rekor transparency log integration). Closes Story 44.3 / Epic 44. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
🎉 This PR is included in version 3.6.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This was referenced May 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Story 44.3 / Epic 44 — supply-chain signing for all published images.
Three signing targets:
build-and-publish.ymldockerjob →ghcr.io/toon-protocol/connector(line 179,id: push-connector)build-and-publish.ymlsidecarjob →ghcr.io/toon-protocol/ator-sidecar(line 261,id: push-sidecar)release.ymldocker-releasejob →ghcr.io/toon-protocol/connector(line 131,id: push-release)What was added to each signing job:
id-token: writepermission (required for GHA OIDC token endpoint — without it, Fulcio returns 403)sigstore/cosign-installer@v3step (installs cosign v2.x;@v3matches the project's existing action-major convention)id: <step-id>on eachdocker/build-push-actionpush step (enablessteps.<id>.outputs.digest)cosign sign --yes "${IMAGE}@${DIGEST}"step immediately after each push, signing the index digest not a tagWhy
id-token: write: the GHA OIDC token is only available whenid-token: writeis declared at the job level. Added alongside the existingcontents: read+packages: write— not replacing them, and NOT at workflow level (that would over-grant to jobs that don't need it).Why digest, not tag:
steps.<id>.outputs.digestreturns the multi-arch manifest index digest. Signing by digest is content-addressed and immune to future tag-pointer mutation. See CONNECTOR_RELEASE_CONTRACT.md § Historical tag corruption for the prior incident that motivates this choice.The
if: steps.tag.outputs.tag != ''guard on therelease.ymlsign step mirrors all surrounding steps in that job — without it, the step runs on commits where semantic-release decides not to bump (no tag → no digest → cosign signs an empty-string ref).feat:commit type: semantic-release maps this to a MINOR bump, so merge will cut a newvX.Y.Ztag. Bothrelease.yml(fires on merge-commit-to-main) andbuild-and-publish.yml(fires on the tag push) will run with signing enabled. Verification (AC #6) will happen against that release's tag automatically.Verification (AC #6 — to be run post-merge)
Story 44.3 is NOT closed until all four checks pass.
Files changed
.github/workflows/build-and-publish.yml—docker+sidecarjobs:id-token: write, cosign-installer,id:on push steps, sign steps.github/workflows/release.yml—docker-releasejob:id-token: write, cosign-installer,id:on push step, sign stepCONNECTOR_RELEASE_CONTRACT.md— new## Supply-chain signingsection; updated lines 47–49 and line 120 referenceCHANGELOG.md—[Unreleased] ### Buildentry