Skip to content

feat: shards for mirrored installers - #2570

Merged
pl4nty merged 22 commits into
mainfrom
claude/project-thread-31kc8z
Oct 31, 2026
Merged

pl4nty merged 22 commits into
mainfrom
claude/project-thread-31kc8z

Conversation

@pl4nty

@pl4nty pl4nty commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Requested by Tom · project thread

Checklist for Pull Requests

  • Is there a related issue or pull request in winget-pkgs? No.

Manifests

  • Checked for other open PRs for the same change.
  • winget validate: no manifest changes in this PR.
  • winget install: no manifest changes in this PR.
  • Schema: no manifest changes.

What

This PR adds shards for the repository/shard-coverage ignores that say "selfhosted", and removes those ignores. Each shard reads the version from the vendor. When winget can't use the vendor file, the shard builds the file or copies it to R2 (https://winget.tplant.com.au/download/<letter>/<id segments>/<version>/<file>), and the manifest points to the R2 copy.

mirrorFile(id, version, fileName, build, url?) in scripts/shards-lib/mirror.ts uploads a file that the shard builds. mirror() wraps it. When there are no R2 credentials (fork PRs), both return the vendor URL, or fail if there is no vendor URL.

Family helpers are named after their ID prefix: Microsoft.ConfigMgr.ts, Microsoft.WindowsSDK.ts, and the renamed Dell.ts and Qualcomm.ts. General helpers keep lowercase names: mirror.ts and clickonce.ts. The new-package-pr skill documents this naming.

All checks are green. Test passed for all 28 shards on 9687f36.

Extracted (mirrorFile())

Package Version source Built from
Microsoft.ConfigMgr.* (10 tools) The in-console update manifest (fwlink 2309745 → ConfigMgr.Update.Manifest.cab, the cab that DMPDownloader reads). The shard uses the latest full release (Type 0), which is 2609. State is the release name. Version is CMTrace FILEVERSION (5.0.9152.1003). CMPivot (5.2609.1240.1000) and SupportCenter (5.2609.1050.1000) use the MSI DisplayVersion and are keyed by the release name Globs in SMSSETUP/TOOLS of the release payload cab (ContentUrl, 873 MB), extracted with 7z. A tool with more than one file is zipped flat
ShunsukeSuzuki.AsciinemaTrim GitHub release redirect asciinema-trim.exe from the release windows_amd64.tar.gz (Bun.Archive)
Microsoft.Kusto.Explorer, Microsoft.eDiscoveryExportTool ClickOnce .application A zip of every file in the application manifest (clickonce.ts)
Microsoft.WindowsSDK.AppVerifier SDK archive: the latest release and its ISO link. State is the SDK version. Version is the MSI DisplayVersion The 3 MSIs in the ISO's Installers/ folder (7z)

The ConfigMgr version-state seeds are the release names of the current manifests: 2509, or 2403 for the tools at 9128. Each seed differs from 2609, so every tool updates on the first run.

Anthelion's product source reads the PE ProductVersion, and an MSI has none. This is why the MSI shards use display.

Copied (mirror())

Package Version source Why mirror
Jawset.Postshot Content-Disposition of /builds/postshot/windows/latest The URL has no file extension. The file is stored as Postshot-<v>.exe
RadioSky.SkyPipe The RSPII_Install_<v>.exe link on the SkyPipe page radiosky.com answers 403 to komac's agent
Pantaray.SuperOrca (JSON) Vendor download page The vendor exe is corrupt. The shard uses the existing /download/s/SuperOrca/<version>/ path

Microsoft.WindowsSDK.BuildTools needs no mirror, because komac analyses the nuget .nupkg URL directly.

Not covered (ignores kept)

  • AMD.BugReportTool: a separate thread handles it.
  • Microsoft.WindowsSDK.Orca: the package version (5.0.10011.0) does not follow the SDK version.
  • DJR.Input: the fonts report 0.000, and the site does not list a version.
  • GameJolt.GameJolt: feat: shard helper for mirroring installers to R2 #2569 handles it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J

Shards for packages whose installers are self-hosted, so Update Packages
notices new vendor releases. Where no usable vendor binary exists, new
versions resolve to the self-hosted mirror path, which fails until the
binary is uploaded there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
@pl4nty pl4nty self-assigned this Oct 31, 2026
The Input fonts report version 0.000 and the site lists no version, so
the shard cannot detect updates; restore its ignore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J

pl4nty commented Oct 31, 2026

Copy link
Copy Markdown
Owner Author

Test / Test failed on 31a2b76. I traced two causes. db36796 fixes both:

  • SuperOrca pointed at the canonical mirror path, but its current binary lives at /download/s/SuperOrca/. It now uses that path.
  • DJR.Input: komac reads font version 0.000 and the site lists no version, so I dropped the shard and restored the ignore.

The remaining failures are mirror 404s for versions newer than ours. The vendors have released them, but nobody has uploaded their binaries yet: Kusto 1.0.3.1568, AsciinemaTrim 0.1.5, ConfigMgr 2609 and AppVerifier SDK 28000.2957. So Test stays red until those binaries are uploaded or the shards change. This is expected, as the PR description says.


Generated by Claude Code

PR 2569 adds a GameJolt shard that mirrors the signed vendor URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
These vendor URLs work for winget but not for komac: Postshot is
extension-less, radiosky.com rejects komac's download agent, and
nuget.org serves .nupkg. mirror() gains an optional file name for the
first and last.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
@pl4nty pl4nty changed the title Add shards for self-hosted packages Add shards for self-hosted and mirrored packages Oct 31, 2026
komac analyses the flat-container .nupkg, so there is nothing to mirror.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J

pl4nty commented Oct 31, 2026

Copy link
Copy Markdown
Owner Author

Test on 0564225: SkyPipe and BuildTools now produce manifests. The remaining failures are expected:

  • Mirror 404s for new vendor versions that nobody has uploaded yet: ConfigMgr 2609, Kusto 1.0.3.1568, AsciinemaTrim 0.1.5, AppVerifier SDK 28000.2957.
  • Postshot: invalid Zip archive: Could not find EOCD. In DRY_RUN, mirror() falls back to the extension-less vendor URL. Update Packages uses the .exe-named R2 copy instead.

Generated by Claude Code

mirrorFile() uploads a file the shard builds itself. AsciinemaTrim takes
the exe from the release tar.gz, Kusto Explorer and the eDiscovery Export
Tool zip their ClickOnce application files, and AppVerifier extracts its
MSIs from the Windows SDK ISO with the runner's 7-Zip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J

pl4nty commented Oct 31, 2026

Copy link
Copy Markdown
Owner Author

Test on 14dc819 is red, but every failure is expected:

  • Builds succeed; Test just can't upload them: mirrorFile() now builds missing copies in Test and then fails on purpose with the built size. AsciinemaTrim 0.1.5, Kusto 1.0.3.1568 (134 files) and AppVerifier (3 MSIs from SDK ISO 28000.2957 via 7z) all built. Update Packages uploads them on its next run.
  • ConfigMgr x10: R2 404s. There is no public source for current builds, so these still need manual uploads.
  • Postshot: DRY_RUN falls back to the extension-less vendor URL, as before.

Generated by Claude Code

claude and others added 5 commits October 31, 2026 01:23
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
pl4nty pushed a commit that referenced this pull request Oct 31, 2026
Track the 2.14 branch from the Ryzen Master page. mirrorFile (copied
unchanged from #2570) uploads amd_ryzen_master_ui_<version>.exe, which
scripts/shards-lib/AMD.ts extracts from the vendor setup: ISSetupStream
-> wrapper MSI -> 7z. Drop the 2.14.3.5040 manifest so Update Packages
creates it and uploads the file; 2.13.1.3097 is frozen and stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaNS8rVkToDNbhNFgx1
The evaluation media is a 7-Zip SFX whose SMSSETUP/TOOLS folder holds
every tool these packages carry. State is the media URL, so the 1.25 GB
download only happens when Microsoft publishes new media, and all ConfigMgr
shards in a run share one download. Replaces the Learn release table and
the temporary listing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J

pl4nty commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner Author

Test on 217c70d fails as intended: unmirrored files can't upload in DRY_RUN.

[Edit: #2581 gave Test the R2 credentials. After merging main, Test on 83741b7 uploads the built files and passes 28/28.]


Generated by Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q1YhaMfsphzkxPYnZki22J
@pl4nty pl4nty changed the title Add shards for self-hosted and mirrored packages feat: shards for mirrored installers Oct 31, 2026
@pl4nty
pl4nty merged commit 1f4333a into main Oct 31, 2026
10 checks passed
@pl4nty
pl4nty deleted the claude/project-thread-31kc8z branch October 31, 2026 02:43
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