Skip to content

ci(supply-chain): SLSA build-provenance + consumer verification doc (#176) - #271

Merged
Chris-Wolfgang merged 1 commit into
vNextfrom
tier2/176-supply-chain
Jul 17, 2026
Merged

ci(supply-chain): SLSA build-provenance + consumer verification doc (#176)#271
Chris-Wolfgang merged 1 commit into
vNextfrom
tier2/176-supply-chain

Conversation

@Chris-Wolfgang

Copy link
Copy Markdown
Owner

Closes #176.

Summary

  • Adds actions/attest-build-provenance@v2 to release.yaml's pack-and-validate job. SLSA level 3 attestation via GitHub's Sigstore-signed service, over .nupkg + .snupkg + .bom.json. Consumer verification: gh attestation verify <file> --repo Chris-Wolfgang/Try-Pattern.
  • Adds id-token: write + attestations: write permissions to the job. No new secret required — the OIDC identity is already established.
  • Adds docs/SUPPLY-CHAIN.md explaining the four verification signals shipped per release (SBOM, reproducible-build manifest, SLSA attestation, SourceLink) with gh / jq / sha256sum recipes.

What's deferred with rationale

NuGet author code-signing via a certificate. Requires paid procurement (~$X/year) + KeyVault setup + user account action (identity verification). Documented in SUPPLY-CHAIN.md's "What we do NOT ship" section. Sigstore provenance already covers "built by this repo" chain-of-custody; a cert would additionally cover "signed by named author" — incremental value at real cost.

Stacked-PR base

Base = vNext. Ninth of the 11-PR batch.

Protected-file guard

Touches .github/workflows/release.yaml — protected. Expected admin-bypass at merge.

Test plan

  • Attestation step runs on the next release, produces a Sigstore-signed attestation
  • gh attestation verify Wolfgang.TryPattern.<v>.nupkg --repo Chris-Wolfgang/Try-Pattern succeeds against the shipped .nupkg

Closes #176.

Wires `actions/attest-build-provenance@v2` into the release
pack-and-validate job. Every release now cryptographically links
each shipped .nupkg / .snupkg / .bom.json to this repo + commit +
workflow run (SLSA level 3 via GitHub's Sigstore-signed attestation
service). Consumer verifies with:

  gh attestation verify Wolfgang.TryPattern.<v>.nupkg \
    --repo Chris-Wolfgang/Try-Pattern

Adds `id-token: write` + `attestations: write` to the job's
permissions block (contents: read baseline preserved). No new
secret / API-key procurement — the OIDC-based release identity is
already established (PR #254 wired NuGet/login@v1 via OIDC).

Adds `docs/SUPPLY-CHAIN.md` listing the four independent
verification signals now shipped per release:

  1. CycloneDX SBOM (already present)
  2. Reproducible-build manifest (added in #193)
  3. SLSA build-provenance attestation (this PR)
  4. SourceLink URL resolution (verified in CI per #181)

Deferred (with explicit rationale): NuGet author code-signing via a
certificate. Requires paid procurement + KeyVault setup + user
account action. Sigstore provenance covers "built by this repo"
chain-of-custody; a code-signing cert would additionally cover
"signed by named author" — a strictly incremental value for the
cost. Documented in SUPPLY-CHAIN.md's "What we do NOT ship" section.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 16, 2026 00:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

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.

2 participants