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.

  1. Verify one asset:
gh attestation verify trishula-engine-linux-arm64 -R trishula-dev/trishula
  1. 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>
  1. Check the count matches the release. The rc3 asset ban_enforce_arm64_bpfel.o (sha256 cad16bcf…) carried 6 provenance
    • 6 SBOM bundles. The attest runs re-run per re-attest; every bundle verifies independently.
  2. 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; done

Discussion

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

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/trishula on the 2026.01-rc3 asset: 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.