Publish a prebuilt manifest index to remove the API from the install path - #3
Merged
Merged
Conversation
…path Follow-up to the caching work: takes the steady state to zero api.github.com calls rather than merely fewer. A nightly Action resolves every package in Index/Catalog.json once, in CI, where GITHUB_TOKEN gives a 5000/hour allowance, and publishes the result as a single Manifests.json. Endpoints read that one file from raw.githubusercontent.com, which is CDN-backed and carries no API rate limit, so an install resolves without spending any of the site's 60/hour public-IP allowance. The index is force-pushed to an orphan manifest-index branch. That keeps exactly one commit on it, so a nightly refresh never grows the repository and never touches code history. Resolution order in Get-GitHubInstaller is now: local per-package cache -> prebuilt index -> live API -> stale cache Every layer is optional. A missing, stale, unreachable or malformed index returns null and falls through to the live API exactly as before, so this cannot make installs worse than they are today. Adding a package to the index is a one-line edit to Index/Catalog.json. The seed list holds the three IDs that already carry argument overrides in the code plus common business applications; edit freely. Verified: builder resolves 7zip.7zip v26.03 and Notepad++.Notepad++ v8.9.8 against live manifests and emits a valid index; client returns the correct entry on a hit, and null on an unknown ID, an unindexed architecture and a completely absent index, degrading to the live API in each case.
This was referenced Sep 19, 2026
TecharyJames
changed the base branch from
fix/api-rate-limit-and-failure-semantics
to
BETA
September 19, 2026 11:48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
#2 makes the GitHub API allowance survivable. This removes it from the normal path.
Resolving a package costs two
api.github.comcalls against a 60/hour-per-source-IP allowance. Doing that work once in CI and publishing the answer means endpoints never spend that allowance.How
A nightly Action resolves every package in
Index/Catalog.json— in CI, whereGITHUB_TOKENgives 5,000/hour — and publishes a singleManifests.json. Endpoints read that file fromraw.githubusercontent.com, which is CDN-backed and carries no API rate limit.The index is force-pushed to an orphan
manifest-indexbranch, so it holds exactly one commit: a nightly refresh never grows the repo and never touches code history.Resolution order in
Get-GitHubInstaller:Every layer is optional. A missing, stale, unreachable or malformed index returns
nulland falls through to the live API exactly as today.Adding a package
One line in
Index/Catalog.json. The seed list holds the three IDs that already carry argument overrides in the code (Dell.CommandUpdate,8x8.Work,SublimeHQ.SublimeText.4) plus common business apps, and should be replaced with the actual deployment list.Scheduling constraint
GitHub only runs scheduled workflows from the repository's default branch, currently
main. The nightly will not fire fromBETA.workflow_dispatchand thepushtrigger work from any branch, so the index can be built on demand immediately. For the nightly, the workflow file needs to exist on the default branch, orBETAneeds to become the default branch.Verification
Builder, against live manifests:
Client:
7zip.7zip v26.03,source=indexnull→ live APIarm64)null→ live APInull→ live APINotes
.gitattributesis deliberately narrow:*.yml -textonly. A CRLFrun:block reaches bash on the runner with a literal CR per line and breaks it.* text=autois not declared, because this repo's blobs are committed CRLF and that would queue a repo-wide renormalisation diff.skip, notwarn— most packages have no arm64 installer.