Skip to content

feat(release): submit to WinGet automatically - #71

Merged
ralyodio merged 2 commits into
mainfrom
worktree-winget
Sep 23, 2026
Merged

ralyodio merged 2 commits into
mainfrom
worktree-winget

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

WinGet was the one package manager still left to a person: the workflow printed "submit with wingetcreate" and stopped. WinGet accepts packages only as pull requests to microsoft/winget-pkgs, so publishing there means running a PR bot.

tools/release/submit-winget.mjs is PairUX's proven flow, ported into this repo's release tools. PairUX's Profullstack.PairUX PRs have been merged by Microsoft. The script:

  1. forks winget-pkgs under the token's account and syncs the fork
  2. puts the three generated manifests on a branch
  3. closes any open PR of ours for this package
  4. opens a cross-fork PR, titled "New package" or "New version" depending on whether the package already exists upstream

--dry-run prints the plan and touches nothing.

In CI, the Submit job runs it when a PKG_SUBMIT_TOKEN secret is set, as pairux.com does. The built-in Actions GITHUB_TOKEN can't fork another organisation's repository, so a personal token is needed. The step reads the version from the manifest itself, and skips when a run has no WinGet manifests.

v0.2.0 is already submitted, by hand with this script from a local gh login: microsoft/winget-pkgs#439881. Before submitting, I checked that the installer's SHA-256 matches the release's SHA256SUMS.txt and that every URL in the manifests answers.

🤖 Generated with Claude Code

WinGet was the one package manager left to a person: the workflow printed
"submit with wingetcreate" and stopped. WinGet takes packages by pull request
to microsoft/winget-pkgs, so publishing means a PR bot.

tools/release/submit-winget.mjs is PairUX's proven flow (pairux.com's
scripts/lib/package-managers/winget.ts, whose Profullstack.PairUX PRs
Microsoft has merged), ported to this repo's release tools: fork winget-pkgs
under the token's account, sync the fork, put the three generated manifests
on a branch, close any open PR of ours for the package, open a cross-fork PR
titled "New package" or "New version" as the upstream tree says. --dry-run
prints the plan and touches nothing.

The Submit job runs it when PKG_SUBMIT_TOKEN is set, as pairux.com does; the
Actions GITHUB_TOKEN cannot fork another organisation's repository. The
version is read from the manifest, and a run without WinGet manifests skips.

v0.2.0 was submitted by hand from a local gh login with this script:
microsoft/winget-pkgs#439881. Before submitting, the InstallerSha256 was
matched against the release's SHA256SUMS.txt and every URL in the manifests
answered.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

9 finding(s)

HIGH/CRITICAL: 4 | MEDIUM: 5

Severity Rule Location
HIGH manifest-typosquat apps/game/package.json:17
HIGH sh-remote-script-execution apps/site/public/install.sh:210
HIGH sh-remote-script-execution apps/site/public/install.sh:213
HIGH sh-remote-script-execution apps/site/public/install.sh:216
MEDIUM sh-remote-script-execution apps/site/public/install.sh:219
MEDIUM sh-remote-script-execution apps/site/public/install.sh:432
MEDIUM sh-remote-script-execution apps/site/public/install.sh:433
MEDIUM js-path-traversal tools/art/tactical-sample/validate.mjs:6
MEDIUM js-path-traversal tools/art/tactical-sample/validate.mjs:10

Snippets are redacted; ThreatCrush never prints matched credential material.

… in place

The first 0.2.0 submission branched from the fork's own master, which held
36 commits upstream never took, so microsoft/winget-pkgs#439881 arrived with
PairUX files and was rejected for containing more than one application.

Branch from upstream's master instead and never touch the fork's; build the
single commit (tree + commit) before moving the branch, because resetting an
open PR's head to bare master closes the PR; reuse the open PR from the same
branch instead of closing it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ralyodio
ralyodio merged commit b347a6d into main Sep 23, 2026
7 checks passed
@ralyodio ralyodio mentioned this pull request Sep 23, 2026
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