fix(cli): update brew and scoop beta to ship binary under supabase name#5202
Merged
avallete merged 1 commit intoMay 7, 2026
Conversation
- Enhanced the `release-process.md` documentation to clarify the behavior of the `--name <custom>` flag for both Homebrew and Scoop, ensuring users understand the implications of installing the CLI under different names. - Updated `update-homebrew.ts` and `update-scoop.ts` scripts to ensure the installed binary remains consistently named `supabase`, regardless of the formula or manifest filename, allowing for coexistence of different versions without conflicts. - Fixed the Homebrew formula to correctly install the `supabase-go` sidecar alongside the main binary, improving the installation process for users.
Coly010
approved these changes
May 7, 2026
f00acf4
into
fix/binary-targets-for-platform-packages
13 checks passed
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.
What kind of change does this PR introduce?
Bug fix.
What is the current behavior?
The
betachannel of the new TS-based release pipeline (introduced in #39) ships brew/scoop artifacts that install the binary assupabase-betainstead ofsupabase. This is a breaking change vs. the historical Go CLI behavior, whereFormula/supabase-beta.rbandsupabase-beta.jsonalways installed a binary namedsupabase— only the formula/manifest filename + Ruby class differed between channels.Concretely, the currently-published
v2.99.0-beta.1artifacts contain:supabase/homebrew-tap→Formula/supabase-beta.rb:supabase/scoop-bucket→supabase-beta.json:So users on the beta channel suddenly have to invoke
supabase-beta ...instead ofsupabase ...after abrew upgrade/scoop update, breaking every existing script, CI job, and shell alias.Root cause
PR #39 added a
--nameflag toapps/cli/scripts/update-{homebrew,scoop}.tsto support PoC validation against user-owned forks (e.g.supabase-shim-poc). To avoid clashing with reviewers' already-installedsupabaseCLI during PoC testing, the same flag also renamed the installed binary when--name != "supabase". Whenrelease.ymlstarted passing--name supabase-betafor the beta channel, that PoC-only side-effect leaked into production.Compare with the Go CLI's
tools/publish/main.goand the previousFormula/supabase-beta.rb(v2.98.2), which both installedbin.install "supabase"regardless of channel.What is the new behavior?
--namecontrols only:supabase.rbvssupabase-beta.rb) and Ruby class name (SupabasevsSupabaseBeta)supabase.jsonvssupabase-beta.json)The installed binary is always
supabase/supabase.exe, matching the Go CLI's historical behavior. Stable and beta still coexist as separate formulas / manifests in the same tap / bucket — users just choose one or the other (Homebrew detects thesupabasebinary collision the same way it did with the Go CLI).Verification (dry-run,
--name supabase-beta)Formula/supabase-beta.rb:supabase-beta.json:Both match the Go CLI's
v2.98.2-era output exactly.Additional context
Files changed
apps/cli/scripts/update-homebrew.ts— drop the rename branch; alwaysbin.install "supabase";brew testinvokes#{bin}/supabase.apps/cli/scripts/update-scoop.ts— drop the alias-tuple branch;binEntryis always"supabase.exe".apps/cli/docs/release-process.md— Ring 2 PoC section now notes that the PoC formula installs asupabasebinary, so reviewers mustbrew uninstall supabase/scoop uninstall supabasefirst if they have the official CLI installed. Validation snippets updated to invokesupabase --versionafterbrew install supabase-shim-poc.docs/adr/0011-cli-release-and-distribution-strategy.md— Implementation progress §B updated to reflect that--nameonly controls the filename/class, not the installed binary name.Hotfix note for already-published
v2.99.0-beta.1The next beta release pushed via
release-shared.ymlwill overwriteFormula/supabase-beta.rbandsupabase-beta.jsonwith the corrected shape. If we want to unblock current beta users before the next beta cuts, we'd need to either:Formula/supabase-beta.rb+supabase-beta.jsononmaininsupabase/homebrew-tap/supabase/scoop-bucketto match the new template, or donerelease.ymlworkflow_dispatchwithchannel=betaagainst thev2.99.0-beta.1version to republish the brew/scoop side only.Out of scope for this PR; flagging for the release operator.
Test plan
pnpm check:allinapps/cli(types, lint, fmt, knip)pnpm test:coreinapps/cli(unit + integration)update-homebrew.ts --name supabase-beta— generated formula matches the Go CLI'sv2.98.2Formula/supabase-beta.rbshape.update-scoop.ts --name supabase-beta— generated manifest uses"bin": ["supabase.exe"].--name supabase(stable path) — formula + manifest unchanged from prior correct behavior.brew install supabase/homebrew-tap/supabase-beta && supabase --versionresolves to the new beta version on macOS.scoop install supabase-beta && supabase --versionon Windows.