fix(desktop): serve the update feed from GitHub Pages so shared IPs stop hitting GitHub's 429 - #846
Open
devin-ai-integration[bot] wants to merge 2 commits into
Open
Conversation
…top hitting GitHub's 429 Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Contributor
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
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.
Primary change type
Problem and motivation
Studio users behind one office/VPN NAT see
Couldn't check: GitHub is rate-limiting this networkand cannot update. electron-updater'sgithubprovider makes ~3 unauthenticated requests to github.com's web frontend per check (releases.atom,/releases/latest, thenlatest*.yml), and GitHub throttles non-browser clients per IP. Several Studios each checking 30s after launch (+ every 4h, + manual clicks) is enough to trip it for everyone on that IP. The existing client-side coalescing (checkInFlight, 60s replay) only bounds one machine; nothing in the app can fix a shared-IP limit.Summary and scope
Move the update feed off github.com; keep the installers on GitHub Releases.
electron-builder.yml:publish→provider: generic,url: https://sapiom.github.io/sapiom-js/desktop/,useMultipleRangeRequest: false(release assets are S3-backed and reject multi-range requests — same reason the github provider hardcodes it). One request per check, to a host with no per-IP throttle.desktop-release.yml: new step after "Publish GitHub Release" that clones (or creates) thegh-pagesbranch, copies everylatest*.yml/beta*.ymlintodesktop/withurl:/path:rewritten from bare filenames to absolutehttps://github.com/sapiom/sapiom-js/releases/download/<tag>/<file>, asserts every url was rewritten, commits and pushes. Incremental by design: a beta release publishes onlybeta*.ymland leaveslatest*.ymluntouched (a whole-site Pages deploy would wipe the other channel). Runs with the release job's existingcontents: write.smoke.tsupdate-configcheck: expectsgeneric+ anhttps://…/feed url instead ofgithub+ owner/repo.update-policy.ts:classifyUpdateErroralso maps the generic provider's 404 (Cannot find channel "beta-mac.yml" update info) tono-release;allowPrereleasecomment updated (inert under generic, kept for anyone pointing back at GitHub).pack.mjsandCLAUDE.md.Out of scope: hosting the installers elsewhere (downloads still go through one github.com redirect, but only when an update actually exists), and any change to the channel/mirror logic.
Related work
Related issue or discussion: Slack #studio-syndicate thread (Tidjane's report, 2026-09-04).
Validation
Not run: a packaged build (
--smoke) — CI's per-OS smoke jobs covercheckUpdateConfigagainst the realapp-update.yml.Tests and documentation
update-policy.test.ts— generic 404 →no-release.CLAUDE.mdauto-update section explains the provider choice and the Pages prerequisite.Compatibility and release impact
gh-pages// (root)(the branch is created by the first release that runs this step; the setting can be flipped before or after, but until it is on the feed URL 404s and new installs report "no release has been published on this channel yet"). Installs built before this change still read GitHub directly (their bakedapp-update.ymlsaysgithub) until they update once — so the rate-limit toast can still appear on those until they land on this release.@sapiom/harness-desktoppatch).Security
will follow the
Security Policy for
private reporting.
AI assistance
Written by Devin; verified via typecheck, unit tests and a local run of the manifest rewrite.
Checklist
CONTRIBUTING.md, and this contribution follows the direct-PR or issue-first policy.any N/A checks above.
Link to Devin session: https://app.devin.ai/sessions/2ce6535038e047a183e470b59d094b57
Open in Devin Desktop: https://app.devin.ai/desktop/session/2ce6535038e047a183e470b59d094b57?variant=devin
Requested by: @gwitwer