Skip to content

ci: harden WinGet manifest generation and PR validation - #16

Merged
ruslanlap merged 7 commits into
masterfrom
chore/winget-signing-readiness
Sep 25, 2026
Merged

ruslanlap merged 7 commits into
masterfrom
chore/winget-signing-readiness

Conversation

@ruslanlap

@ruslanlap ruslanlap commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

Summary

Hardens the WinGet publishing path without changing the existing SignPath release-signing flow.

Changes

  • run the MSIX x64/ARM64 build workflow on pull requests that touch packaging/release files
  • only package WinGet manifests after a successful release workflow
  • treat manual release_tag input as data, validate its format, and avoid expression interpolation into PowerShell
  • download the actual release .msixbundle
  • calculate InstallerSha256 and SignatureSha256 automatically
  • normalize release tags to four-part package versions
  • package exactly four current-version manifest files, excluding historical winget/ folders
  • document the current 0x800B0109 / CERT_E_UNTRUSTEDROOT blocker and the corrected submission flow

Scope

This PR deliberately keeps SignPath-only release signing unchanged. A generic PFX fallback is unsafe for the current MSIX because the certificate subject must match the package manifest Publisher. That identity should only be changed once the actual trusted signing certificate identity is known.

Current upstream blocker

microsoft/winget-pkgs#431811 has confirmed that the only remaining validation blocker for v1.0.4 is the untrusted certificate chain.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0b551cf79d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/deploy.yml Outdated

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Devin Review found 3 potential issues.

2 flags not posted on this PR by your GitHub settings — view them in Devin Review. (Configure)

Devin Review

Comment thread .github/workflows/deploy.yml Outdated
Comment thread .github/workflows/winget-publish.yml
Comment thread .github/workflows/winget-publish.yml Outdated
@ruslanlap ruslanlap changed the title ci: make WinGet publishing signing-provider agnostic ci: harden WinGet manifest generation and PR validation Sep 25, 2026

Copy link
Copy Markdown
Owner Author

@codex review

Please re-review the latest head. The PFX fallback was removed; the latest changes also gate workflow_run on success and pass/validate the manual release tag via environment variables.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4ff7623bdc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

workflow_dispatch:
pull_request:
branches: [master]
paths:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include central dependency files in PR validation

When a PR changes only Directory.Packages.props, global.json, or nuget.config, none of these path filters match, so the new MSIX validation workflow does not run. Because this repository centrally declares every NuGet version in Directory.Packages.props, dependency-only PRs— including the updates configured in .github/dependabot.yml—receive no compile or packaging validation. Add the root build inputs to this paths list.

Useful? React with 👍 / 👎.

TAG="${{ github.event.inputs.release_tag }}"
TAG="$MANUAL_RELEASE_TAG"
else
TAG=$(gh api repos/${{ github.repository }}/releases/latest --jq '.tag_name')

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Bind packaging to the release that triggered the run

When an older release workflow is rerun after a newer release exists, or two release runs overlap, this branch ignores the triggering workflow_run and queries the repository-wide releases/latest endpoint. The job then downloads and hashes the newer release rather than packaging the release whose workflow just completed. Carry the release tag from the upstream run, for example in a run artifact, instead of resolving it globally.

Useful? React with 👍 / 👎.

Comment thread winget/SUBMIT.md Outdated
Comment on lines +13 to +14
- A publicly trusted PFX code-signing certificate via `SIGNING_CERT_BASE64` and
`SIGNING_CERT_PASSWORD`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Remove the obsolete PFX release instructions

After the PFX fallback was removed, the release workflow unconditionally requires the SignPath token and repository variables and contains no SIGNING_CERT_* path. These instructions therefore tell operators that configuring a trusted PFX is sufficient even though the release will fail during SignPath preflight. Document SignPath as the sole release-signing mechanism, or explicitly distinguish the non-publishing build-msix.yml PFX support.

Useful? React with 👍 / 👎.

@ruslanlap
ruslanlap merged commit 583335f into master Sep 25, 2026
9 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