Commit 71dc119
feat(ci): attest build provenance (#60)
## 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](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent 7ed70f7 commit 71dc119
1 file changed
Lines changed: 21 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
| 23 | + | |
22 | 24 | | |
23 | 25 | | |
24 | 26 | | |
| |||
49 | 51 | | |
50 | 52 | | |
51 | 53 | | |
| 54 | + | |
52 | 55 | | |
53 | 56 | | |
54 | 57 | | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
55 | 76 | | |
56 | 77 | | |
57 | 78 | | |
| |||
0 commit comments