Skip to content

feat(ci): attest build provenance#60

Merged
hyperpolymath merged 1 commit into
mainfrom
feat/attest-build-provenance
Jun 25, 2026
Merged

feat(ci): attest build provenance#60
hyperpolymath merged 1 commit into
mainfrom
feat/attest-build-provenance

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Estate attestation rollout

Adds GitHub native build-provenance attestation to .github/workflows/ghcr-publish.yml.

Push mechanism: nerdctl (nerdctl build + nerdctl push to ghcr.io), image ghcr.io/${{ github.repository }}.

How the digest is obtained: nerdctl push has no --digestfile flag, so immediately after the push the workflow reads the real sha256:... digest back from the registry with skopeo inspect --format '{{.Digest}}' (skopeo is pre-installed on ubuntu-latest), authenticating with the same GITHUB_TOKEN. That digest is exported as the push step output and fed to the attestation as subject-digest — it is the exact digest the registry holds for the pushed tag, not a guess.

Changes:

  • Added id-token: write + attestations: write to the job permissions.
  • Captured the pushed digest via skopeo inspect.
  • Added an actions/attest-build-provenance@e8998f94… (v2, pinned) step with push-to-registry: true.

Verify with:

gh attest verify oci://ghcr.io/hyperpolymath/zerostep:<tag> --repo hyperpolymath/zerostep

🤖 Generated with Claude Code

Add GitHub native build-provenance attestation to the GHCR publish
workflow. The image is built and pushed with nerdctl, which has no
--digestfile; the real sha256 digest is read back from the registry with
skopeo after push and bound to the attestation via
actions/attest-build-provenance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@hyperpolymath hyperpolymath merged commit 71dc119 into main Jun 25, 2026
9 of 20 checks passed
@hyperpolymath hyperpolymath deleted the feat/attest-build-provenance branch June 25, 2026 08:39
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.

1 participant