Skip to content

Add explicit unsigned Windows release mode - #112

Merged
dantraynor merged 1 commit into
mainfrom
unsigned-windows-release-mode
Aug 16, 2026
Merged

Add explicit unsigned Windows release mode#112
dantraynor merged 1 commit into
mainfrom
unsigned-windows-release-mode

Conversation

@dantraynor

Copy link
Copy Markdown
Owner

Summary

Signed Windows publication stays blocked until a signing provider and WINDOWS_EXPECTED_SIGNER_SUBJECT are recorded — but provider onboarding is still pending, and that gate currently blocks any release from carrying Windows assets at all.

This adds an explicit, opt-in unsigned mode: setting the WINDOWS_ALLOW_UNSIGNED_RELEASE repository variable to true ships the raw EXE and MSI without Authenticode signatures.

  • package-windows stages the reviewed raw EXE and builds the MSI with -AllowUnsignedDevelopmentBuild instead of requiring a provider-signed helper; it records unsigned evidence carrying both final hashes.
  • Defender environment validation and the controlled-runner scan are skipped; candidate assembly accepts the skipped scan only in unsigned mode and drops the Defender evidence expectation.
  • Candidate metadata records windowsSigning: unsigned. Publication revalidates the mode, requires the same repository-variable consent at publish time, and skips only the signature/Defender evidence checks — the protected windows-release-clearance approval still gates publication, and all hash/byte-compare checks still run.
  • Unsigned mode refuses to run while a signer subject is configured, so the modes cannot mix silently. With the variable unset, behavior is unchanged and fail-closed.
  • Code-signing policy and release checklist record the interim exception; the variable comes out again once a provider is onboarded.

Testing

  • actionlint v1.7.12 clean on both workflows.
  • No change with the variable unset — default path identical to current main.

Signed Windows publication stays blocked until a signing provider and
WINDOWS_EXPECTED_SIGNER_SUBJECT are recorded, but provider onboarding is
still pending and that gate currently blocks every release that wants to
include Windows assets at all.

Setting the WINDOWS_ALLOW_UNSIGNED_RELEASE repository variable to
"true" now ships the raw EXE and MSI without Authenticode signatures:

- package-windows stages the reviewed raw EXE and builds the MSI with
  -AllowUnsignedDevelopmentBuild instead of requiring a provider-signed
  helper, and records unsigned evidence with both hashes.
- The Defender environment validation and controlled-runner scan are
  skipped; candidate assembly accepts the skipped scan only in unsigned
  mode and drops the Defender evidence expectation.
- Candidate metadata records windowsSigning: unsigned, and publication
  revalidates that mode, requires the same repository-variable consent
  at publish time, and skips only the signature and Defender evidence
  checks. The protected windows-release-clearance approval still gates
  publication.
- Unsigned mode refuses to run while a signer subject is configured, so
  the two modes cannot mix silently. With the variable unset, behavior
  is unchanged and fail-closed.

Update the code-signing policy and release checklist to record the
interim exception.
@dantraynor
dantraynor merged commit 3f8393b into main Aug 16, 2026
15 checks passed
@dantraynor
dantraynor deleted the unsigned-windows-release-mode branch August 16, 2026 21:35
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