feat(cli): automate Scoop manifest updates to upstream#5260
Conversation
After a stable release, push the manifest to our own scoop-bucket and also open a PR from supabase/scoop-main (our fork of ScoopInstaller/Main) to upstream so users of the default Scoop bucket pick up new versions immediately, rather than waiting for the upstream excavator bot to catch up. The PR rewrites the upstream manifest to match the format we produce for supabase/scoop-bucket (.zip artifacts with version in filename, hashes embedded). A shared builder keeps the two scripts from drifting.
Why we're not sourcing Scoop/Brew from the npm registryWhile researching this PR I looked into the alternative pattern of pointing Scoop (and Homebrew) at npm tarballs as their CDN — the only example in
In theory we could do the same: ship Windows binaries inside our npm tarballs (we already publish We're not doing this. Reasons:
The PR keeps the existing model: stable release lands → artifacts on GitHub → Generated by Claude Code |
A failure to open the upstream PR shouldn't fail the release — the upstream excavator bot will catch up on its own cron.
Add automation to submit Scoop manifest updates to the upstream ScoopInstaller/Main bucket for stable releases.
Changes:
New script
update-scoop-main.ts: Automates the process of opening pull requests against ScoopInstaller/Main with updated Scoop manifests. The script:Extracted shared manifest builder: Moved manifest generation logic into
lib/scoop-manifest.tsto eliminate duplication betweenupdate-scoop.ts(our own bucket) and the newupdate-scoop-main.ts(upstream PR). This ensures both buckets produce identical manifests.New workflow job
publish-scoop-main: Added to.github/workflows/release-shared.ymlto run afterpublish-scoop. The job:scoop-mainforkUpdated
update-scoop.ts: Refactored to use the sharedbuildScoopManifestandreadChecksumsfunctions from the new library module.Updated
package.jsonknip ignore: Changedscripts/*.tstoscripts/**/*.tsto properly ignore the newlib/subdirectory.This enables the stable CLI to be automatically submitted to the upstream Scoop bucket without manual intervention, while beta releases continue to use the private
supabase/scoop-bucket.https://claude.ai/code/session_01MJzvj7b1VuL5tcVmDGRFas