Skip to content

chore: production deploy#5329

Merged
supabase-cli-releaser[bot] merged 22 commits into
mainfrom
develop
May 21, 2026
Merged

chore: production deploy#5329
supabase-cli-releaser[bot] merged 22 commits into
mainfrom
develop

Conversation

@supabase-cli-releaser
Copy link
Copy Markdown
Contributor

7ttp and others added 22 commits May 19, 2026 17:22
## TL;DR

fixes a stale 404 telemetry link and 
a smol fix regarding the missing `-p` alias for `supabase link
--password` to match go cli/

## ref:

- closes supabase/supabase#46101
## What

Moves the CI and release pipelines onto
[Blacksmith](https://blacksmith.sh/) runners and threads Blacksmith's
caching layers through the workflows that benefit from them.

Runner moves:

- PR-critical jobs in `test.yml` (`check`, `test-core`, `test-e2e`) →
`blacksmith-8vcpu-ubuntu-2404`.
- `cli-go-ci.yml::test` (Go unit/integration) →
`blacksmith-8vcpu-ubuntu-2404`.
- Release `build` (heavy multi-target Bun compile) →
`blacksmith-32vcpu-ubuntu-2404`.
- Release `smoke-test` matrix: Linux → `blacksmith-8vcpu-ubuntu-2404`,
macOS → `blacksmith-6vcpu-macos-latest`, Windows →
`blacksmith-8vcpu-windows-2025`. `macos-15-intel` stays on GitHub-hosted
(Blacksmith macOS is ARM-only) and is skipped on prereleases so beta
wall-clock isn't gated by the slowest leg — stable releases on `main`
still run it.
- Release `publish` / `publish-homebrew` / `publish-scoop` →
`blacksmith-2vcpu-ubuntu-2404`.
- Low-frequency Linux jobs (`cli-go-api-sync`, `cli-go-mirror`,
`cli-go-codeql` non-Swift legs) → matching Blacksmith sizes for
consistency.

Caching:

- `useblacksmith/checkout@v1` on `test-e2e` to exploit Blacksmith's
sticky-disk git mirror with `fetch-depth: 0` (the cli-e2e shards need
full history for `nx affected`).
- Upstream `actions/cache@v5`, `actions/setup-node@v6`,
`actions/setup-go@v6` — all SHA-pinned — for cache + toolchain setup.
Initially this PR swapped to the `useblacksmith/cache`,
`useblacksmith/setup-node`, `useblacksmith/setup-go` forks; partway
through, those forks were [archived in favor of Blacksmith's
runner-level
interception](https://docs.blacksmith.sh/blacksmith-caching/dependencies-actions),
which transparently routes upstream cache API calls to the same
colocated backend. The final commit reverts to upstream and bumps the
residual `actions/cache@v4` in `test.yml` to `@v5` so every cache step
gets the new acceleration with continued upstream security patches.

All third-party action pins use full commit SHAs with trailing `# v<N>`
comments.

## Why

The CI wall-clock on this repo had grown into the territory where it
visibly slowed merges (test.yml routinely ~20+ min, release build ~30+
min). Blacksmith's larger runners + colocated cache cut both materially,
and the `test-e2e` checkout in particular benefits from the sticky-disk
git mirror because `fetch-depth: 0` was the dominant fixed cost in that
job.

The upstream-vs-fork pivot matters for hygiene: the archived
`useblacksmith/*` cache forks still execute when SHA-pinned, but get no
future security patches and miss out on Blacksmith's newer transparent
acceleration. Going through upstream actions gives us both — Blacksmith
routing *and* normal upstream maintenance — at no behavioral cost.

## Scope deliberately excluded

- `cli-go-pg-prove.yml` / `cli-go-publish-migra.yml` Docker builds:
separate follow-up, requires migrating to
`useblacksmith/setup-docker-builder@v1` +
`useblacksmith/build-push-action@v2` and dropping `cache-from: type=gha`
(the GHA cache backend is *not* transparently routed by Blacksmith).
Tracked, not in this PR.
- Native arm64 smoke runner (replacing the QEMU emulation in the Linux
smoke leg): planned follow-up.
- Whether to delete `test.yml`'s explicit Go-binary cache step now that
`$GOCACHE` is colocated: deferred until warm-cache rebuild time can be
measured on Blacksmith.

https://claude.ai/code/session_01KgHCbVTurxo4K9KivytQbt

---------

Co-authored-by: Claude <noreply@anthropic.com>
This PR was automatically created to sync API types from the
infrastructure repository.

Changes were detected in the generated API code after syncing with the
latest spec from infrastructure.

Co-authored-by: supabase-cli-releaser[bot] <246109035+supabase-cli-releaser[bot]@users.noreply.github.com>
This PR was automatically created to sync API types from the
infrastructure repository.

Changes were detected in the generated API code after syncing with the
latest spec from infrastructure.

Co-authored-by: supabase-cli-releaser[bot] <246109035+supabase-cli-releaser[bot]@users.noreply.github.com>
Updates the help text for the `branches get` command in both the Go and
TypeScript CLI implementations to clarify that password-dependent
database fields are not populated for the main branch.

**Changes:**
- Updated `branchGetCmd` long description in
`apps/cli-go/cmd/branches.go` to include a note explaining that
`POSTGRES_URL` and `POSTGRES_URL_NON_POOLING` fields are not available
for the main branch because production database credentials cannot be
retrieved via API
- Updated the command description in
`apps/cli/src/legacy/commands/branches/get/get.command.ts` with the same
clarification for consistency across CLI implementations

This improves user experience by setting correct expectations when
querying main branch details and reduces confusion about missing
credential fields.

Closes: CLI-1450

https://claude.ai/code/session_01Dq9V9d8nxzfFkqk3MaHBWB

---------

Co-authored-by: Claude <noreply@anthropic.com>
## TL;DR

fixes `db push --local` so prompts and status messages refer to the
local database
( as requested by users, was confusing ) 

## ref
- closes #4971

Co-authored-by: Andrew Valleteau <avallete@users.noreply.github.com>
…#5258)

Improves reliability of smoke tests on Linux by addressing race
conditions and transient docker daemon failures during parallel test
execution.

**Changes:**

- Enable containerd image store in docker daemon to support
multi-platform manifest caching, allowing a single tag to hold both
amd64 and arm64 images simultaneously
- Add github actions caching for smoke-test base images
(debian:bookworm-slim, amazonlinux:2023, alpine:3.21) across workflow
runs to reduce first-time pull contention
- Implement retry logic in smoke-test-linux.ts with exponential backoff
for docker pull operations (up to 3 attempts)
- Add retry handling for docker run exit code 125
(daemon/container-start errors) with one automatic retry before failing
- Improve error reporting by capturing and logging both stdout and
stderr separately, with better exit code visibility

These changes address the root cause of intermittent "docker exit 125"
failures that occur when eight parallel docker run calls race on
first-time image pulls, which surfaces as container startup failures on
a subset of jobs.

https://claude.ai/code/session_01RsaTJoeDnJM45eLcqVNTar

---------

Co-authored-by: Claude <noreply@anthropic.com>
…rix (#5311)

Refactor the smoke test job to conditionally exclude the slowest runner
(`macos-15-intel`) from the test matrix on prerelease builds, rather
than using a job-level `if:` condition.

**Changes:**
- Moved the prerelease exclusion logic from a job-level `if:` condition
into the strategy matrix itself using `fromJSON()`
- The matrix now dynamically expands to either 3 runners (prerelease) or
4 runners (stable release) based on the `inputs.prerelease` flag
- Updated comments to explain the rationale: `macos-15-intel` is the
slowest leg and not available on Blacksmith, so excluding it from
prerelease builds prevents it from blocking beta wall-clock time while
stable releases still run the full matrix

**Implementation details:**
- Uses GitHub Actions' `fromJSON()` to conditionally build the matrix
list, since the `matrix` context is not available in job-level `if:`
conditions
- The conditional expression selects between two hardcoded runner arrays
based on the prerelease flag
- This approach ensures the job runs with the correct matrix expansion
rather than skipping the entire job conditionally

https://claude.ai/code/session_01RDNmHeyREpf3ZBQLggK75q

Co-authored-by: Claude <noreply@anthropic.com>
…5312)

The release workflow's `publish` job was migrated to a Blacksmith runner
in #5300, which broke npm publish:

```
npm error 422 Unprocessable Entity - PUT https://registry.npmjs.org/@supabase%2fcli-darwin-arm64
  - Error verifying sigstore provenance bundle:
    Unsupported GitHub Actions runner environment: "self-hosted".
    Only "github-hosted" runners are supported when publishing with provenance.
```

`publish.ts` passes `--provenance` to `pnpm publish`, which has sigstore
attest the build against the runner's OIDC identity. Blacksmith runners
present as `self-hosted` to sigstore, so npm rejects the upload with
E422.

Move only the `publish` job back to `ubuntu-latest`. `build` and
`smoke-test` stay on Blacksmith; `publish-homebrew` and `publish-scoop`
don't go through npm/sigstore (they push to the tap/bucket repos via
git) and also stay on Blacksmith. The publish job is short and not
compute-bound, so the wall-clock cost of github-hosted is negligible.

Failed run that motivated this:
https://github.com/supabase/cli/actions/runs/26153946606

---
_Generated by [Claude
Code](https://claude.ai/code/session_01RDNmHeyREpf3ZBQLggK75q)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
## What changed

Pass the npm release version into the bundled `supabase-go` binary via
`-ldflags -X github.com/supabase/cli/internal/utils.Version=...` in
`apps/cli/scripts/build.ts`.

## Why

The legacy CLI shell forwards most commands to the bundled Go binary.
That binary's upgrade banner reports the currently installed version
from `utils.Version`, which is a string assigned at compile time via
`-ldflags -X`. The Bun build script was only passing `-s -w`, so every
release shipped a Go binary with `utils.Version=""`. The user-visible
symptom was:

```
A new version of Supabase CLI is available: v2.100.1 (currently installed v)
```

`semver.Compare` treats the empty string as less than any valid version,
so the upgrade prompt fired on every invocation regardless of the
installed version.

The `-X` injection had been part of the prior `.goreleaser.yml` build
but was dropped during the goreleaser → Bun build-script migration. The
bug only became user-visible once the `beta` and `stable` channels
started building `shell=legacy` again, which is what bundles
`supabase-go` into the release tarballs.

## Reviewer notes

- The npm version (no leading `v`) is the right form to inject —
`apps/cli-go/cmd/root.go:199` constructs `"v"+utils.Version` for the
comparison and other callsites use the raw value.
- The same migration also dropped `-X` injections for `utils.SentryDsn`,
`utils.PostHogAPIKey`, and `utils.PostHogEndpoint`. The Go binary in
current releases runs without Sentry/PostHog credentials. Out of scope
for this PR — worth a separate ticket so the secret-handling and
CI-secret wiring can be designed deliberately.

Fixes #5308
The plan job in release.yml runs cycjimmy/semantic-release-action in
dry-run mode purely to compute the next version, never reading
new_release_notes, and softprops/action-gh-release in release-shared.yml
gets no body. The result: GH Releases since the monorepo move publish
with empty bodies (e.g. v2.100.1).

A subsequent change will plumb release notes through the production
publish path. This commit lands the prerequisites only:

- apps/cli/package.json: add @semantic-release/release-notes-generator
to release.plugins. It's a default semantic-release plugin bundled in
cycjimmy/semantic-release-action's image, so no devDep is needed.
Without this, new_release_notes would be empty even after wiring.

- .github/workflows/backfill-release-notes.yml: workflow_dispatch with
tag and apply inputs. Re-stages the repo on develop/main at the tag's
commit (without the tag, so semantic-release computes it as the next
release), asserts the computed version matches the tag, dumps the notes
to the job summary, and only updates the GH Release body when
apply=true. Lets us validate the changelog format end-to-end against an
existing tag before touching the production publish path, and doubles as
a fix-forward tool for releases that ship with an empty body (e.g.
v2.100.1, the recent betas, or any future workflow_dispatch re-cut).

## What kind of change does this PR introduce?

Bug fix, feature, docs update, ...

## What is the current behavior?

Please link any relevant issues here.

## What is the new behavior?

Feel free to include screenshots if it includes visual changes.

## Additional context

Add any other context or screenshots.

Co-authored-by: Claude <noreply@anthropic.com>
…5314)

## What changed

- `apps/cli/scripts/build.ts` — `buildGoTarget` now reads `SENTRY_DSN`,
`POSTHOG_API_KEY`, and `POSTHOG_ENDPOINT` from `process.env` and appends
a matching `-X
github.com/supabase/cli/internal/utils.{SentryDsn,PostHogAPIKey,PostHogEndpoint}=...`
segment to the Go linker flags when the value is set.
- `.github/workflows/release-shared.yml` — the `build` job's `env:`
block now exposes the three repo secrets so release builds get the
values populated.

## Why

Companion fix to #5313. The legacy CLI shell forwards telemetry through
the bundled `supabase-go` binary, which reads its Sentry DSN and PostHog
credentials from `-ldflags -X`-injected vars. The bun build script only
injected `utils.Version`, so every release after the goreleaser →
bun-script migration shipped with empty credentials:

- `apps/cli-go/internal/telemetry/service.go:61` constructs the PostHog
client with an empty key and host → the client returns a no-op
(`internal/telemetry/client.go:32-56`).
- `apps/cli-go/cmd/root.go:78` initializes Sentry with an empty DSN →
no-op client.

PostHog event flow stopped on 2026-05-18 with v2.98.2 (the last build
produced by the prior pipeline). Restoring these injections matches the
historical `.goreleaser.yml` behavior using the same three repo secrets,
which already exist (`gh secret list --repo supabase/cli`).

## Reviewer notes

- The TS shells don't need build-time injection. The `next` shell
carries hardcoded PostHog defaults with runtime env overrides
(`apps/cli/src/next/config/cli-config.layer.ts`), and `legacy` delegates
everything to the Go binary via `LegacyGoProxy`.
- The env vars are conditionally appended in the build script, so local
builds and PR smoke builds (which don't expose the secrets) produce
binaries with empty telemetry credentials and the existing safe no-op
runtime behavior — no leakage and no test breakage.
- Verified locally: `SENTRY_DSN=… POSTHOG_API_KEY=… POSTHOG_ENDPOINT=…
pnpm exec bun apps/cli/scripts/build.ts --version 2.100.1 --shell
legacy` produces a `supabase-go` whose `strings` output contains the
three sentinel values; running the same command with the envs unset
produces a binary with none of them.

Fixes CLI-1506

Co-authored-by: Julien Goux <hi@jgoux.dev>
Fixes the backfill-release-notes workflow so it actually produces the
right notes for an arbitrary historical tag, and moves the engine out of
inline bash into a reusable bun script.

## Why the original workflow couldn't produce correct notes

Backfilling an old tag isn't symmetric with running semantic-release on
a normal push — it trips on five separate things at once, each of which
silently sends it down a wrong path:

- **Branch detection.** `cycjimmy/semantic-release-action` reads the
branch via `env-ci` (`$GITHUB_REF` / `$GITHUB_REF_NAME`), not `git
rev-parse --abbrev-ref HEAD`. Dispatching the workflow from any branch
other than `develop`/`main` left semantic-release looking at an
unconfigured branch and silently emitting no `new_release_*` outputs.
- **"Behind remote" check.** semantic-release runs `git ls-remote
<repositoryUrl> <branch>` and exits silently if the remote tip differs
from local HEAD — which is always true when re-staging at an old tag.
- **Channel notes for historical tags.** semantic-release reads `git log
--notes=refs/notes/semantic-release*`. `actions/checkout` doesn't fetch
`refs/notes/*` by default, and some historical tags (e.g.
`v2.99.0-beta.1`) have no channel annotation at all — leaving them as
`channels=[null]`, which the prerelease filter drops. semantic-release
then walks past them and `lastRelease` drifts back far enough to drag
unrelated commits into the changelog.
- **Drift in `release.branches` config.** Before commit `2515885` (May
11) the `develop` branch had no explicit `"channel": "beta"`, so
semantic-release defaulted the channel to the branch name; before #5316
the plugin chain didn't include `release-notes-generator`. A historical
checkout therefore produces empty or misclassified notes.
- **Output format.** Parsing `cycjimmy/semantic-release-action`'s stdout
returns marked-terminal rendered ANSI/whitespace, not raw markdown — so
even when the right notes were computed, the GH release body would
render wrong.

## What this PR does

Moves the workflow's logic into
`apps/cli/scripts/backfill-release-notes.ts` and calls
`semantic-release` *programmatically* so it can return
`nextRelease.notes` as raw markdown directly. The script's setup works
around each of the issues above in a temp clone (so the original
workspace stays clean):

1. Clones the repo to a temp directory and fetches `refs/notes/*` from
both the source repo and origin.
2. Synthesises a `develop`/`main` branch at the tag's commit and seeds
the other configured branch from `refs/remotes/origin/<other>`.
3. Backfills missing channel notes on every reachable tag (`v*-beta.*` →
`beta`, `v*-alpha.*` → `alpha`, else `latest`).
4. Patches the temp clone's `apps/cli/package.json` with the *current*
`release` config so historical checkouts use today's `channel: "beta"`
and plugin chain.
5. Uses `git config --local url.<local>.insteadOf <github>` so
semantic-release's `ls-remote` silently targets the local clone
(satisfying the "behind remote" check) while `repositoryUrl` stays the
real GitHub URL — keeping commit/PR links correct in the rendered notes.
6. Calls `semanticRelease({ dryRun: true, noCi: true, repositoryUrl }, {
cwd: ... })` and prints `nextRelease.notes` to stdout, or with `--apply`
calls `gh release edit --notes-file`.

The workflow itself reduces to: checkout, setup, `bun
apps/cli/scripts/backfill-release-notes.ts --tag $TAG`, mirror to the
job summary, then conditionally re-run with `--apply`.

## Sample output (`v2.99.0-beta.2`)

```sh
$ bun apps/cli/scripts/backfill-release-notes.ts --tag v2.99.0-beta.2
```

```markdown
# [2.99.0-beta.2](v2.99.0-beta.1...v2.99.0-beta.2) (2026-05-20)


### Bug Fixes

* **ci:** make release re-cut reliable after stale-bytes runs ([#5209](#5209)) ([ef1b13a](ef1b13a)), closes [#5205](#5205) [#5207](#5207) [#5205](#5205) [#5207](#5207) [#App](https://github.com/supabase/cli/issues/App)
* **cli:** make npm publish idempotent for partial-failure re-runs ([#5207](#5207)) ([bbeaec7](bbeaec7)), closes [#release-creation](https://github.com/supabase/cli/issues/release-creation)
* **cli:** mark platform binaries executable in pnpm publish tarball ([#5201](#5201)) ([b2b397a](b2b397a)), closes [#5199](#5199)
* **cli:** smoke test now actually verifies our local build ([#5205](#5205)) ([9109056](9109056)), closes [#5199](#5199) [#5200](#5200)
```

Exactly the 5 commits between `v2.99.0-beta.1` and `v2.99.0-beta.2`,
with GitHub links rendered against `https://github.com/supabase/cli`
regardless of the local-clone redirection.

## Related

The same `release.repositoryUrl` / `ls-remote` interaction and
channel-notes drift will need to be addressed on the production publish
path (`.github/workflows/release-shared.yml`) once Stage B of the
changelog plumbing (`claude/wire-release-notes-publish`) lands.

---------

Co-authored-by: Claude <noreply@anthropic.com>
…the right baseline (#5321)

Fixes `bun apps/cli/scripts/backfill-release-notes.ts --tag
v2.100.0-beta.2`, which currently errors with `semantic-release did not
compute a next release for v2.100.0-beta.2`.

## Why it fails today

semantic-release's `lastRelease` picker accepts both prerelease tags on
the branch's channel **and** stable tags via the prerelease filter's
stable-fallback clause, then sorts the survivors by semver. When a
stable and a beta share a commit (e.g. `v2.100.0` and `v2.100.0-beta.2`
are both at `9a22aff6`), the stable wins the sort — and since it points
at HEAD itself, semantic-release reports "Found 0 commits since last
release" and emits no `nextRelease`. The script's version-mismatch guard
then exits with the "did not compute a next release" error.

## Fix

After resolving the target tag's commit, delete *every* local tag that
points at that commit, not just the target. Co-located tags are by
definition the same release, and dropping them lets semantic-release
fall back to the genuine prior release on the channel (`v2.100.0-beta.1`
in the example).

## Sample output (`v2.100.0-beta.2`)

```sh
$ bun apps/cli/scripts/backfill-release-notes.ts --tag v2.100.0-beta.2
```

```markdown
# [2.100.0-beta.2](v2.100.0-beta.1...v2.100.0-beta.2) (2026-05-20)


### Features

* **cli:** add hidden flag support for legacy commands ([#5278](#5278)) ([9a22aff](9a22aff)), closes [#5277](#5277)
```

Regression-checked locally that `v2.99.0-beta.2` (where stable and beta
are on different commits) and `v2.100.1` (stable backfill) still produce
the same output as before.

---
_Generated by [Claude
Code](https://claude.ai/code/session_016p4TNXziTipWocxmgLDc8b)_

Co-authored-by: Claude <noreply@anthropic.com>
## What kind of change does this PR introduce?

Simplify the action, let the ts script leverage the logic.
Fixes a silent failure in the `backfill-release-notes` script where `git
notes add` would fail in CI environments that lack a configured git
committer identity and GPG signing setup.

**Changes:**
- Configure local git user email and name in the temporary clone before
seeding channel notes
- Disable `commit.gpgsign` and `tag.gpgsign` in the clone to prevent
failures when global signing config is inherited but no signing key is
available
- Remove `.nothrow()` from the `git notes add` call since the git config
is now properly set up and failures should be surfaced

This ensures that semantic-release can correctly identify prior beta
tags and compute the correct next version during the backfill process.

https://claude.ai/code/session_01FX5hRgt2dXeZzMoLGcyU9A

Co-authored-by: Claude <claude@anthropic.com>
Add a new GitHub Actions workflow to smoke test the `supabase/setup-cli`
action against published CLI versions. This catches regressions like
setup-cli#427 where musl libc and archive layout changes broke the
action on Alpine silently.

**Key changes:**

- New `.github/workflows/setup-cli-smoke-test.yml` workflow that:
  - Tests CLI installation across Ubuntu, macOS, and Windows runners
- Includes a dedicated Alpine container job to catch musl libc
regressions
  - Verifies the installed CLI version matches the expected version
- Can be triggered manually via `workflow_dispatch` or called from other
workflows
  
- Updated `.github/workflows/release-shared.yml` to:
  - Add a `setup-cli-smoke` job that runs after beta releases
  - Runs as a post-publish signal without gating other release jobs
- Uses `always() && needs.publish.result == 'success'` to run even when
homebrew/scoop jobs are skipped or fail

The Alpine job is kept separate because GitHub Actions only honors the
`container:` field on Linux runners, and the musl-vs-glibc regressions
only reproduce inside a real Alpine container.

Closes: CLI-1507

https://claude.ai/code/session_01NzzeYET8sYhpCVdSvBBJhC

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Julien Goux <hi@jgoux.dev>
The smoke test workflow compares the output of `supabase --version`
against the `VERSION` environment variable. However, `supabase
--version` outputs the version without a leading `v`, while release tags
and setup-cli inputs include it. This causes version mismatches during
testing.

**Changes:**
- Strip the leading `v` from `VERSION` before comparison in both smoke
test jobs
- Add clarifying comments explaining why the stripping is necessary

The fix uses bash parameter expansion (`${VERSION#v}`) to remove the
leading `v` if present, ensuring the comparison is between two
consistently formatted version strings.

https://claude.ai/code/session_01S5jBFMNp5mHAWhS9inCagB

Co-authored-by: Claude <noreply@anthropic.com>
…5324)

Fix the backfill-release-notes script to correctly detect the git branch
when running semantic-release in dry-run mode.

The script was passing the full process environment to semantic-release,
which includes GitHub Actions detection variables (GITHUB_REF,
GITHUB_ACTIONS, etc.). The semantic-release library uses env-ci to
detect the current branch, and env-ci prioritizes these CI environment
variables over the actual git HEAD state. This caused env-ci to report
the wrong branch when backfilling from a workflow that ran on a
different branch than the current clone's HEAD, leading to
semantic-release errors about local branches being behind remote.

**Key changes:**
- Create a filtered child environment that strips GitHub Actions
detection variables (GITHUB_ACTIONS, GITHUB_REF, GITHUB_REF_NAME,
GITHUB_HEAD_REF, GITHUB_BASE_REF, GITHUB_EVENT_NAME, CI)
- Pass the filtered environment to semantic-release instead of the full
process environment
- This allows env-ci to fall back to reading the branch from git HEAD in
the clone, which is the correct source of truth for the backfill
operation

https://claude.ai/code/session_01QQsjHNdZTJHhLWr2FYSjhe

Co-authored-by: Claude <noreply@anthropic.com>
Stage A (#prior PR) added @semantic-release/release-notes-generator to
the plugin chain and a manual backfill workflow to validate the format.
This change wires the same notes into the production release pipeline so
future releases on develop/main come with a populated GH Release body
instead of an empty page.

- release.yml: capture new_release_notes from the plan job's
cycjimmy/semantic-release-action step into a release_notes job output
using a heredoc with a random delimiter. SR_NOTES is passed via env and
emitted with printf (not echo) so attacker-influenced commit bodies / PR
titles can't be interpolated as shell. The workflow_dispatch re-cut path
skips semantic-release entirely, so release_notes is the empty string in
that case - the operator can follow up with the backfill-release-notes
workflow to populate the body afterwards.

- release-shared.yml: new optional release_notes workflow_call input,
wired as the body of the softprops/action-gh-release step that creates
the draft release. No generate_release_notes: true - the action appends
GitHub's auto notes to any supplied body, which would duplicate content.

## What kind of change does this PR introduce?

Bug fix, feature, docs update, ...

## What is the current behavior?

Please link any relevant issues here.

## What is the new behavior?

Feel free to include screenshots if it includes visual changes.

## Additional context

Add any other context or screenshots.

---------

Co-authored-by: Claude <noreply@anthropic.com>
…#5220)

## Summary

This change introduces a new flag called `no-apply` to the `db schema
declarative sync command` , allowing users to generate migration files
without applying them to the local database.

## Current behavior

```
$ supabase db schema declarative sync --name test
...
Created new migration at supabase/migrations/20260428093833_test.sql
Apply this migration to local database? [Y/n]
```

The only escape hatches today:
- `--apply` — force-applies the migration (opposite of what's wanted)
- Closing stdin via piping, e.g. `true | supabase db schema declarative
sync ... 2>&1 | cat`

Closes #5218

## New behavior

- If `--no-apply` is set, the command writes the migration file and
skips the apply step without any prompt
- `--no-apply` overrides global `--yes` and cannot be combined with
`--apply`.
- Parity with legacy TS is maintained

---------

Co-authored-by: Andrew Valleteau <avallete@users.noreply.github.com>
restores go cli parity for `supabase domains create` by requiring
`--custom-hostname` in the ts
 legacy shim instead of only failing later in go
@supabase-cli-releaser supabase-cli-releaser Bot requested a review from a team as a code owner May 21, 2026 08:05
@coveralls
Copy link
Copy Markdown

Coverage Report for CI Build 26213641541

Warning

No base build found for commit e1f857a on main.
Coverage changes can't be calculated without a base build.
If a base build is processing, this comment will update automatically when it completes.

Coverage: 63.767%

Details

  • Patch coverage: No coverable lines changed in this PR.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

Requires a base build to compare against. How to fix this →


Coverage Stats

Coverage Status
Relevant Lines: 15701
Covered Lines: 10012
Line Coverage: 63.77%
Coverage Strength: 7.06 hits per line

💛 - Coveralls

@supabase-cli-releaser supabase-cli-releaser Bot merged commit b2f10f0 into main May 21, 2026
40 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants