Skip to content

ci(reproducibility): publish per-release verification manifest (#193) - #263

Merged
Chris-Wolfgang merged 1 commit into
vNextfrom
tier2/193-third-party-verification
Jul 16, 2026
Merged

ci(reproducibility): publish per-release verification manifest (#193)#263
Chris-Wolfgang merged 1 commit into
vNextfrom
tier2/193-third-party-verification

Conversation

@Chris-Wolfgang

Copy link
Copy Markdown
Owner

Closes #193.

Summary

  • Adds a Generate reproducible-build manifest step to release.yaml's update-release-artifacts job. Emits reproducible-build-manifest.json with SHA-256 of every produced .nupkg / .snupkg + every lib/<tfm>/*.dll inside them, plus tag / commit SHA / SDK version / UTC timestamp. Attached to the GitHub Release alongside the existing artifacts.
  • Expands docs/REPRODUCIBLE-BUILD.md with the third-party verification procedure (tooling versions, rebuild, NuGet.org extract, manifest comparison, gh release download snippet), a "Reporting a discrepancy" section, and a note on verification attestations.
  • Adds a "🔐 Verify the build" section to README.md linking the doc.

Stacked-PR base

Base branch is tier2/183-reproducible-build (the PR that adds docs/REPRODUCIBLE-BUILD.md in the first place). When #262 merges to vNext, GitHub will re-target this PR's base to vNext automatically.

Local dry-run

Packed Wolfgang.TryPattern.0.3.5.nupkg + .snupkg from a clean Release build, ran the manifest-generation script by hand — output parses via python -c "import json; json.load(open(...))" and enumerates all 4 shipped TFM DLLs (net10.0, net462, net8.0, netstandard2.0) with their SHA-256 hashes.

Protected-file guard

Touches .github/workflows/release.yaml — protected. Expected admin-bypass at merge, same pattern as PRs #256 / #257 / #258 / #261 / #262.

Test plan

  • Release workflow's update-release-artifacts job succeeds on the next release
  • reproducible-build-manifest.json appears in the GitHub Release assets
  • Manifest parses as valid JSON with a non-empty packages[*].contents[]
  • README "🔐 Verify the build" section renders on GitHub

Closes #193.

Adds a `Generate reproducible-build manifest` step to release.yaml's
`update-release-artifacts` job. Emits a `reproducible-build-manifest.json`
listing SHA-256 of every produced .nupkg / .snupkg + every
`lib/<tfm>/*.dll` inside them, plus the release tag / commit SHA / SDK
version / UTC timestamp. Attached to the GitHub Release alongside the
existing .nupkg / .snupkg / .bom.json / coverage.zip.

Expands `docs/REPRODUCIBLE-BUILD.md` with:
  - Step-by-step third-party verification procedure (tooling versions,
    local rebuild, NuGet.org extract, manifest comparison).
  - `gh release download` snippet for pulling the manifest.
  - Reporting-a-discrepancy section clarifying what we treat as a
    supply-chain incident vs an environment issue.
  - Note on third-party verification attestations (not currently
    accepted unsolicited; may adopt Reproducible Builds project
    conventions in a future iteration).

Adds a "Verify the build" section to README.md linking the doc, per
the issue AC.

JSON generation validated locally by packing v0.3.5 outputs (nupkg +
snupkg + 4 TFM DLLs), running the manifest generator, and parsing
the result with python's `json.load` — parsed clean.

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

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