Recipe 12 — Verify a release: the SLSA provenance check before you deploy
| Tool | Section | Level | Time | Layer | Tags |
|---|---|---|---|---|---|
gh attestation · release-attest.yml |
Supply chain | easy | 3 min | release | SLSA, attestation, supply-chain, TR-81 |
Problem
You downloaded a Trishula release asset. You want proof of what built it: which workflow, from which commit, signed by whom. You want that proof before the binary runs anywhere.
Solution
Every release asset carries two attestations the moment the release publishes: the SLSA provenance (https://slsa.dev/provenance/v1) and the SPDX SBOM (https://spdx.dev/Document/v2.3).
Both are Rekor-backed Sigstore bundles.
- Verify one asset:
gh attestation verify trishula-engine-linux-arm64 -R trishula-dev/trishula- Read what a bundle states. The attestation API returns the full envelope per digest; the provenance names the builder and the run:
builder.id = https://github.com/trishula-dev/trishula/.github/workflows/release-attest.yml@refs/heads/main
buildType = https://actions.github.io/buildtypes/workflow/v1
invocation = https://github.com/trishula-dev/trishula/actions/runs/<run-id>
- Check the count matches the release. The rc3 asset
ban_enforce_arm64_bpfel.o(sha256cad16bcf…) carried 6 provenance- 6 SBOM bundles. The attest runs re-run per re-attest; every bundle verifies independently.
- Verify in bulk before deploying a fleet:
gh release download <tag> -R trishula-dev/trishula -D assets
for f in assets/*; do gh attestation verify "$f" -R trishula-dev/trishula; doneDiscussion
The verification runs offline-grade: the bundle carries the Rekor inclusion promise and proof. gh attestation verify checks the Sigstore trust root. A failed verify = the asset does not match what CI built — do not deploy it, file it. The SHA in checksums.txt pins the bytes; the attestation pins the producer. Both must hold.
The GA cut notes carry this block per the release rule. The verify command runs the same on every future tag.
See also
- .github/workflows/release-attest.yml — the attest job.
- SECURITY.md — what the release artefacts carry.
- Issue #120 (TR-81) — the attestation lane.
- Issue #260 — resolved CI-seating note (one PR, one branch).
Provenance
Verified against trishula@97206190 on main, 2026-10-25.
Smoke run, 2026-10-25:
gh attestation verify /tmp/ban_enforce_arm64_bpfel.o -R trishula-dev/trishulaon the2026.01-rc3asset: exit 0.- The attestation API read 12 bundles for the asset sha: 6 provenance/v1
- 6 SPDX 2.3. The builder id, the build type and the Rekor log entries recorded above.