Repository navigation
ci(release): wait for platform packages before publishing the umbrella - #7417
Conversation
npm makes a version installable some minutes after the publish returns, and the large platform tarballs lag the small umbrella. An install in that window gets the umbrella without its optional binary package. Poll the install packument until every platform package version is listed, and only then publish the umbrella. A timeout fails the publish before the umbrella ships; re-running it is safe.
CLI benchmark: no changes foundCommit
API calls: unchanged for all 7 commands. Binary size: 134.0 MB, unchanged. Details: timing ranges, API calls per command, slowest phasesTiming ranges
API calls per command
Slowest phasesNo command moved beyond noise, so there are no phase deltas. Comment |
There was a problem hiding this comment.
🤖 AI Review
Verified all three findings against the checked-out code and trusted conventions. All are confirmed minor issues: discarded probe diagnostics, immediate failure on transient HTTP responses, and missing wait-span instrumentation. The findings are distinct and require no deduplication.
Findings
| Severity | Location | Category | Sources | Claim |
|---|---|---|---|---|
| 🟡 MINOR | apps/cli/scripts/npm-registry.ts:40 |
error-handling |
claude | Retryable probe failures discard their causes, so persistent registry or network failures eventually produce only a generic installability timeout. |
| 🟡 MINOR | apps/cli/scripts/npm-registry.ts:35 |
error-handling |
codex | A single HTTP 408 or 429 aborts publishing immediately instead of allowing the polling budget to absorb a transient timeout or throttling response. |
| 🟡 MINOR | apps/cli/scripts/npm-registry.ts:50 |
observability |
codex | The registry wait lacks the named enclosing span and attempt annotations required by the repository's tracing convention. |
Stats
Claude findings: 1 · Codex findings: 2 · Confirmed: 3 · Refuted: 0 · Uncertain: 0
Models: claude-opus-5-5 + gpt-6.1-sol · Trigger: auto · Workflow run
This review runs once per PR. A maintainer can request another with a /ai-review comment.
Keep the last probe result per package so a timeout says what npm returned, treat 408 and 429 as retryable, and trace the wait under a named span with its attempt count.
aa6b91f to
ac8615d
Compare
Every release has a window where installing
supabasefrom npm on macOS or Windows gives you the umbrella package with no binary. npm makes a version installable a while after the publish returns, and the large platform tarballs take longer than the small umbrella. On 3.0.0-beta.16 the umbrella was installable about a minute after publishing, but@supabase/cli-darwin-arm64and@supabase/cli-windows-x64took four to five minutes. npm skips a missing optional dependency without failing, sosupabase.jsthen throwsNo matching Supabase CLI binary package found. The setup-cli@v3 smoke test in the Release workflow hit exactly this.publish.tsnow polls the install packument for every platform package and only publishes the umbrella once all of them are installable. It checks every 10 seconds for up to 15 minutes, and gives up on a hung probe after 30 seconds. If a package never shows up, the publish fails before the umbrella goes out, and re-running it is safe because already-published packages are skipped.This touches release infrastructure and
v2.xpublishes the same way, so it'll need abackport/*cherry-pick tov2.xtoo.🤖 Generated with Claude Code