Skip to content

ci: bundle release zip with loader, SHA256SUMS, and Sigstore provenance#37

Merged
jaenster merged 1 commit into
blizzhackers:masterfrom
jaenster:ci/release-pipeline
May 16, 2026
Merged

ci: bundle release zip with loader, SHA256SUMS, and Sigstore provenance#37
jaenster merged 1 commit into
blizzhackers:masterfrom
jaenster:ci/release-pipeline

Conversation

@jaenster
Copy link
Copy Markdown
Collaborator

Summary

Hardens the release pipeline that fires on v* tag pushes. The existing workflow uploaded a bare Charon.dll and required users to source the DLLLoader on their own. This produces a self-contained, verifiable release.

  • Release zip: Charon-vX.X.X-x86.zip now contains Charon.dll + dbghelp.dll (DLLLoader) + readme.md + SHA256SUMS.txt. Matches the unzip-to-D2-directory install flow already documented in the readme.
  • Loader pinning: DLLLoader pinned to upstream tag 0.1.3, and its dbghelp.dll is verified against a hardcoded sha256 before bundling — an upstream asset swap can't slip a different binary into the zip.
  • Sigstore build provenance via actions/attest-build-provenance on the .zip and .pdb. Anyone can verify a release artifact came from this repo + this workflow with:
    gh attestation verify Charon-vX.X.X-x86.zip --repo blizzhackers/Charon
    
    No code-signing cert, no expiry, no key management.
  • Symbols: .pdb uploaded as a separate workflow artifact and published on the release for crash debugging.
  • Supply-chain hygiene: all actions pinned to commit shas with version comments.

Why not Authenticode code signing?

Charon.dll isn't a standalone exe that hits SmartScreen — it's side-loaded into Game.exe via DLLLoader. Real EV certs cost money, self-signed ones still warn, and provenance attestations cover the supply-chain integrity question that actually applies here without any of the key management or expiry overhead.

Test plan

  • Push a throwaway v0.0.0-test tag against this branch and confirm the release job assembles the zip, publishes it, and attaches a provenance attestation visible under the run's Attestations tab.
  • Run gh attestation verify Charon-v0.0.0-test-x86.zip --repo blizzhackers/Charon on the produced asset.
  • Confirm sha256sum -c SHA256SUMS.txt passes inside the unzipped bundle.
  • Unzip into a clean D2 directory, shortcut Game.exe -loaddll Charon.dll, sanity-check load.
  • Confirm the non-tag build job still runs on PR/branch pushes and produces the same matrix artifacts as before.

The existing workflow shipped a bare Charon.dll on tag push. Users still
had to source the DLLLoader separately and trust the upload by hand.

This switches the release output to a self-contained Charon-vX.X.X-x86.zip
(Charon.dll + dbghelp.dll + readme.md + SHA256SUMS.txt) matching the
unzip-to-D2-directory install flow in the readme. The DLLLoader is
pinned to upstream tag 0.1.3 and its dbghelp.dll is verified against a
hardcoded sha256 before bundling, so an upstream asset swap can't slip
a different binary into the zip.

Adds a Sigstore-signed build provenance attestation on the zip and pdb
(actions/attest-build-provenance). Anyone can verify a release artifact
came from this repo+workflow with:

    gh attestation verify Charon-vX.X.X-x86.zip --repo blizzhackers/Charon

Authenticode code signing is intentionally skipped: Charon.dll isn't a
standalone exe that hits SmartScreen, it's side-loaded into Game.exe via
DLLLoader. Real certs cost money, self-signed ones still warn, and
provenance attestations cover the supply-chain integrity question that
actually applies here without key management or expiry.

Other changes:
- Symbols (.pdb) uploaded as a separate workflow artifact and published
  on the release for crash debugging.
- All actions pinned to commit shas with version comments.
@jaenster jaenster merged commit 9e075b5 into blizzhackers:master May 16, 2026
3 checks passed
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.

1 participant