chore: production deploy - #6514
Open
supabase-cli-releaser[bot] wants to merge 48 commits into
Open
Conversation
) ## What kind of change does this PR introduce? Tooling/chore — adds commitlint, tied to a fixed scope list. ## What is the current behavior? There is no commitlint or commitizen setup. PR titles must follow conventional-commits format (checked in CI by `amannn/action-semantic-pull-request`), but scopes are unrestricted free text, enforced only by human review. ## What is the new behavior? - Adds `commitlint.config.js` with a `scope-enum` rule: one scope per real turbo/pnpm workspace project (`api`, `cli`, `cli-e2e`, `cli-go`, `cli-test-helpers`, `config`, `docs`, `process-compose`, `stack` — verified against `pnpm -r list`) plus escape scopes for changes that don't map to a single project (`ci`, `repo`, `misc`, `release`). The 8 per-platform `packages/cli-{platform}` binary-wrapper packages are folded into `cli`. `release` isn't a turbo project (`tools/release` has no `package.json`) but is kept as an escape scope because `propose-release-notes.ts` genuinely commits with that scope. - Adds a local `commit-msg` git hook via husky that runs commitlint on every commit. CI checkouts skip installing this hook (`HUSKY=0` in the shared setup action) so bot-authored commits are never gated by it — scope enforcement for those stays on the PR-title CI check. - Mirrors the same scope list into the `amannn/action-semantic-pull-request` step in `lint-pull-request.yml`, so PR titles are held to the same list in CI. - Updates `.github/dependabot.yml`: the `npm` and `docker` ecosystems previously auto-generated scopes (`deps`/`deps-dev`/`docker`) that aren't in the new fixed list, which would have started failing their own PR-title check — both remapped to `misc`. The `gomod` ecosystem had no `commit-message` config at all, so it fell back to a repository-detected scope also outside the allowlist — mapped to `chore(cli-go): ` since that's precisely the project those updates belong to. `github-actions` (already `ci`) is untouched. - Documents the local commit-msg hook in `CONTRIBUTING.md`, and adds one clarifying sentence to `AGENTS.md` pointing at `commitlint.config.js` as the source of truth for allowed scopes. No commitizen/interactive prompt added — commitlint validates whatever message is typed.
…2285) (#6497) ## Summary An explicit `--workdir`/`SUPABASE_WORKDIR` could silently let `loadCliConfig`/`findCliProjectRoot` climb ancestor directories to find `supabase/config.{toml,json}` — so `--workdir ./sub` where `sub/supabase/` doesn't exist could silently load, or **push**, an unrelated parent project's config instead of failing. A defaulted (unset) workdir still climbs exactly as before. Linear: [CLI-2285](https://linear.app/supabase/issue/CLI-2285/explicit-workdir-must-not-climb-to-a-parent-project-config-diffpush). ## What changed - `LegacyCliSettings` gains `explicitWorkdir: boolean`; a new `legacyShouldSearchAncestors(cliSettings)` helper (`command-internal/legacy-workdir-search.ts`) gates the ancestor search at every affected call site: `config diff/push/pull`, `gen types`, `seed buckets`, `storage ls/mv/rm/cp`, `functions new`, `experimental workers`, and `functions serve/deploy`. - `packages/config`'s `findCliProjectRoot` gains an optional `FindCliProjectPathsOptions` parameter (additive), matching `findCliProjectPaths`'s existing `search: false` support. - `config diff/push/pull`, `gen types`, `storage`, and `seed buckets` now hard-fail with a clear error instead of silently falling back to embedded defaults (or an unrelated ancestor's config) when an explicit workdir has no project. - The same commands now validate the workdir is an existing directory up front (reusing the existing `start`/`stop`/`status` pattern), so a typo'd path fails with "no such directory" instead of a confusing "file not found". - The missing-project message (`command-internal/legacy-workdir-project.ts`) no longer suggests `supabase init` for an explicit workdir — which could scaffold a fresh config at the wrong path, leading to a subsequent `push` overwriting the real project — and instead names the resolved path, suggesting an ancestor's path when one genuinely has a project. - `gen types` no longer leaks a raw `CliConfigParseError` tag as its error message on a malformed config. - `experimental workers new` gained the same workdir-existence guard `functions new` already had, closing an identical scaffold-at-a-nonexistent-path gap. ## Follow-ups filed separately (explicitly out of scope here) - `secrets set` ignores `--workdir` entirely (loads from `runtimeInfo.cwd`). - Extending the explicit-workdir hard-fail policy to the `db`/`migration` TOML-only loaders. - `--debug` workdir logging, `--workdir` help-text tightening, and a couple of smaller consistency nits (error-code unification across the `config` family, `workers push`'s hardcoded error paths).
….4 in /apps/cli-go in the go-minor group across 1 directory (#6504) Bumps the go-minor group with 1 update in the /apps/cli-go directory: [github.com/posthog/posthog-go](https://github.com/posthog/posthog-go). Updates `github.com/posthog/posthog-go` from 1.24.3 to 1.24.4 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/posthog/posthog-go/releases">github.com/posthog/posthog-go's releases</a>.</em></p> <blockquote> <h2>1.24.4</h2> <h2>Unreleased</h2> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/PostHog/posthog-go/blob/main/CHANGELOG.md">github.com/posthog/posthog-go's changelog</a>.</em></p> <blockquote> <h2>1.24.4</h2> <h3>Patch Changes</h3> <ul> <li>c3270b6: Align local feature flag property matching with the flags service, including boolean-array precedence, canonical JSON stringification, and operator-specific case folding.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/PostHog/posthog-go/commit/0216c2384b67ef39914e20fd0065c57243fb42d2"><code>0216c23</code></a> chore: release v1.24.4 [version bump] [skip ci]</li> <li><a href="https://github.com/PostHog/posthog-go/commit/c3270b6bd8138865c0f0d0a57affaceb7a2bb6cb"><code>c3270b6</code></a> fix(flags): align local exact matching with the flags service (<a href="https://redirect.github.com/posthog/posthog-go/issues/300">#300</a>)</li> <li><a href="https://github.com/PostHog/posthog-go/commit/d5152ea6c4155c781cbdc0512eb99b60977fe90e"><code>d5152ea</code></a> chore(deps): bump the github-actions group with 2 updates (<a href="https://redirect.github.com/posthog/posthog-go/issues/304">#304</a>)</li> <li><a href="https://github.com/PostHog/posthog-go/commit/518931f315c1ff5bb2786d4b53b0c9fc316a1d1b"><code>518931f</code></a> chore(deps-dev): bump <code>@changesets/cli</code> from 3.0.0 to 3.0.1 in the release-tool...</li> <li>See full diff in <a href="https://github.com/posthog/posthog-go/compare/v1.24.3...v1.24.4">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…sumer (CLI-2339) (#6498) ## Summary CLI-2320 confined `auth.email.template.*.content_path`/`auth.email.notification.*.content_path` resolution to the project root, but only inside `config push`'s own content loader. This centralizes that containment into the shared resolver `legacyResolveEmailTemplateContentPath` (`legacy-config-validate.ts`), so it now protects every consumer, with no flag and no opt-out: `config push`, `start` (an eager pre-Docker validation pass covering every configured template plus every enabled notification — the same set Kong's mount builder consumes), and the shared config-validation path reached by `db`/`migration`/`status`/`stop`/`functions deploy`/`functions serve`/`functions download`/`gen types`/`inspect`/`bootstrap`. Linear: CLI-2339 (follow-up from CLI-2320's own PR review, #6489). While extending the check's reach, two bugs surfaced and are fixed in the same change: - The canonicalization helper treated any `realpath` failure as "this path doesn't exist yet" and fell back to lexical resolution — which also covers a dangling symlink, an `EACCES`-blocked target, or a symlink loop, all of which exist on disk but couldn't be canonicalized. That let an in-root symlink pointing outside the project root bypass containment silently, most seriously for `start`'s Kong mount (a root-privileged, `rw` Docker bind mount). Fixed by distinguishing "genuinely absent" from "exists but uncanonicalizable" and following a symlink to its real target before checking it. The ancestor walk was also rewritten iteratively to remove a stack-depth limit on deeply nested missing paths. - `start`'s Kong mount resolved and validated a path early, then independently re-derived and used a second, unresolved path much later when building the Docker bind mount — a check/use gap and duplicated resolution logic. The validated, read-verified path is now threaded straight through to the bind-mount builder instead of being re-derived. The rejection message now includes the declared `content_path` value and the project root (not the fully symlink-dereferenced target, to avoid echoing back where an escaping symlink actually points). ## What changed - `legacy-config-validate.ts` — `legacyResolveEmailTemplateContentPath` now canonicalizes and containment-checks its result before returning; new `canonicalPathForContainment`/ `canonicalizeExistingPath`/`isPathContainedInRoot` helpers. - `push.auth-email-content.ts` — deleted its local, now-redundant containment helpers; both template and notification loading route through the shared resolver. - `start.handler.ts`/`kong.service.ts` — `resolveKongEmailTemplateMounts` resolves, containment- checks, and read-verifies every Kong-mounted template/notification once, early, before any Docker work; `LegacyKongEmailTemplateMount` carries the resolved path, and `legacyBuildKongEmailTemplateBind` is now a pure formatter with no resolution logic of its own. - `SIDE_EFFECTS.md` updates across `start`, `status`, `stop`, `db diff`, `migration squash`, `functions deploy/serve/download`, and one line in `apps/cli/AGENTS.md`'s "config validation has one home" section. Follow-ups filed for the adjacent untrusted-path fields this ticket didn't touch (CLI-2344), and a message-polish gap where an `EACCES` behind a followed symlink surfaces a raw filesystem error instead of the usual containment message (CLI-2345) — in both cases the path is still rejected, just with a less specific error.
## TL;DR Adds live e2e coverage for `branches get`, `branches update` and `branches disable` ## whats introduced? - `branches get`: creates a branch, fetches it by name and asserts the pretty connection table renders - `branches update`: creates a branch, renames it with `--name --output json`, asserts the confirmation and payload, then proves the new name resolves through `branches get` - `branches disable`: creates and deletes a branch so branching is enabled with no preview branches left, disables preview branching for the project and asserts the confirmation on stdout ## ref: - closes: CLI-2327 - passed here: https://github.com/supabase/cli/actions/runs/34112181467
## TL;DR fixes `supabase sso update --log-level error <id>` failing with `accepts 1 arg(s), received 2` by registering the built-in `--log-level` as value taking in the raw argv scanners.. ## whats biting the user? `--log-level` shows up in every command's help and the parser accepts it, but the raw argv scanners did not know it consumes a value so `error` was counted as an extra positional and the command refused to run. A typed `--log-level` also killed shell completion for the rest of the line. ## now fixed by: - registering `log-level` in `PERSISTENT_VALUE_FLAG_NAMES` and `globalFlagsWithValues`, so positional counting consumes its value like every other global - registering the built-in flags where output format and shell completion resolve, so `--version` output and tab completion keep working around them also added regression tests for the issue's exact spelling plus the pre-path, inline, completion, and version spellings ## ref: - closes CLI-2329 - closes #6482
## Summary Rewrites `@supabase/stack` around one managed-only runtime shared by strict native and container execution modes. The package owns durable configuration and secrets, sticky ports, artifact preparation, lifecycle arbitration, per-service eager or lazy activation, service migrations, ingress, retained and live logs, and exact resource cleanup. A stopped stack has no resident supervisor or runtime resources: status and retained logs come from durable state, while a later start creates a fresh owner and performs clean recovery. PostgreSQL 17 is the only eager service by default; other enabled services activate through stack ingress, and callers can configure eager activation. Dependency-ready workloads start concurrently. Docker-compatible engines, including Podman, share the same container path. Enabled lazy services prepare their artifacts in the background after startup by default. `preparation: "on-demand"` retains full lazy downloading, while explicit `prepare()` remains available in either mode. Foreground activation prepares its dependency closure concurrently and shares in-flight downloads with background preparation. All selected workload downloads can run concurrently. Native archives are streamed to disk while hashing, verified before extraction, and decompressed without retaining whole archives in memory. Runtime cleanup cancels unfinished transfers and retains completed cache entries. Status exposes artifact preparation separately from service readiness, and explicit preparation reports progress through `onProgress`. Edge Functions are served through the stack-owned Edge Runtime for package consumers. The package runs independently of the CLI and accepts normalized `StackConfig` values without reading `config.toml`. All CLI integration, including `supabase functions serve` and lifecycle commands under `experimental start`, belongs to M5 in separate PRs. Existing CLI Functions behavior is preserved. The deleted `next` CLI was a disposable proving ground and is not part of this PR. Service preparation now lives in the published runtime artifacts: PostgreSQL owns first boot and bundled migrations, service helpers own migration and Pooler tenant provisioning, and Node services expose public launchers shared with their images. The stack supplies instance settings and sequences those commands. Default images use the configured slim-services tags or digests, including the artifacts from [slim-services #299](supabase/slim-services#299) and the BEAM versions republished after [slim-services #302](supabase/slim-services#302). Native downloads are checked against the checksum published with the same release. BEAM launchers own the shared runtime defaults in native and container modes; Vector configuration and Edge Functions bootstrap remain stack-owned. Unix control sockets bind inside owner-private directories. Container mount paths preserve CSV special characters, and default state paths use the user home directory when `HOME` is absent. Obsolete process-compose integration and superseded runtime helpers are removed. Supersedes #6385
) ## TL;DR adds live e2e coverage for `network-restrictions get` and `update`, covering the command family ## whats introduced? - `network-restrictions get`: reads the target project's restrictions and proves the json payload carries `entitlement`, `config` and `status` - `network-restrictions update`: captures the current allowlist, replaces it with documentation ranges, proves the replacement in its own output and through get, then restore s... ## ref: - closes: CLI-2288 - tested here: https://github.com/supabase/cli/actions/runs/33969368307
Bumps the actions-major group with 2 updates: [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) and [linear/linear-release-action](https://github.com/linear/linear-release-action). Updates `docker/setup-qemu-action` from 4.2.0 to 4.3.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/setup-qemu-action/releases">docker/setup-qemu-action's releases</a>.</em></p> <blockquote> <h2>v4.3.0</h2> <ul> <li>Bump <code>@docker/actions-toolkit</code> from 0.92.0 to 0.96.0 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/336">docker/setup-qemu-action#336</a></li> <li>Bump <code>@sigstore/verify</code> from 3.1.0 to 3.1.1 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/316">docker/setup-qemu-action#316</a></li> <li>Bump brace-expansion from 1.1.15 to 1.1.18 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/332">docker/setup-qemu-action#332</a></li> <li>Bump js-yaml from 4.2.0 to 4.3.1 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/334">docker/setup-qemu-action#334</a></li> <li>Bump postcss from 8.5.10 to 8.5.25 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/331">docker/setup-qemu-action#331</a></li> <li>Bump sigstore from 4.1.0 to 4.1.1 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/317">docker/setup-qemu-action#317</a></li> <li>Bump undici from 6.27.0 to 6.28.0 in <a href="https://redirect.github.com/docker/setup-qemu-action/pull/333">docker/setup-qemu-action#333</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/setup-qemu-action/compare/v4.2.0...v4.3.0">https://github.com/docker/setup-qemu-action/compare/v4.2.0...v4.3.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/docker/setup-qemu-action/commit/1f40c72289eff860ee54a304f1438e3cff362e0a"><code>1f40c72</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/336">#336</a> from docker/dependabot/npm_and_yarn/docker/actions-to...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/932216e29e2417c3aa0bc5aec3c57089030cef2c"><code>932216e</code></a> [dependabot skip] chore: update generated content</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/a39e895360e601ae54e9ac97b8ea3b99e5f40491"><code>a39e895</code></a> build(deps): bump <code>@docker/actions-toolkit</code> from 0.92.0 to 0.96.0</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/a98ae9ffe777adf16ca44873bab9926427b262fa"><code>a98ae9f</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/333">#333</a> from docker/dependabot/npm_and_yarn/undici-6.28.0</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/8ebc9d118344dda0af3e25d2a7330010dd33e951"><code>8ebc9d1</code></a> [dependabot skip] chore: update generated content</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/c41e3fcbc0d6742101e0310c3b008ac3b16a9529"><code>c41e3fc</code></a> build(deps): bump undici from 6.27.0 to 6.28.0</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/5fc60dfac60f723a3386e73530ff8067f2848f60"><code>5fc60df</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/332">#332</a> from docker/dependabot/npm_and_yarn/brace-expansion-1...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/a26e892bb646b50218299a9b391e7a4b0322d96a"><code>a26e892</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/328">#328</a> from docker/dependabot/github_actions/actions/checkou...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/aa6d04232374700651c6e7be400e859600041423"><code>aa6d042</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/324">#324</a> from docker/dependabot/github_actions/actions/setup-n...</li> <li><a href="https://github.com/docker/setup-qemu-action/commit/d381ce5c16de15c000da8929fd1fc6e8fdef19e1"><code>d381ce5</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-qemu-action/issues/317">#317</a> from docker/dependabot/npm_and_yarn/sigstore-4.1.1</li> <li>Additional commits viewable in <a href="https://github.com/docker/setup-qemu-action/compare/96fe6ef7f33517b61c61be40b68a1882f3264fb8...1f40c72289eff860ee54a304f1438e3cff362e0a">compare view</a></li> </ul> </details> <br /> Updates `linear/linear-release-action` from 0.17.1 to 0.17.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/linear/linear-release-action/releases">linear/linear-release-action's releases</a>.</em></p> <blockquote> <h2>v0.17.2</h2> <h2>What's Changed</h2> <ul> <li>Release v0.17.2 by <a href="https://github.com/axelniklasson"><code>@axelniklasson</code></a> in <a href="https://redirect.github.com/linear/linear-release-action/pull/67">linear/linear-release-action#67</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/linear/linear-release-action/compare/v0.17.1...v0.17.2">https://github.com/linear/linear-release-action/compare/v0.17.1...v0.17.2</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/linear/linear-release-action/commit/53ad0f863963e7f8e270fba18426bbb55ef55384"><code>53ad0f8</code></a> Release v0.17.2 (<a href="https://redirect.github.com/linear/linear-release-action/issues/67">#67</a>)</li> <li>See full diff in <a href="https://github.com/linear/linear-release-action/compare/3f31fcf14c110cc53579fcc3575a26d469c413b4...53ad0f863963e7f8e270fba18426bbb55ef55384">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…stat throws (CLI-2345) (#6518) ## What kind of change does this PR introduce? Bug fix. ## What is the current behavior? `canonicalizeExistingPath` in `apps/cli/src/command-internal/legacy-config-validate.ts` follows an in-root symlink one hop by hand (via `readlinkSync`) when `realpathSync` fails, so a `content_path` containment check can catch a dangling/looping/unsearchable-target symlink escaping the project root. When the symlink's target sits one hop inside a directory that's unsearchable (`EACCES`, e.g. `chmod 000`), the fallback `lstatSync(path, { throwIfNoEntry: false })` call itself throws — `throwIfNoEntry: false` only suppresses `ENOENT`, not `EACCES` — and that throw was unguarded, escaping as a raw filesystem `Error` instead of the polished `LegacyConfigValidateError` ("resolves outside the project root") every other containment-rejection case produces. Not a security regression — the path was still rejected in every tested environment — it was a message-polish gap. Code review while fixing this surfaced the identical bug in `legacyIsExistingFile` (the `"notification"` email-content section's twin resolution path, via `statSync`), which had the same unguarded `throwIfNoEntry: false` gap. Fixes CLI-2345. ## What is the new behavior? - `canonicalizeExistingPath`'s `lstatSync` fallback is now guarded: any non-`ENOENT` throw there returns the path as-is (same fallback already used for a non-symlink entry or too-deep symlink chain), so the caller's containment check still runs and rejects normally. - `legacyIsExistingFile` is guarded the same way: an unstattable dirent is treated as present, so the declared path keeps winning over the legacy `supabase/`-relative fallback and the real cause surfaces instead of a raw fs error or a silent retarget. - Updated the `canonicalizeExistingPath` JSDoc to accurately describe what this guard does and doesn't guarantee (the lexical comparison isn't fully fail-closed on its own; every caller's own read of the resolved file's bytes is the actual backstop). - Tightened the existing EACCES regression test to assert the specific error/message, parametrized the three symlink-containment tests across both `template`/`notification` sections, and added a permission-free `ENAMETOOLONG` regression test so this code path stays covered in environments where `chmod 000` isn't enforced (root, some containers, Windows).
…he slim-services feed (#6521) ## Summary Dependabot's docker updates on `apps/cli-go/pkg/config/templates/Dockerfile` have been landing red — see #6502 (realtime) and #6503 (postgres). Two independent causes, plus the automation the second one leaves behind. **1. A unit test asserted the exact current pins while reading them from the live manifest.** `slim-images.unit.test.ts` had a `maps current docker.io pins onto the published slim tags` case that fed `dockerfileServiceImageRaw(alias)` in and asserted a spelled-out version for `pg`, `supavisor`, `realtime`, and `storage`. Any bump of those four failed the unit suite by construction. The assertions that must track the manifest — which slim repository each alias maps to — already live in the `it.each` above and slice the tag off before comparing, so they stay. Live-tag validation also survives more strongly elsewhere: `start.slim-images.e2e.test.ts` translates the current manifest pins and actually pulls them, so an unpublished translated tag fails CI on the registry rather than on a hand-typed string. The version-bearing block only encoded the per-service tag-prefix scheme, so it is replaced with fixed pins covering the same scheme, plus the uppercase-`V` normalization arm in `slimTagForService` that had no coverage. **2. `sync-stack-service-versions.yml` targeted files that no longer exist.** It ran `pnpm sync:versions` in `packages/stack` and committed `packages/stack/src/ServiceCatalog.ts`. #6440 deleted both the script and that file, so the workflow would have hard-failed on the next dependabot Dockerfile PR. It survived #6502/#6503 only because those were opened about two hours before #6440 merged. **3. The stack's pins now ride the feed that can actually maintain them.** Deleting that workflow leaves `WorkloadCatalog.ts` — `ServiceCatalog.ts`'s replacement — with no automation, so this adds it. The catalog pins each workload to an exact slim-services artifact release: a version **plus its `ghcr.io/supabase/cli` image digest**, per ADR 0017, which makes the artifact release the boundary for service startup defaults. Dependabot owns the Dockerfile and structurally cannot own this table — it resolves registry tags and never produces a `sha256:` digest, which is why repointing the old workflow was not an option. slim-services already sends this repo a `mirror-slim-image` `repository_dispatch` per release carrying `service`/`version`/`digest`, to drive the ECR mirror. `sync-stack-workload-catalog.yml` subscribes to that same dispatch and opens a PR pinning the release. It is deliberately a separate workflow from `mirror-slim-image.yml`: that mirror runs against the sender's 15-minute verification poll, and a catalog PR must never delay it or turn its run red. ## Reviewer notes Only two source values change per release. `artifactFor` derives `releaseTag`, `assetName`, and every download URL from `service` + `version`, and `releases` is derived from `defaultVersion` plus the container image, so rewriting the `native(...)` positional version and image is the whole change. **postgres is the one service carrying two supported release lines** (17.x and 15.x via `additionalReleases`), so the plan picks its target by release line — a 15.x release moves the additional entry and can never overwrite the 17.x default. That is the main correctness risk here and it has a dedicated test. A release on a line the catalog does not carry, a service it does not model, and a re-dispatch of an already-pinned release are all successful no-ops, so the sender's retry path does not open duplicate PRs. The dispatch payload arrives with whatever authority holds the dispatch token, so `sync-workload-catalog.ts` revalidates `service`/`version`/`digest` against the same patterns `mirror-slim-image.yml` uses rather than trusting the workflow. Those patterns are what stop a version or digest breaking out of the TypeScript string literals it writes into. `planCatalogUpdate` is pure and covered by 21 `bun:test` cases in `.github/scripts/`, which `github-scripts-ci.yml` already tests and type-checks. One of them sweeps every service the real catalog models, so a newly modelled workload is covered without editing a fixture list. `WorkloadCatalog.ts` also gains a provenance comment: it and the Dockerfile list overlapping service versions and are meant to diverge, so the next reader needs to know not to "reconcile" them. ## Linked issue No Linear ticket — repository maintenance prompted by the two failing dependabot PRs above. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01PWXmTVTiQCwuyjZ8Mfw9NL --------- Co-authored-by: Claude <noreply@anthropic.com>
…#6519) ## Summary The `Codegen` check fetched the live staging spec on every pull request and diffed the result against the committed `pkg/api`. That conflated two questions: whether the pull request left generated code inconsistent, and whether staging had drifted ahead of the repository. The second dominated, so a spec change turned every open pull request touching `apps/cli-go` red at once — none of which the authors caused or could fix — and it made all of those runs depend on staging being reachable. This pins the spec instead: - `apps/cli-go/api/v1-openapi.yaml` is a committed snapshot of the staging spec, and `go generate` reads it instead of `https://api.supabase.green/api/v1-yaml`. The per-PR `Codegen` check is now hermetic: it fails only when `pkg/api` no longer matches the snapshot it was generated from, and it reproduces offline. - The API Sync workflow becomes the sole reader of the live spec. It refreshes the snapshot and regenerates the client together in one pull request, so upstream drift produces that one pull request instead of a failure on every open one. Its diff now shows the upstream API change rather than only generated Go. - Its change detection covers the snapshot as well as `pkg/api`, so an upstream edit that codegen ignores (a description, an example) is committed rather than refetched and discarded on every run. - `api/README.md` is rewritten. It still documented the pre-URL `beta.yaml` flow, and its links to the generated files were broken relative paths. This restores the model `packages/api` already uses, where `pnpm generate` runs only in the sync workflow and per-PR drift is checked against the committed `openapi.json`. ## Drift the snapshot exposed Seeding the snapshot was expected to regenerate `pkg/api` byte-identically. It did not: staging had drifted ahead of the committed client, which is exactly the accumulation the old check could never land. Two changes came in, and they are worth a look: - `StorageConfigResponseOutput.MigrationVersion` is now `nullable.Nullable[string]`. Assigning it to the `string` field `storage.TargetMigration` no longer compiles, so `FromRemoteStorageConfig` unwraps it with the same `Get()` guard `FromRemoteAuthConfig` already uses. Behavior change worth noting: when the platform omits the field, the local value is left untouched rather than overwritten with `""`, consistent with the surrounding intent that unset config should not change platform defaults. - Several `UpdateCustomHostnameResponseOutput` result fields became optional pointers. Nothing outside `pkg/api` consumes that type, so no call sites needed changes. ## Generated-file marking Committing a 468 KB spec snapshot raised the question of generated-file marking, and `.gitattributes` carried no `linguist-*` entries at all, so the repository's roughly 3.5 MB of generated output was skewing GitHub's language statistics and expanding in diffs. All of it is now marked `linguist-generated`: the Go client and spec snapshot, `packages/api/src/generated/`, the docs config schemas, and the lockfiles. `turbo.json`'s `generate` outputs and the `go generate` directives are the source of truth for that list, so only generated files are marked. Hand-written codegen inputs (`pkg/api/*.cfg.yaml`, `api/overlay.yaml`) are untouched, as are large but authored files such as the integration test suites. The attribute is GitHub-only — git, CI, and local diffs behave identically, and the files are collapsed behind a click rather than hidden, so the sync PR's spec diff and lockfile changes remain reviewable. ## Linked issue N/A — CI reliability change, no linked issue. ## Checklist - [x] The PR title follows [Conventional Commits](https://www.conventionalcommits.org/). ## Reviewer notes One open decision: the snapshot's file name. `v1-openapi.yaml` matches the `/api/v1-yaml` endpoint; `beta.yaml` was the name before codegen moved to the live URL, if continuity is preferred. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TKDPB9bwSx5WM7juDAM7CT --------- Co-authored-by: Claude <noreply@anthropic.com>
## Summary #6465 removed the `next/` shell and #6486 flattened `legacy/` into `src/`, but the two-shell world lived on in the names: every exported symbol in the CLI tree still carried the mandatory `Legacy`/`legacy`/`LEGACY` prefix, 368 files were named `legacy-*.ts`, `apps/cli/AGENTS.md` still told agents the prefix was required, and the harness, build, and release tooling still selected a "shell". This PR removes the concept end to end so `src/` reads as the one CLI it is. ### The rename (`bad664be1`) - ~3,050 identifiers lose the prefix (`LegacyBranchesCreateFlags` → `BranchesCreateFlags`, `legacyRoot` → `rootCommand`, …), together with their `Data.TaggedError` tags, `Effect.fn` span names (`legacy.branches.create` → `branches.create`), and service tags (`supabase/legacy/*` → `supabase/cli/*`). - 368 files are renamed (`legacy-foo.ts` → `foo.ts`); `src/shared/legacy/*` moves into `src/command-internal/`; `tests/helpers/legacy-mocks.ts` becomes `command-mocks.ts` because `mocks.ts` already existed. - Where a CLI-tree service collides with a same-named `src/shared/` service, the CLI-tree one is qualified with `Command` rather than getting a new shell prefix: `CommandSettings` (was `LegacyCliSettings`), `CommandCredentials`, `CommandPlatformApi`. AGENTS.md documents this and marks the pairs as slated to consolidate. Other clash-driven names: `withCommandTelemetry` (vs shared `withCommandInstrumentation`), `AccessTokenRequiredError`, `ProjectRefNotLinkedError`, `GoOutputFormat`. - Wrappers and aliases that existed only to satisfy the prefix rule are deleted instead of renamed (`functions serve` re-exports, `usesSlimRuntime`, the `formatDebugId` alias). - Three variable shadows the rename would have introduced silently (`lang`, `globalFlagValues`, `resolved`) were caught with an oxlint `no-shadow` before/after diff and renamed. Genuine product concepts keep the word: `--legacy-bundle`, legacy API keys and signing keys, the pre-profile keyring account fallback, the pre-consent `telemetry.json` format, the migra "legacy engine" vs the pg-delta "next" engine, and the pg-delta legacy-tree export. ### The rule and the framing (`442bc60b1`) - `apps/cli/AGENTS.md`: the "Mandatory `Legacy`/`legacy` prefix on all exports" section is replaced by a short "Naming" section; the header note now says the prefix and both shell trees are gone; the `next/` dual-write and "legacy-only" guidance is removed. - README, CONTRIBUTING, the lint config comment, `packages/config/docs`, `SIDE_EFFECTS.md` files and ~300 code comments drop "legacy shell"/"legacy command" wording. ### The remaining shell plumbing (`994f75685`) - Compiled binary is `dist/supabase` (was `dist/supabase-legacy`). - `@supabase/cli-test-helpers`: `createHarness(options)` — the `CLITarget`/`CLI_HARNESS_TARGET` axis (`ts-legacy`/`ts-next`) is gone from the harness, `apps/cli-e2e`, `test.yml`, and the `live-e2e.yml` matrix. The harness always uses the profile-file path, which is the one the CLI actually reads. - `runSupabase`/`spawnSupabase` drop the `entrypoint: "legacy"` option (111 call sites). - `scripts/build.ts` drops `--shell`; the `shell` input is removed from `build-cli-artifacts`, `release-shared`, `release`, `release-smoke-test`, and `publish-preview-cli-packages`, and the artifact cache keys drop the shell segment on both the producer and consumer side. - `pnpm cli-release` drops `--legacy|--next`. It was also still compiling `src/<shell>/main.ts`, a path that stopped existing in #6486, so the local release ring works again. - `pnpm dev:legacy` → `pnpm dev`, `pnpm build:legacy` → `pnpm build:binary`. - `docs/platform-command-generation.md` (a `next/`-only feature) is deleted; the `next/`-only rows are dropped from `go-cli-divergences.md`; "`undefined` in `next`"-style comments in `shared/` are reworded to describe library callers. ## Reviewer notes - **User-visible:** `--output-format json` error `code` values are the tagged-error tags, so they lose the `Legacy` prefix (e.g. `LegacyPlatformAuthRequiredError` → `AccessTokenRequiredError`). Span names lose `legacy.` and service tags move, but neither leaves the machine. - The `Command*` qualifier for the three shared/CLI service pairs is the one naming judgment call worth a look; each is a single-token rename if a different name is preferred. - `@supabase/cli-go#lint:check` fails on this branch exactly as it does on `develop` under a current local golangci-lint (gosec G115/G118); no Go source is touched here.
`supabase experimental stack start` creates or resumes a managed stack for the current project and branch, with named-stack and explicit-ID targeting, Docker/native selection, and eager activation or background artifact preparation. Translate project configuration at the CLI boundary and embed the supervisor and native-process dispatch in the compiled binary. The stack package owns lifecycle and persistent state, and resolves PostgreSQL major versions through its release catalog. --------- Co-authored-by: Colum Ferry <cferry09@gmail.com>
…plates with 5 updates (#6533) Bumps the docker-minor group in /apps/cli-go/pkg/config/templates with 5 updates: | Package | From | To | | --- | --- | --- | | supabase/studio | `2026.08.24-sha-8ec45b2` | `2026.09.07-sha-7996410` | | supabase/edge-runtime | `v1.74.3` | `v1.76.2` | | supabase/realtime | `v2.130.0` | `v2.134.12` | | supabase/storage-api | `v1.72.1` | `v1.74.1` | | supabase/logflare | `1.50.6` | `1.50.11` | Updates `supabase/studio` from 2026.08.24-sha-8ec45b2 to 2026.09.07-sha-7996410 Updates `supabase/edge-runtime` from v1.74.3 to v1.76.2 Updates `supabase/realtime` from v2.130.0 to v2.134.12 Updates `supabase/storage-api` from v1.72.1 to v1.74.1 Updates `supabase/logflare` from 1.50.6 to 1.50.11 Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…dates (#6532) Bumps the go-minor group with 2 updates in the /apps/cli-go directory: [golang.org/x/mod](https://github.com/golang/mod) and [golang.org/x/oauth2](https://github.com/golang/oauth2). Bumps the go-minor group with 1 update in the /apps/cli-go/pkg directory: [golang.org/x/mod](https://github.com/golang/mod). Updates `golang.org/x/mod` from 0.40.0 to 0.41.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/golang/mod/commit/d0a27b2d4a48460806692bf5c87fc157c3c65292"><code>d0a27b2</code></a> modfile: fix Cleanup and DropTool documentation</li> <li><a href="https://github.com/golang/mod/commit/d12008c62d74c94d91b58e8bc6c3eb168eda8381"><code>d12008c</code></a> all: upgrade go directive to at least 1.26.0 [generated]</li> <li>See full diff in <a href="https://github.com/golang/mod/compare/v0.40.0...v0.41.0">compare view</a></li> </ul> </details> <br /> Updates `golang.org/x/oauth2` from 0.36.0 to 0.37.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/golang/oauth2/commit/c624b89dadc3221560b7345c090bbe69e90808ee"><code>c624b89</code></a> google: change the snake case endpoint to kebab-case</li> <li><a href="https://github.com/golang/oauth2/commit/09a82f63d4c718720369edfee3c7d0ff953c0b6f"><code>09a82f6</code></a> all: upgrade go directive to at least 1.26.0 [generated]</li> <li>See full diff in <a href="https://github.com/golang/oauth2/compare/v0.36.0...v0.37.0">compare view</a></li> </ul> </details> <br /> Updates `golang.org/x/mod` from 0.40.0 to 0.41.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/golang/mod/commit/d0a27b2d4a48460806692bf5c87fc157c3c65292"><code>d0a27b2</code></a> modfile: fix Cleanup and DropTool documentation</li> <li><a href="https://github.com/golang/mod/commit/d12008c62d74c94d91b58e8bc6c3eb168eda8381"><code>d12008c</code></a> all: upgrade go directive to at least 1.26.0 [generated]</li> <li>See full diff in <a href="https://github.com/golang/mod/compare/v0.40.0...v0.41.0">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…pps/cli-go/pkg/config/templates (#6534) Bumps supabase/postgres from 17.6.1.167 to 17.6.1.169. [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Port allocation could change an existing automatic assignment when an earlier listener was enabled, or let a fresh candidate collide with an exact or retained private assignment. Validate all retained and exact claims first, then acquire public listeners and temporary private reservations inside one registry transaction. Commit assignments once acquisition succeeds and let scopes release unsuccessful attempts, removing the probe/replan/rollback path. Use a shared, randomized port pool with bounded retries for occupied or inaccessible candidates. Allocate native listener resources separately for each Effect evaluation, avoid duplicate internal API listeners when a public wildcard already covers the address, and preflight only private bindings still requested by the candidate plan. Document the reservation guarantees and add a focused Bun CI matrix for macOS, Linux, and Windows.
## TL;DR fixes `supabase start` and `functions serve` dying since 2.116.0 with ``` failed to copy edge runtime main service into container: destination "supabase_edge_runtime_<id>:/" must be a directory ``` on projects whose functions import local workspace packages through import map directory mappings - the trigger is #6273 moving the bootstrap onto docker create + cp + start: the daemon refuses to resolve the copy target when a file bind is nested inside a read only parent bind - the overlapping binds themselves are much older, the import walker adds a file bind per imported module while import map target enumeration adds the package directory that already contains them, harmless until a cp step landed between create and start so now the mount list is pruned before `docker create`, a bind is dropped only when another bind of the same mode already supplies the same content at the same container path, so the container sees the same files at the same paths and the cp delivery from #6273 stays intact... ## ref: - closes: supabase/supabase#50088 - extends: #6273 --------- Co-authored-by: Colum Ferry <cferry09@gmail.com>
Derive stack identity from the canonical project root, Git branch context, and stack name. Supported parallel-stack use cases: - **A worktree per LLM chat session:** each distinct worktree directory gets a separate stack, including worktrees on the same branch or detached commit. - **Branch-specific stacks in one clone:** switching from `main` to `feat-a` selects a separate stack; switching back to `main` selects its previous stack. - **Multiple Supabase projects in a monorepo:** each project has its own project-root directory and therefore its own stack. - **Named stacks for one project:** different names create separate stacks within the same project and branch context, for both Git and non-Git projects. Repeated calls with the same canonical project root, branch context, and name select the same stack. An omitted name is `default`. Remove the redundant repository and checkout identity fields, common Git directory resolution, and ordinary-folder identity module. Moving a project selects a new stack. The unreleased private state uses the new hash directly without migration or legacy-hash support.
<!-- Before opening this PR, confirm the linked issue is open and carries the `open-for-contribution` label. PRs from external contributors that don't follow the workflow in CONTRIBUTING.md are closed automatically. @supabase members working from Linear tickets are exempt. --> ## Summary pnpm/pnpm#14557 is resolved so we no longer need the workaround in `.gitattributes` that i added in #6461 (but I kept it just in case and updated the comment accordingly). this pnpm bump should also speed up dependency resolution/installation.
…el (#6524) <!-- Before opening this PR, confirm the linked issue is open and carries the `open-for-contribution` label. PRs from external contributors that don't follow the workflow in CONTRIBUTING.md are closed automatically. @supabase members working from Linear tickets are exempt. --> ## Summary - Gate `pkg.pr.new` preview CLI package publishes behind the `run-preview-packages` label (re-publish on push while labeled; remove label to cancel). - Stop publishing on every ready `develop` PR and remove preview from the `run-ci` suite so large binaries are only uploaded when someone needs a shareable install. - Document the opt-in in `MAINTAINERS.md` and sync related workflow comments. ## Linked issue No linked GitHub issue (maintainer follow-up from Slack). - [x] The linked issue is **open** and carries the `open-for-contribution` label (or I'm a Supabase maintainer). ## Checklist - [x] The PR title follows [Conventional Commits](https://www.conventionalcommits.org/) (e.g. `fix(cli): …`). - [x] Tests added or updated for the change. - [x] From the repository root, `pnpm check:all` passes; relevant package tests pass for every touched workspace, and `pnpm types:check` passes for each touched TypeScript workspace (or workspace declaring it).
## What kind of change does this PR introduce? CI reliability fix. ## What is the current behavior? AI Review's Codex jobs (`codex-review`, `adjudicate`) intermittently hang and get killed on job timeout, discarding a completed review. Most recently: [run 34323125644](https://github.com/supabase/cli/actions/runs/34323125644) on #6535 died at ~55 minutes against a 45-minute timeout. This is a regression. #6380 deliberately pinned `openai/codex-action` to v1.11 because v1.12 had a confirmed hang bug (openai/codex-action#150). #6484 — a Dependabot `actions-major` group bump bundling 6 unrelated action updates — silently reverted that pin back to v1.12; the workflow's own comments (still saying "pinned to v1.11, NOT v1.12") went stale rather than catching the drift, since nothing diffed them against the actual `uses:` line. Checking upstream today turned up two separate, still-open v1.12 regressions, both matching this workflow's exact config (`safety-strategy: drop-sudo`, `sandbox: read-only`, `output-schema-file`): - openai/codex-action#151 — the v1.12 wrapper waits on the child process's `close` event with inherited stdio; a lingering descendant keeps the step alive forever after Codex has already written its output and finished. - openai/codex-action#160 — v1.12's `drop-sudo` rewrite chmods root-owned `/run` service sockets, breaking `systemd-resolved` on the GitHub-hosted runner itself, which kills the job 52-65 minutes in regardless of the job's own timeout — matching our job's 55-minute death exactly. Neither has a released fix. Both are action-level bugs independent of the pinned Codex CLI version (reproduced across CLI versions 0.147.0-0.150.1 in the upstream threads). This is not a diff-size or token-limit problem: #6535's diff was only ~2200 lines, and v1.11 has cleanly handled 130k-270k-token diffs in under 15 minutes per the upstream reports and our own prior testing. ## What is the new behavior? - Re-pin `openai/codex-action` to v1.11 (`52fe01ec70a42f454c9d2ebd47598f9fd6893d56`) in both Codex jobs — verified it's a safe drop-in, since v1.11's `action.yml` supports every input this workflow uses. - Refresh the stale inline comments to cite the actual issues (#151, #160) instead of just the original #150. - Add `openai/codex-action` to `.github/dependabot.yml`'s `ignore` list (no `update-types` restriction, so it blocks all automated bumps) so a grouped bump can't silently regress this pin again. Any future bump now requires a deliberate PR that checks the upstream changelog/issue tracker first.
….1 in /apps/cli-go in the go-minor group across 1 directory (#6539) Bumps the go-minor group with 1 update in the /apps/cli-go directory: [github.com/posthog/posthog-go](https://github.com/posthog/posthog-go). Updates `github.com/posthog/posthog-go` from 1.24.4 to 1.25.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/posthog/posthog-go/releases">github.com/posthog/posthog-go's releases</a>.</em></p> <blockquote> <h2>1.25.1</h2> <h2>Unreleased</h2> <h2>1.25.0</h2> <h2>Unreleased</h2> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/PostHog/posthog-go/blob/main/CHANGELOG.md">github.com/posthog/posthog-go's changelog</a>.</em></p> <blockquote> <h2>1.25.1</h2> <h3>Patch Changes</h3> <ul> <li>c159621: Fix <code>not_regex</code> local flag evaluation erroring on non-string/int property values. The <code>not_regex</code> operator used a manual string/int type switch and returned an error for other types, most notably <code>float64</code>, which is what JSON numbers deserialize to, so it failed on a numeric property value even though <code>regex</code> handled it. <code>not_regex</code> now coerces both sides with <code>valueToString</code>, mirroring <code>regex</code>. An explicit <code>nil</code> property value is represented as <code>null</code>, matching the feature flags evaluation service rather than Go's default <code><nil></code> representation.</li> </ul> <h2>1.25.0</h2> <h3>Minor Changes</h3> <ul> <li>897a0b4: Add the OpenTelemetry bridge for AI observability as an independently installable nested Go module.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/PostHog/posthog-go/commit/a5e539c68b8471a86dd746a4bff64601340f4e9f"><code>a5e539c</code></a> chore: release v1.25.1 [version bump] [skip ci]</li> <li><a href="https://github.com/PostHog/posthog-go/commit/c1596215af2b186a870871e2d169b198851ed150"><code>c159621</code></a> fix: not_regex should handle all value types like regex (<a href="https://redirect.github.com/posthog/posthog-go/issues/305">#305</a>)</li> <li><a href="https://github.com/PostHog/posthog-go/commit/50569874ea80f8f28f3318962668218d34eb9a64"><code>5056987</code></a> chore: release v1.25.0 [version bump] [skip ci]</li> <li><a href="https://github.com/PostHog/posthog-go/commit/897a0b4e5f2e9b49bc58b4ace7d5080502525b18"><code>897a0b4</code></a> feat: add OpenTelemetry bridge for AI observability (<a href="https://redirect.github.com/posthog/posthog-go/issues/306">#306</a>)</li> <li>See full diff in <a href="https://github.com/posthog/posthog-go/compare/v1.24.4...v1.25.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
`supabase experimental stack stop` stops the current or named managed stack, or an explicit stack ID, while preserving its identity and data. Selection works without loading project configuration, including when the config file has been removed or changed. Use the stack package’s lifecycle API and report whether a stack was found in both human and structured output. This PR builds on the experimental stack start integration.
## What kind of change does this PR introduce? CI reliability fix (follow-up to #6538). ## What is the current behavior? #6538 re-pinned `openai/codex-action` to v1.11 and added a Dependabot ignore entry scoped to `versions: ["1.12.x"]`, intending to still let Dependabot propose v1.13+ once the upstream hang bugs (openai/codex-action#151, #160) are fixed, while blocking the known-bad v1.12 line specifically. That scoping never actually worked. 9 minutes after #6538 merged, Dependabot opened #6541 proposing the exact v1.12 bump we were trying to block — config propagation wasn't the issue; the `versions` syntax was. The `github-actions` ecosystem's `ignore.versions` strings are parsed as Ruby `Gem::Requirement` (RubyGems comparator syntax: `>= x`, `~> x`, etc.), not npm-style semver ranges. `"1.12.x"` isn't a wildcard in that grammar — it parses as a literal version string with an implicit `=` operator, which never equals the real dependency version (`"1.12"`), so the ignore condition silently never matched anything. Verified directly against the actual parsing logic dependabot-core uses (`Dependabot::GithubActions::Requirement`, a thin wrapper around `Gem::Requirement`): ``` GithubActionsRequirement.new("1.12.x").satisfied_by?(Gem::Version.new("1.12")) # => false (bug) GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.12")) # => true GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.12.5")) # => true GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.11")) # => false GithubActionsRequirement.new(">= 1.12, < 1.13").satisfied_by?(Gem::Version.new("1.13")) # => false ``` ## What is the new behavior? Replace `versions: ["1.12.x"]` with `versions: [">= 1.12, < 1.13"]` — a real Gem::Requirement comparator range, confirmed to correctly match the 1.12 line (including any 1.12.x patch) while excluding v1.11 and v1.13+. #6541 should be closed as superseded once this merges.
…/cli-go/pkg/config/templates in the docker-minor group (#6545) Bumps the docker-minor group in /apps/cli-go/pkg/config/templates with 1 update: supabase/storage-api. Updates `supabase/storage-api` from v1.74.1 to v1.74.3 [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## TL;DR fixes custom auth email templates silently falling back to defaults on SELinux-enforcing hosts (Fedora/RHEL, rootless Podman) which was caused by the Kong email-template bind mounts carrying no SELinux relabel option, and is now fixed by mounting them `rw,z` ## ref: - closes: #6537
## Summary
Adds a new top-level `supabase pull` command that orchestrates the CLI's
existing pull-style subcommands — `config pull`, an optional `migration
fetch`, `db pull`, and `functions download` — behind one target
resolution, one confirmation, and one aggregated result. It exists for
two cases: bootstrapping a local checkout from an existing remote
project, and catching local files up after out-of-band
dashboard/teammate changes.
- Resolves the target project/branch once (`legacyResolveConfigTarget`)
and threads the resolved ref through each sub-step's existing
`--project-ref`-shaped input — no re-resolution, no duplicate network
calls.
- Runs sequentially (config → migration_history → db → functions),
refining ADR 0004's "runs in parallel" aspiration: `db pull` reads
`db.major_version` that `config pull` may have just written, and the
migration-history step's files are what `db pull` reconciles against.
- One confirmation covering all four steps — a real diff for config, a
qualitative description for the other three (none have preview machinery
of their own) — respecting `--dry-run`, `--yes`, `--force`, and a new
`--remote-label` (parity with `config pull`'s own escape hatch).
- Migration history is fetched automatically on a fresh checkout (empty
`supabase/migrations`), even without `--with-migration-history`, since
`db pull` otherwise hard-fails on that exact bootstrap case.
- Partial-failure isolation: one step failing doesn't stop the others
from running and being reported. A failed step's suggestion now includes
a "retry just this step" hint naming the exact standalone command with
the resolved ref, so a failure doesn't require re-running all four
steps.
- Extends the git-dirty guard to `supabase/migrations` and
`supabase/functions`, not just `config.toml` — `--force` now bypasses
all three.
- `--output-format json`/`stream-json` emit a single structured result
keyed by asset type (`steps: {config, migration_history, db,
functions}`), and exactly one `cli_command_executed` telemetry event
fires regardless of how many sub-steps ran.
- Storage bucket definitions are out of scope for v1 — the Management
API's bucket-list endpoint doesn't return the fields `storage.buckets`
config needs (BRA-268, unstarted upstream).
See `docs/adr/0024-top-level-pull-orchestration.md` for the full design
rationale and `apps/cli/src/commands/pull/SIDE_EFFECTS.md` for the
complete side-effect inventory — notably, the `db` step writes to the
*remote* migration history table (not just local files) and requires
Docker, both called out explicitly in the confirmation prompt.
## Reviewer-relevant context
This went through a 4-agent review pass
(architecture/engineering/security/DX) before this PR was opened, which
found and led to fixing several real issues in the implementation
history (the `--dry-run` preview being silently dropped, an
absolute-path leak in the JSON payload, a git-dirty-guard regression, an
undisclosed migration-overwrite path, and a `Layer.mergeAll` composition
whose documented rationale turned out to be empirically false — fixed by
eliminating the duplicate service binding rather than reordering).
Lower-severity findings from that review were triaged directly with the
ticket owner; some were fixed in follow-up commits on this branch (the
dirty-guard scope extension and the retry-hint feature), others were
judged not worth carrying forward and closed without action.
Fixes CLI-1272
## TL;DR fixes a flake where a fast exiting child races the parent's stdin write and rejects with EPIPE instead of the descriptive exit-code error ## ref: - spotted in: https://github.com/supabase/cli/actions/runs/34261833658/job/102181439072 & many more runs.....
## TL;DR fixes `seed buckets`, `db reset` and `storage --local` getting rejected by the local storage gateway when `SUPABASE_AUTH_JWT_SECRET` or `SUPABASE_AUTH_SERVICE_ROLE_KEY` comes from `supabase/.env` or is stored as an `encrypted:` value... ## whats broken? `supabase start` resolves `auth.jwt_secret` and `auth.service_role_key` through the env/dotenv override and decrypt path, but the shared storage credentials resolver reads the two vars from the shell env only and uses an `encrypted:` value as literal key material. a key set in `supabase/.env` starts the stack with one service-role key while `seed buckets` and `storage ls` sign with another, and the gateway returns 401. on `db reset` that lands after the migrations already ran... ## now fixed by: resolving both fields in `resolveLocalServiceRoleKey` through the same `legacyEnvOverride` -> `legacyDecryptAuthSecret` composition the `start`/`status`/`stop` resolver already applies to them, over the dotenv map the resolver already loads. the same checks now also run on the `seed buckets` no-op path (nothing configured to seed) which previously exited 0 without reading `[auth]`: a short `auth.jwt_secret` or an undecryptable `encrypted:` value now exits 1 there with the config error `start` already raises. `--linked` is untouched. ## ref: - closes: CLI-2349 - extends: #6467
Expose the new local runtime as `supabase stack start|stop`. Projects can opt top-level `start` and `stop` into that runtime with `[experimental] stack = true` in `supabase/config.toml`, or override it with `SUPABASE_EXPERIMENTAL_STACK=1|0`. Selection happens before argument parsing and completion, preserving each implementation’s flags and the invoked command’s telemetry identity. Unreadable or invalid routing config defaults to the legacy command tree; explicit environment overrides take precedence, and each command retains its own execution-time config validation. The shared experimental flag resolver is reusable for the later workers migration. `status` keeps its existing implementation and `experimental workers` remains available. The two stack backends retain separate state and databases; enabling the flag does not migrate existing data. The flag is excluded from hosted project configuration and accepted as a TypeScript-owned field by the Go sidecar. Extracts the start/stop portion of #6516 onto `develop` after #6507, so it can merge independently of the remaining stack commands. Regenerates the published configuration schemas, including previously stale auth fields already present in the source schemas. Refreshes stale Go config fixtures to match the current serializer and schema.
…pps/cli-go/pkg/config/templates (#6550) Bumps supabase/postgres from 17.6.1.169 to 17.6.1.170. [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Live staging tests currently run independently of stable publication, so a stable release can ship without a passing live suite for its commit. Run the suite after every push to `develop` and every night, with superseded push runs cancelled independently of scheduled and manual runs. Stable publication, including manual releases, requires a passing suite for the exact release commit: reuse a verified successful run on `develop`, or run the suite before publishing. Beta releases retain their existing gates. Send staging startup failures and failure/recovery transitions through the existing Slack release webhook, linking the commit and logs. A bounded history lookup suppresses repeated outcomes and notifications superseded by newer runs or attempts. Stable-gate failures use the existing release-failure notification to avoid duplicate alerts; notification delivery remains independent of publication. Forward only the staging access token through the live workflow calls, bound job runtimes, and document the reuse and concurrency policy in the maintainers guide. Existing opt-in PR Supabox coverage is unchanged.
## What and why Adds `supabase whoami`, a read-only command that fetches the active user's Management API profile. Text output presents clear user-facing labels, while JSON and stream-JSON expose the stable `id`, `email`, and `username` fields instead of leaking API-specific field names. Linear: [CLI-1280](https://linear.app/supabase/issue/CLI-1280/add-a-whoami-command) ## Usage ```console $ supabase whoami USER ID USERNAME EMAIL 00000000-0000-0000-0000-000000000000 example user@example.com ``` ```console $ supabase whoami --output-format json {"id":"00000000-0000-0000-0000-000000000000","email":"user@example.com","username":"example"} ``` Stream-JSON emits the same identity object under a standard `result.data` envelope. ## Testing strategy Handler integration coverage exercises the Management API request, all output modes, transport/status/decoding failures, unsupported legacy output flags, machine-mode progress behavior, and telemetry flushing. Focused formatter unit coverage protects text rendering, with the full CLI unit and integration suites covering workspace interactions. ## Review The complete branch diff was reviewed for correctness, test coverage and failure behavior, and scope and maintainability. Follow-up findings were closed by removing externally mutating live coverage, tightening machine-output and failure assertions, documenting inherited filesystem/environment/telemetry behavior, and normalizing the public JSON contract.
…6535) Restore existing configuration behavior in `supabase experimental stack start`: apply supported automatic `SUPABASE_*` overrides using the shared configuration resolvers, and decrypt dotenvx `encrypted:` secrets before passing them to the stack. Overrides retain shell and project dotenv precedence, optional-section semantics, and dynamic listener allocation when no port is explicitly supplied. The CLI applies overrides to the complete configuration and calls `validateCliConfig` from `@supabase/config/effect` before projecting the validated values into stack settings. Loading and revalidation share the package's existing rules; this adds no new validation rules. Consumed secrets are decrypted at the stack boundary. Decryption supports base, suffixed, and comma-separated private keys and reports configuration errors without exposing secret values. Follow-up to #6506, implementing the requests in [encrypted-secret handling](#6506 (comment)) and [automatic environment overrides](#6506 (comment)). Update command help and side-effect documentation to describe the restored behavior. --------- Co-authored-by: Andrew Valleteau <avallete@users.noreply.github.com>
## Problem
The string passed to `Data.TaggedError("...")` is an error's telemetry
identity: it flows into `error_fingerprint` on the
`cli_command_executed` PostHog event as `tag:<TagName>`. It is
independent of the class name — they only match by convention.
A recent refactor renamed every error class **and** changed the tag
literal along with it, dropping a `Legacy` prefix. That silently split
error identities in PostHog: the same error now reports under two
different fingerprints depending on which CLI version emitted it.
This is not hypothetical. Measured in PostHog over 30 days:
| | |
|---|---|
| distinct legacy identifiers affected | 327 |
| share of failure volume still emitting `Legacy*` names | ~90% |
| pairs already visibly split in production | 28 |
Nothing failed. No error, no warning — the old fingerprint just goes
quiet and a new one appears, so a renamed error looks like it was fixed
and then immediately regressed. Repeat-rate and trend continuity break
silently, and it can't be repaired retroactively once a baseline is
published against the split data.
Old CLI versions stay installed for months, so both names will keep
arriving indefinitely.
## What this PR does
Prevents a recurrence. It does **not** revert the rename or change any
runtime behaviour — there are no production code changes here.
- **`apps/cli/src/shared/telemetry/error-tag-stability.unit.test.ts`** —
enumerates every `Data.TaggedError("...")` declaration under
`apps/cli/src` and compares the tag set against a committed snapshot.
Fails when a literal is added, removed, or changed, with a message
explaining the PostHog consequence and the fix (rename the class, keep
the literal). Also asserts no two differently-named production classes
share a tag.
- **`__fixtures__/error-tags.txt`** — the committed snapshot, 533 tag
literals.
- **`AGENTS.md`** — one bullet under *Typed failures and tagged values*
stating the rule and pointing at the enforcing test.
The extraction handles the formatter's multi-line declaration form. This
matters: a naive single-line regex finds only 373 of the 533 tags, and a
snapshot built from that would silently fail to protect ~160 errors.
## Data-side fix (already done, not in this PR)
A `cli_command_failures_normalized` view in PostHog normalizes the
existing split via a single regex — 313 of the 327 legacy identifiers
map by pure prefix strip, and the 14 that don't are deleted classes
covering ~0.011% of events. That handles history; this PR stops it
happening again.
## Verification
- `bun --bun vitest run --project unit -t "error tag stability"` — 2
passed.
- Full unit suite — 328 files, 5821 passed, 1 skipped (unrelated,
pre-existing).
- Deliberate regression check: changing one tag literal makes the test
fail with the expected `added`/`removed` diff; reverting makes it pass.
## Known gap
The uniqueness assertion only catches *differently-named* classes
sharing a tag. Two identically-named classes in separate files sharing
one tag passes — this exists today (`InvalidFunctionSlugError` in
`functions/delete.errors.ts` and `functions/download.errors.ts`). Those
two are indistinguishable in `error_fingerprint`. Left as-is
deliberately since they represent the same conceptual error, but
flagging it rather than leaving it implicit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Refactors stack tests into focused scenarios with shared setup fixtures and structural assertions against observable outcomes. Separates configuration, lifecycle, and cleanup cases; replaces generated-text checks with parsing or execution; removes redundant coverage and strengthens previously vacuous checks. The whole-stack E2E journey now has named service and restart phases. The Functions bundle smoke test moves to integration coverage because it executes the emitted module.
Follow-up to #6535 addressing the late review comments. Apply JWT secret, issuer, and signing-key path environment overrides even when Auth is disabled, since the API still consumes the stack's JWT security settings. Continue skipping unused Auth provider secrets. Omit the SMTP resolver's missing-port sentinel before configuration validation so enabling SMTP through the environment requires a port. Use the existing environment helpers directly, share the stack configuration test fixture, and clarify that secret resolution is gated by capabilities rather than individual providers.
This PR was automatically created to sync API types from the infrastructure repository. Changes were detected after refreshing `apps/cli-go/api/v1-openapi.yaml` from the latest spec from infrastructure, and `apps/cli-go/pkg/api` is regenerated from it. The snapshot diff is the upstream API change and is worth reading: it is marked `linguist-generated`, so GitHub collapses it behind a "Load diff" click rather than hiding it. Co-authored-by: supabase-cli-releaser[bot] <246109035+supabase-cli-releaser[bot]@users.noreply.github.com>
## TL;DR `db start` no longer hangs forever when the `docker` CLI binary stalls: the already-running check now asks the Docker Engine API directly. ## What's hurting the users? Since v2.110.0 the check spawns `docker container inspect` and waits on it. If that binary hangs, `db start` shows nothing, starts nothing, and never exits (#6110). v2.109.1 was immune because it called the Engine API instead of spawning a subprocess... ## Now fixed by The probe resolves the daemon endpoint the same way the docker CLI does (`DOCKER_HOST`, then the context store, then the platform default) and sends `GET /containers/<id>/json` over the local socket or named pipe. anything that is not a clean Engine 200 or 404 falls back to the old spawn path, so error messages, daemon-down handling, and Podman support stay exactly as they are today. `db reset --local`, `db diff --use-pgadmin`, and the declarative flows share the same probe and get the same fix... ## Ref - Closes #6110 - Regressed by #5715
…plates with 2 updates (#6549) > [!WARNING] > Cooldown could not be applied because no publication date was available from the registry. > Bumps the docker-minor group in /apps/cli-go/pkg/config/templates with 2 updates: supabase/gotrue and supabase/storage-api. Updates `supabase/gotrue` from v2.196.0 to v2.197.0 Updates `supabase/storage-api` from v1.74.3 to v1.75.0 Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Julien Goux <hi@jgoux.dev>
## What changed - **Comment policy.** The root `AGENTS.md` gains a `## Comments` section: comments state the why the code cannot carry, exported symbols get a one-sentence JSDoc summary, inline comments stay at one to three lines, and provenance (Go `file.go:NN` citations, ticket and PR numbers, review-round notes, "verified empirically" trails), narration, emphasis, section banners, and meta-commentary are out. Directive comments and tool-facing JSDoc tags (`@public` for knip, `@internal`, `@deprecated`) are kept verbatim. `apps/cli/AGENTS.md` cross-references it from its Go-parity guidance. - **Repo-wide comments-only pass** applying that policy across `apps/cli`, `packages/config`, `packages/stack`, `apps/cli-e2e`, tooling scripts, GitHub workflow YAML, and JSONC configs. Comment lines drop from roughly 60.5k to 31.4k, and non-test source goes from about a 31% comment-to-code ratio to about 18%. Comments that documented a genuine invariant, an external quirk, or a decision that would otherwise read as a bug were kept and compressed; everything that was an author's audit trail was removed. ## Why The existing comments were technically accurate but written as an audit trail rather than for the next reader: multi-paragraph blocks citing Go source line numbers, ticket IDs, review rounds, and empirical verification steps. At that density a human skips them entirely, which defeats the point, and they inflate the token cost of every file an agent reads. The policy exists so the pattern does not grow back. ## Reviewer notes - No code changes are intended anywhere. Every changed TypeScript file was checked by parsing both versions and comparing the reprinted, comment-free output against `develop`; YAML and JSONC files were parsed and compared as data. One `@public` JSDoc tag that knip depends on was caught and kept by this check. - Commits are organised per directory shard, so reviewing commit by commit is practical; the policy is the first commit, and the final commits are small follow-up tightenings plus a merge of `develop`. - Test **names** were out of scope because they are strings, and many still carry `(Go parity)`, PR-number, and review-ID suffixes. That is queued as a separate change. - `packages/config` ships its compiled output with `tsc`, so its published JavaScript carried the full comment volume; the CLI binary was unaffected because `bun build` strips comments.
…6554) Replace `supabase experimental workers` with `supabase compute`, registered only when `experimental.compute` or `SUPABASE_EXPERIMENTAL_COMPUTE=1` enables it. Without opt-in, Compute is absent from help, completion, and direct invocation. Rename the local implementation, symbols, configuration, templates, storage paths, and error identities to Compute, including `[compute.<name>]` and `supabase/compute/<name>/`. Workers shipped experimentally in v2.117.0. This transition intentionally makes a clean break: no aliases, legacy config passthrough, or migrations are required for the retired local names. Compute error tags intentionally start new telemetry fingerprints. Remove the `experimental` command namespace. Keep the Compute and Stack implementations under `src/commands/experimental/` for source organization; the root command owns their public paths and feature-flag registration. Keep server-owned Workers endpoints, generated API contracts, invocation URLs, and log identifiers unchanged until the backend adopts Compute naming. Enable Effect linting across the Compute commands, shared runtime, and test fixture helper. Use Effect services for scaffold loading, filesystem paths, clocks, and JSON decoding, with typed archive errors and scoped test fixtures. Embedded application templates are excluded from CLI runtime linting; the formatter test retains a narrow native-Date exception as an independent local-time oracle. Reject invalid Compute environment opt-ins on applicable command paths. Refuse scaffolding when JSON is the authoritative configuration, and require explicit exposure when deploying a source directory without a Compute config entry, so ignored or missing settings cannot silently select public access.
#5988) ## What Adds a TS-only `supabase feedback` command family (from the [original brainstorm](https://supabase.slack.com/archives/C0BAGJBL49E/p1784320045234149)) so users — and agents — can send quick, low-friction feedback to the Supabase team without filing a GitHub issue, and revoke a submission later (e.g. an accidentally pasted secret): ```sh supabase feedback add "when I run multiple stacks in parallel I get port conflicts" # → Thanks for the feedback! # → To delete this feedback later, run: supabase feedback delete <token> supabase feedback delete 123e4567-e89b-12d3-a456-426614174000 ``` Part of [CLI-1946](https://linear.app/supabase/issue/CLI-1946); the delete command is [CLI-2188](https://linear.app/supabase/issue/CLI-2188). Scope evolved in [this thread](https://supabase.slack.com/archives/C07E5GFAHTM/p1785303671170249): `feedback add` (no `btw` alias) plus a token-based delete path, rather than full user-scoped CRUD. ## How `feedback add` works - **Message resolution**: positional args → piped stdin (non-TTY) → interactive prompt (TTY, text mode) → error. Messages starting with a dash use the `--` sentinel. Piped stdin is read in constant memory with a 64 KB cap; a read error mid-pipe discards the partial buffer rather than submitting a truncated message. Messages over the 1000-character limit are rejected client-side (counted in code points, matching Postgres `char_length`). - **Transport**: submits through the `SECURITY DEFINER` RPC `submit_interfaces_feedback` (supabase/supabase#48420) via `supabase-js` — the table has no insert grant, so the RPC is the only door and the delete token is always server-generated. The committed keys are publishable (anon) keys, safe to ship in the binary. 10s timeout. - **Delete token**: the RPC returns a uuid `delete_token` exactly once. Text mode prints it with a "to delete this later" hint (including `--project-ref <ref>` when the submission carried one, since the row can only be deleted with that ref presented); `json`/`stream-json` carry it as `delete_token` in the result payload. The CLI never persists it. - **Submission context**: CLI version, user agent, OS/arch, agent detection (`is_agent`/`agent_name` via `@vercel/detect-agent`, to support the activation analysis in AI-961), and the linked project ref. `metadata.source: "cli"` distinguishes CLI rows from the future MCP path. The access token is never sent. The persisted gotrue user id (`distinct_id` in `telemetry.json`, stamped at login) is sent as `user_id` **only** when the user is logged in and telemetry consent is granted — best-effort attribution; logged-out or opted-out runs omit it. A row submitted with a `user_id` can only be deleted by the same account. - **Project ref resolution**: `SUPABASE_PROJECT_ID` → `<workdir>/supabase/.temp/project-ref` (the file `supabase link` writes) → omitted. A malformed `SUPABASE_PROJECT_ID` fails with the shared invalid-ref error, like every other command's explicit ref. The file is read directly (not via `ProjectRefResolver`, whose prompt path needs the platform API) so feedback works logged-out; a broken or malformed ref file degrades to "unlinked". - **Environments**: the feedback backend follows the resolved profile the same way the Management API URL does. `supabase-staging`/`supabase-local` post to the persistent staging branch of the feedback project; every other profile (including YAML-file profiles) posts to the production feedback project. Connection constants live in `src/shared/feedback/feedback-client.layer.ts`. ## How `feedback delete <token>` works - **Validation**: the token must be a UUID (checked client-side to avoid PostgREST's cryptic uuid-cast error) and is lowercased before sending. - **No read, ever**: the CLI never fetches the feedback text. Deleting is harmless to the user (the row exists for Supabase's benefit), so nothing is shown first; the only request is the DELETE below. With no client reading rows, the backend's anon read path has nothing to serve and is removed in a follow-up ([CLI-2406](https://linear.app/supabase/issue/CLI-2406)). The delete policy is unchanged. - **Confirmation**: interactive text mode prompts (`Permanently delete this feedback? [y/N]`) as the guard against a mistyped or pasted token; `--yes`/`SUPABASE_YES` skips it. The prompt runs before the row's existence is known, so a wrong token gets the prompt and then the not-found error. Machine modes (`json`/`stream-json`, and `-o json`) fail loudly without `--yes` rather than deleting silently — same contract as `logout`. Both stdin and stdout must be TTYs for the prompt, so `printf 'y' | supabase feedback delete <token>` cannot confirm a delete without `--yes`. - **Deletion**: a hard `DELETE` with `Prefer: count=exact`; the CLI verifies `Content-Range` reports exactly one row. Zero rows → a friendly not-found error covering all three indistinguishable causes (wrong token, already deleted, project-ref/user-id context mismatch). Authorization is the `x-feedback-token` request header matched by RLS — the `delete_token=eq.` URL filter only satisfies PostgREST's filterless-delete rejection. `--debug` request lines redact the filter. - **Context gate**: rows submitted from a linked project also require the matching `x-feedback-project-ref` header, and rows submitted while logged in require `x-feedback-user-id`. The delete command resolves the ref as `--project-ref` → `SUPABASE_PROJECT_ID` → linked-ref file (flag and env validated, file soft) and always sends whatever resolves (extra context against a context-free row is ignored server-side). The user-id header is not consent-gated: it is functional auth context, and gating it would strand rows submitted before an opt-out. - Machine modes return an acknowledgement only: `--output-format json` gives `{ "message": "Feedback deleted." }`, `-o json` gives `{ "deleted": true }`. ## Privacy note for reviewers The feedback message, the delete token, and the `--project-ref` value go **only** to the feedback backend — never to PostHog. Message and token are positional arguments, which `extractChangedFlagNames` structurally excludes from the `flags` telemetry property; `--project-ref` is recorded by name only with its value redacted. Regression tests assert none of them appear in captured analytics events. `user_id` is sent to the feedback backend under the conditions above and is documented in `add/SIDE_EFFECTS.md`. ## Reviewer-relevant context - The shared service was reshaped from `FeedbackSubmitter` (insert-only) into `FeedbackClient` (`submit`/`delete`) in `src/shared/feedback/feedback-client.{service,layer}.ts`, and the profile→environment mapping and cli-config layer wiring were hoisted to the feedback family root (`feedback.layers.ts`, `feedback-project-ref.ts`) now that two commands share them. - `FeedbackBackendError` carries a `reason` (`response` vs `transport`) so a PostgREST rejection classifies as `apiStatus` in error telemetry while network failures stay `externalNetwork`. postgrest-js reports fetch rejections, timeouts, and aborts as an error envelope with `status: 0`, which is the discriminator. - The feedback client speaks `fetch` (supabase-js), not Effect's `HttpClient`, so `--debug` logging and `--dns-resolver https` compose at the fetch boundary (`feedbackFetch`). Along the way the shared DoH wrapper gained two fixes that apply to every command: WHATWG `Headers` instances survive the rewrite, and the request's abort signal now cancels the DoH lookup itself. - `src/shared/feedback/database.types.ts` is generated (`pnpm gen:feedback-types`, from the production project) and excluded from formatting/knip; it is marked `linguist-generated`. - The real-backend golden path (add → delete round trip against the staging branch, cleaning up its own row) is `add.live.test.ts` under the gated live project. The default e2e file only exercises subcommand routing with zero network. - The commands are registered in `docs-spec.tables.ts` (`other-commands` tag) and each has a `SIDE_EFFECTS.md`. - **Heads-up on `CommandSettings.projectId`**: it is a bare `SUPABASE_PROJECT_ID` env passthrough — it does not read `config.toml` or the linked-project file, so it is `None` in a linked project unless that env var is set. An earlier revision of this branch used it directly as "the linked project ref", which meant `project_ref` was always `null` in practice. The agent-guide row that described it as resolving project-id from `config.toml` was corrected here, since that phrasing is what made the field look project-aware. - `services.integration.test.ts` now uses an isolated temp workdir instead of `process.cwd()`, fixing machine-dependent behavior when the developer has local `supabase start` state. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Colum Ferry <cferry09@gmail.com>
….3 to 10.30.4 in /apps/cli-go in the go-minor group across 1 directory (#6565) Bumps the go-minor group with 1 update in the /apps/cli-go directory: [github.com/go-playground/validator/v10](https://github.com/go-playground/validator). Updates `github.com/go-playground/validator/v10` from 10.30.3 to 10.30.4 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/go-playground/validator/releases">github.com/go-playground/validator/v10's releases</a>.</em></p> <blockquote> <h2>v10.30.4</h2> <h2>What's Changed</h2> <ul> <li>Add English translations for prefix and suffix validators by <a href="https://github.com/morning-verlu"><code>@morning-verlu</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1583">go-playground/validator#1583</a></li> <li>chore(deps): bump golang.org/x/crypto from 0.52.0 to 0.53.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1589">go-playground/validator#1589</a></li> <li>chore(deps): bump actions/checkout from 6 to 7 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1591">go-playground/validator#1591</a></li> <li>chore(deps): bump golang.org/x/net from 0.38.0 to 0.55.0 in /_examples/validate_fn by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1593">go-playground/validator#1593</a></li> <li>chore(deps): bump golang.org/x/crypto from 0.53.0 to 0.54.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1598">go-playground/validator#1598</a></li> <li>chore(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 in /_examples/validate_fn by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1597">go-playground/validator#1597</a></li> <li>feat: URN RFC 8141 by <a href="https://github.com/leodido"><code>@leodido</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1224">go-playground/validator#1224</a></li> <li>chore(deps): bump actions/setup-go from 6 to 7 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1601">go-playground/validator#1601</a></li> <li>chore(deps): bump github.com/leodido/go-urn from 1.4.0 to 1.5.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1606">go-playground/validator#1606</a></li> <li>chore(deps): bump github.com/gabriel-vasile/mimetype from 1.4.13 to 1.4.15 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1605">go-playground/validator#1605</a></li> <li>fix(fqdn): enforce maximum DNS name length by <a href="https://github.com/matheusgb"><code>@matheusgb</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1603">go-playground/validator#1603</a></li> <li>fix: use idiomatic "at most" in English max/lte messages by <a href="https://github.com/snowyukitty"><code>@snowyukitty</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1600">go-playground/validator#1600</a></li> <li>chore(deps): bump golang.org/x/crypto from 0.54.0 to 0.55.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/go-playground/validator/pull/1612">go-playground/validator#1612</a></li> <li>test: cover startsnotwith/endsnotwith, RegisterStructValidationMapRules, and float32 comparator branches by <a href="https://github.com/nguyenvantuan2391996"><code>@nguyenvantuan2391996</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1609">go-playground/validator#1609</a></li> <li>docs: clarify fieldexcludes behavior by <a href="https://github.com/1678092075"><code>@1678092075</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1610">go-playground/validator#1610</a></li> <li>feat(translations): add Armenian translations by <a href="https://github.com/tigran90"><code>@tigran90</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1604">go-playground/validator#1604</a></li> <li>ci: Fix the linter version by <a href="https://github.com/zemzale"><code>@zemzale</code></a> in <a href="https://redirect.github.com/go-playground/validator/pull/1617">go-playground/validator#1617</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/morning-verlu"><code>@morning-verlu</code></a> made their first contribution in <a href="https://redirect.github.com/go-playground/validator/pull/1583">go-playground/validator#1583</a></li> <li><a href="https://github.com/matheusgb"><code>@matheusgb</code></a> made their first contribution in <a href="https://redirect.github.com/go-playground/validator/pull/1603">go-playground/validator#1603</a></li> <li><a href="https://github.com/snowyukitty"><code>@snowyukitty</code></a> made their first contribution in <a href="https://redirect.github.com/go-playground/validator/pull/1600">go-playground/validator#1600</a></li> <li><a href="https://github.com/nguyenvantuan2391996"><code>@nguyenvantuan2391996</code></a> made their first contribution in <a href="https://redirect.github.com/go-playground/validator/pull/1609">go-playground/validator#1609</a></li> <li><a href="https://github.com/1678092075"><code>@1678092075</code></a> made their first contribution in <a href="https://redirect.github.com/go-playground/validator/pull/1610">go-playground/validator#1610</a></li> <li><a href="https://github.com/tigran90"><code>@tigran90</code></a> made their first contribution in <a href="https://redirect.github.com/go-playground/validator/pull/1604">go-playground/validator#1604</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/go-playground/validator/compare/v10.30.3...v10.30.4">https://github.com/go-playground/validator/compare/v10.30.3...v10.30.4</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/go-playground/validator/commit/dfe35cf8317892133dfe31e36054dcbf36aab604"><code>dfe35cf</code></a> ci: Fix the linter version (<a href="https://redirect.github.com/go-playground/validator/issues/1617">#1617</a>)</li> <li><a href="https://github.com/go-playground/validator/commit/facf128d2eecf42bd4ff447adc961aa21bb64aed"><code>facf128</code></a> feat(translations): add Armenian translations (<a href="https://redirect.github.com/go-playground/validator/issues/1604">#1604</a>)</li> <li><a href="https://github.com/go-playground/validator/commit/961375b9290b3515001e02bfd4556229fe2a197f"><code>961375b</code></a> docs: clarify fieldexcludes behavior (<a href="https://redirect.github.com/go-playground/validator/issues/1610">#1610</a>)</li> <li><a href="https://github.com/go-playground/validator/commit/74dd82a07957cd6f7397b774cddeb048f1f47ad4"><code>74dd82a</code></a> test: cover startsnotwith/endsnotwith, RegisterStructValidationMapRules, and ...</li> <li><a href="https://github.com/go-playground/validator/commit/379edc84de2b611815bba450d91fb4be95b98c73"><code>379edc8</code></a> chore(deps): bump golang.org/x/crypto from 0.54.0 to 0.55.0 (<a href="https://redirect.github.com/go-playground/validator/issues/1612">#1612</a>)</li> <li><a href="https://github.com/go-playground/validator/commit/f9944c589984dbf83a3991a4a828e8900b23ad3a"><code>f9944c5</code></a> fix: use idiomatic "at most" in English max/lte messages (<a href="https://redirect.github.com/go-playground/validator/issues/1600">#1600</a>)</li> <li><a href="https://github.com/go-playground/validator/commit/67e37d6699d53eb2fbd7718575261b48d7870edb"><code>67e37d6</code></a> fix(fqdn): enforce maximum DNS name length (<a href="https://redirect.github.com/go-playground/validator/issues/1603">#1603</a>)</li> <li><a href="https://github.com/go-playground/validator/commit/6b571d109bded7cdcde5ba9f226a923a8765b92a"><code>6b571d1</code></a> chore(deps): bump github.com/gabriel-vasile/mimetype from 1.4.13 to 1.4.15 (#...</li> <li><a href="https://github.com/go-playground/validator/commit/8455180763f1b941ed8cfe82ee18a4fd875e9ac0"><code>8455180</code></a> chore(deps): bump github.com/leodido/go-urn from 1.4.0 to 1.5.0 (<a href="https://redirect.github.com/go-playground/validator/issues/1606">#1606</a>)</li> <li><a href="https://github.com/go-playground/validator/commit/fd8bd3c9d513cd1d29e495974fa07dba7a2b5936"><code>fd8bd3c</code></a> chore(deps): bump actions/setup-go from 6 to 7 (<a href="https://redirect.github.com/go-playground/validator/issues/1601">#1601</a>)</li> <li>Additional commits viewable in <a href="https://github.com/go-playground/validator/compare/v10.30.3...v10.30.4">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…plates with 2 updates (#6566) > [!WARNING] > Cooldown could not be applied because no publication date was available from the registry. > Bumps the docker-minor group in /apps/cli-go/pkg/config/templates with 2 updates: supabase/supavisor and supabase/storage-api. Updates `supabase/supavisor` from 2.9.12 to 2.9.13 Updates `supabase/storage-api` from v1.75.0 to v1.76.2 Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[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.
branchesget, update and disable (CLI-2327) (test(cli): coverbranchesget, update and disable (CLI-2327) #6492)--log-levelvalue (CLI-2329) (fix(cli): consume--log-levelvalue (CLI-2329) #6483)network-restrictionsget and update (CLI-2288) (test(cli): covernetwork-restrictionsget and update (CLI-2288) #6478)