Overview
This repository-first lab builds a container supply-chain workflow that scans an image, generates an SBOM, signs the image without a long-lived signing key, publishes provenance, and verifies those artifacts before deployment. Pull requests use a separate validation path with contents: read only that builds and scans locally; only trusted main/v* releases receive package-write, attestation, security-event, and GitHub OIDC permissions.
Review Status
Source and live publication reviewed July 26, 2026. The merged main
workflow built and scanned the application, published
sha256:d6439134951f052e54465a9bd5f54496481b460d162b252936959d64aad65d86,
generated consumer SBOMs, signed the image with GitHub OIDC, attached SPDX and
SLSA provenance attestations, and passed the separate evidence-verification job.
See the successful workflow run.
Safety and Limits
- Verify immutable image digests, not mutable tags.
- The verification script binds the signer to this repository’s
supply-chain.ymlworkflow onmainor av*tag; do not widen that identity expression to every GitHub repository or workflow. - Signature, SPDX SBOM attestation, and GitHub SLSA provenance verification are all mandatory and fail closed.
verify-image.shuses Cosign for all three checks and binds them to this repository’s exact authorized workflow identity. - Registry evidence may become visible shortly after the image manifest. The verifier retries each read-only check at most five times with bounded exponential backoff, then still fails closed if evidence remains missing or invalid.
- Manual release dispatches reject every ref except
mainandv*tags. Protect both the branch and release-tag namespace with repository rulesets. - Actions and base images are pinned, with Dependabot configured to surface updates. Review dependency PRs before merging rather than replacing pins with mutable branches.
- Go
1.26.5is the reviewed minimum for both the module and builder. A digest-pinned builder may move to a newer patch without forcing the module’s minimum version to match it exactly. - GitHub runner minutes, retained artifacts, GHCR storage, and egress can be billable. This lab does not create Azure, AWS, or GCP resources.
Start Here
- Read the companion article for the security model and workflow explanation.
- Open the canonical GitHub repository for the current prerequisites and files.
- Follow the repository README through build, vulnerability review, digest-based verification, and cleanup.
The GitHub README is the source of truth for commands because action versions, registry behavior, and attestation tooling can change independently of the article.
