Skip to content

chore(repo): sync develop into next - #7307

Open
supabase-cli-releaser[bot] wants to merge 3 commits into
nextfrom
sync/develop-into-next
Open

supabase-cli-releaser[bot] wants to merge 3 commits into
nextfrom
sync/develop-into-next

Conversation

@supabase-cli-releaser

Copy link
Copy Markdown
Contributor

Merging develop into next conflicts. This branch starts at the tip of develop (e125d0f); next is at 1b04c31.

Conflicting files:

  • .github/workflows/cli-go-ci.yml
  • .github/workflows/cli-go-tag-pkg.yml
  • apps/cli/docs/release-process.md
  • mise.toml

To resolve:

git fetch origin
git switch sync/develop-into-next
git merge origin/next
# resolve the conflicts, then commit
git push origin sync/develop-into-next

Approve to fast-forward next; do not use the merge button.

kanadgupta and others added 2 commits October 23, 2026 14:40
## Toolchain bumps

- Bumps pnpm, node, bun, and mise. `mise.lock` and `pnpm-lock.yaml` are
updated to match.
- Updates the mise version pinned in each GitHub Actions workflow.
- Drops `pnpm exec` from `bun` commands. The toolchain setup already
puts bun on `PATH`, so running it through pnpm only added a process hop
and a pnpm lookup. Calling bun directly removes that overhead and
complexity.

## Workflow changes

### flaky-check installs bun with `oven-sh/setup-bun`

Its plan and report jobs only need bun. setup-bun restores a 34 MB cache
with just the bun binary. mise-action restored a 68 MB mise data
directory and then ran a locked install and a listing on top, which took
about twice as long on a cache hit. Every other bun-only step in the
repository already uses setup-bun, so this makes them consistent.

### `jdx/mise-action` moves from v4.3.0 to v5.2.2

What we gain:

- **The mise binary is verified before it runs.** A downloaded binary is
checked against the release's signed manifest, and a binary restored
from cache is checked against the signed release checksums. Before, a
cached binary could run unchecked.
- **The job's GitHub token stays inside the action.** v4 wrote it to the
environment of every later step. Now only the action sees it.
- **Caches rebuild every 30 days.** GitHub never evicts a cache that
keeps getting hits, so a busy repository could keep the same tools for
months. The default key now rolls over on a schedule.

What does not change for us: every step pins a mise version, so the new
release-age default does not apply, and the pinned mise ships the signed
manifest the action now requires.

One thing to expect: the default cache key format changed, so each mise
cache misses once after this lands. The sync check job runs `mise
install` in a later step. It no longer gets the token, but it fetches
release metadata through mise's own relay and downloads assets directly
from GitHub releases, so it never used the token.

### The shared setup action drops its custom `cache_key`

The custom key hashed `mise.toml`, `mise.lock`, `.node-version`,
`.bun-version`, and `package.json`. mise-action's default key already
covers `mise.toml` and `mise.lock`, plus the requested tool subset, the
runner image, and the mise version. The lockfile pins the node, bun, and
pnpm versions the version files select, and a locked install refuses any
version the lockfile does not have. So the extra hashes could not catch
anything the lockfile hash misses, and the default key is strictly
better.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Stacked on #7285.

## Bump

- `jactionlint` moves from 1.8.2 to 2.3.0 (`"2"` in mise.toml, pinned in
`mise.lock`).
- The config's deprecated `require-commit-hash` key becomes `rules:
unpinned-uses: error`, the vendored `.repos/**` submodules are excluded,
and the `missing-timeout` and `concurrency-limits` policy rules are
turned off.

## Fixes, one commit per rule

- **excessive-permissions**: single-job workflows grant their write
scopes on the job instead of the workflow. contribution-gate grants both
jobs the scopes its script needs. release-smoke-test's caller job keeps
the four scopes release-shared's job tree declares.
- **github-app**: the three release-notes App tokens request only the
permissions their jobs use, confirmed against GitHub's REST permission
tables.
- **superfluous-actions**: both `softprops/action-gh-release` steps
become `gh release create`, skipping when the release already exists and
verifying the tag the earlier step pushed.
- **pipeline-without-pipefail**, **github-env**, **artipacked**,
**unused-job-output**: small mechanical fixes.

## Accepted findings, one commit per rule

Each carries an inline `# jactionlint ignore=` comment with a
plain-English reason: `dangerous-triggers`, `adhoc-packages`,
`unverified-download`, `cache-poisoning` (run-scoped key),
`unpinned-images` (smoke-test container), `bot-conditions` (the author
check is already present), and `issues: write` on reopen-stale-issue.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
@supabase-cli-releaser
supabase-cli-releaser Bot requested a review from a team as a code owner October 23, 2026 14:45
@supabase-cli-releaser supabase-cli-releaser Bot added the do not merge Approve to apply; do not merge. label Oct 23, 2026
@supabase-cli-releaser supabase-cli-releaser Bot added the do not merge Approve to apply; do not merge. label Oct 23, 2026
# Conflicts:
#	.github/workflows/cli-go-ci.yml
#	.github/workflows/cli-go-tag-pkg.yml
#	apps/cli/docs/release-process.md
#	mise.toml
@supabase-cli-releaser

Copy link
Copy Markdown
Contributor Author

Claude resolved the merge of next

Resolved all four conflicts. Both Go CI workflows are deleted, following next's removal of the Go CLI. The merged files keep develop's jactionlint 2 bump and its switch from pnpm exec bun to plain bun in the release docs. Nothing in the tree still references the deleted workflows, apart from the explanatory mention in ADR 0031.

File Resolution
mise.toml Dropped go and golangci-lint as next does, and kept develop's bump to jactionlint = "2".
apps/cli/docs/release-process.md Kept develop's plain bun apps/cli/scripts/... commands and next's removal of the Go sidecar cross-compile step from the build job description.

Deleted: .github/workflows/cli-go-ci.yml, .github/workflows/cli-go-tag-pkg.yml.

Decisions for @supabase/cli. Confirm them, or push a change to this branch:

  • develop changed the Go CI workflows (cli-go-ci.yml, cli-go-tag-pkg.yml) but next deleted them when it removed the Go CLI (ADR 0031). Keep or delete? Chose: Delete both, as next does. develop's edits only maintained Go CI, which has nothing left to run against once the Go CLI is gone.

Quick checks. pnpm run check:all --continue (exit 1) failed on the merged tree.

Claude's fix. The lint:actions:check failure was a semantic conflict: next removed the Go CLI and its CI workflow (cli-go-ci.yml, per ADR 0031), but develop's sync-repair.yml still listed CI as a workflow_run trigger. I removed that entry from .github/workflows/sync-repair.yml; because it is a .github/ file, a maintainer needs to commit it as a suggestion.

Approve to fast-forward next once checks pass (workflow run).

@supabase-cli-releaser supabase-cli-releaser Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Workflow changes for a maintainer

Claude's edits under .github/ are not pushed, because workflows on this branch run with repository secrets. Review them, then use Commit suggestions so they run.

Apply these by hand:

diff --git a/.github/workflows/cli-go-ci.yml b/.github/workflows/cli-go-ci.yml
deleted file mode 100644
index 97ee9dc27..000000000
--- a/.github/workflows/cli-go-ci.yml
+++ /dev/null
@@ -1,137 +0,0 @@
-name: CI
-
-on:
-  pull_request:
-    paths:
-      - apps/cli-go/**
-  merge_group:
-  push:
-    branches:
-      - develop
-    paths:
-      - apps/cli-go/**
-
-permissions:
-  contents: read
-
-jobs:
-  test:
-    name: Test
-    runs-on: blacksmith-8vcpu-ubuntu-2404
-    steps:
-      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
-        with:
-          persist-credentials: false
-
-      - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
-        with:
-          go-version-file: apps/cli-go/go.mod
-          cache: true
-
-      # Required by: internal/utils/credentials/keyring_test.go
-      - uses: t1m0thyj/unlock-keyring@cbcf205c879ebd86add70bab3a6abfcce59a5cae # v1.2.0
-      - run: |
-          set -o pipefail
-          pkgs=$(go list ./pkg/... | grep -Ev 'pkg/api' | paste -sd ',' -)
-          go tool gotestsum -- -race -v -count=1 ./... \
-          -coverpkg="./cmd/...,./internal/...,${pkgs}" -coverprofile=coverage.out
-
-      # internal/start (docker-compose/v2, buildx, moby/buildkit, k8s client-go,
-      # aws-sdk-go-v2, notary, secret-detector) was deleted outright as
-      # unreachable (CLI-1966) -- this guards against silently reintroducing
-      # that dependency tree via some other package, since nothing else checks
-      # the shipped binary's size on every change.
-      - name: Verify the heavy orchestration dependency tree stays out of the module
-        run: |
-          set -euo pipefail
-          go list -deps . > /tmp/deps.txt
-          ! grep -Eq \
-            'docker/compose|docker/buildx|moby/buildkit|k8s\.io/client-go|aws-sdk-go-v2' \
-            /tmp/deps.txt
-
-      - name: Check existing coverage cache
-        id: coverage-cache
-        uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
-        with:
-          path: apps/cli-go/coverage.out
-          key: cli-go-coverage-${{ github.run_id }}-v1
-          lookup-only: true
-
-      - name: Save coverage cache
-        if: steps.coverage-cache.outputs.cache-hit != 'true'
-        uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
-        with:
-          path: apps/cli-go/coverage.out
-          key: cli-go-coverage-${{ github.run_id }}-v1
-
-  coverage:
-    name: Coverage
-    needs:
-      - test
-    runs-on: blacksmith-8vcpu-ubuntu-2404
-    steps:
-      - name: Restore coverage cache
-        uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
-        with:
-          path: apps/cli-go/coverage.out
-          key: cli-go-coverage-${{ github.run_id }}-v1
-          fail-on-cache-miss: true
-      - name: Move coverage report
-        run: cp apps/cli-go/coverage.out coverage.out
-        working-directory: .
-      - uses: coverallsapp/github-action@8d6379e14d29928660c4ba802d8e85393440b329 # v2.3.8
-        with:
-          file: coverage.out
-          format: golang
-
-  lint:
-    name: Lint
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
-        with:
-          persist-credentials: false
-
-      - uses: jdx/mise-action@8418fedb1110381a0d3ba51a7a415d7c1b884550 # v5.2.2
-        with:
-          version: 2026.10.17
-          install_args: >-
-            go
-            golangci-lint
-
-      - uses: golangci/golangci-lint-action@ba0d7d2ec06a0ea1cb5fa41b2e4a3ab91d21278a # v9.3.0
-        with:
-          args: --timeout 5m --verbose
-          install-mode: none
-          only-new-issues: true
-          working-directory: apps/cli-go
-
-  codegen:
-    name: Codegen
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
-        with:
-          persist-credentials: false
-
-      - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
-        with:
-          go-version-file: apps/cli-go/go.mod
-          cache: true
-
-      # Regenerates from the committed api/v1-openapi.yaml snapshot, so this
-      # check is hermetic: it fails only when a pull request leaves pkg/api out
-      # of sync with the snapshot it was generated from. It deliberately does
-      # not compare against the live upstream spec -- doing so made unrelated
-      # pull requests fail together whenever staging drifted ahead of the
-      # committed snapshot. That drift is the API Sync workflow's job.
-      - run: go generate
-      - run: |
-          if ! git diff --ignore-space-at-eol --exit-code --quiet pkg; then
-            echo "Detected uncommitted changes after codegen. See status below:"
-            git diff
-            exit 1
-          fi
-defaults:
-  run:
-    working-directory: apps/cli-go
diff --git a/.github/workflows/cli-go-tag-pkg.yml b/.github/workflows/cli-go-tag-pkg.yml
deleted file mode 100644
index 3563c4077..000000000
--- a/.github/workflows/cli-go-tag-pkg.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-name: Tag pkg
-
-on:
-  workflow_dispatch:
-    inputs:
-      version:
-        description: "pkg version to tag (e.g. v1.2.2)"
-        required: true
-        type: string
-
-permissions: {}
-
-jobs:
-  tag:
-    name: Create pkg tag
-    runs-on: ubuntu-latest
-    permissions:
-      contents: write
-    steps:
-      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
-        with:
-          ref: develop
-          fetch-depth: 0
-          persist-credentials: false
-
-      - name: Create and push pkg tag
-        run: |
-          VERSION="${INPUTS_VERSION}"
-          if ! [[ "$VERSION" =~ ^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$ ]]; then
-            echo "Error: version '$VERSION' does not match semver format (e.g. v1.2.2)"
-            exit 1
-          fi
-          TAG="pkg/$VERSION"
-          if git rev-parse "$TAG" >/dev/null 2>&1; then
-            echo "Error: tag '$TAG' already exists"
-            exit 1
-          fi
-          git tag "$TAG"
-          git push origin "$TAG"
-        env:
-          INPUTS_VERSION: ${{ inputs.version }}
-defaults:
-  run:
-    working-directory: apps/cli-go

# jactionlint ignore=dangerous-triggers
workflow_run:
workflows:
- CI

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- CI

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 AI Review

Merged the three input findings into two entries. Confirmed that the merge resolution restores Go CI against a missing module. Refuted the manual-tagging finding because that workflow explicitly checks out develop, where the Go module still exists.

Findings

Severity Location Category Sources Claim
🟠 MAJOR .github/workflows/cli-go-ci.yml:7 merge-resolution claude+codex The merge resolution restores Go CI on next after its Go module and toolchain configuration were removed. Its unfiltered merge_group trigger runs jobs that reference the missing module, producing failed checks and potentially blocking a required merge-queue check.
Refuted findings (kept for transparency, not posted as review comments)
  • .github/workflows/cli-go-tag-pkg.yml:1 (merge-resolution): Restoring cli-go-tag-pkg.yml resurrects a dead manual tagging workflow because apps/cli-go no longer exists on next.
    Refuted: The workflow does not run its tagging step against next's tree: checkout explicitly selects develop, where the Go module remains present. Thus the missing directory on next does not make this workflow dead. Its restoration is verified, but the claimed failure rationale is contradicted by its checkout configuration.

Stats

Claude findings: 2 · Codex findings: 1 · Confirmed: 1 · Refuted: 1 · Uncertain: 0


Models: claude-opus-5-5 + gpt-6.1-sol · Trigger: manual · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

pull_request:
paths:
- apps/cli-go/**
merge_group:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 MAJOR · merge-resolution · source: claude+codex

The merge resolution restores Go CI on next after its Go module and toolchain configuration were removed. Its unfiltered merge_group trigger runs jobs that reference the missing module, producing failed checks and potentially blocking a required merge-queue check.

Evidence: sync-resolution.diff:4-5 records the modify/delete conflict retaining this workflow. .github/workflows/cli-go-ci.yml:7 enables merge_group without filters; lines 28 and 119 require apps/cli-go/go.mod; lines 99-100 request go and golangci-lint; lines 105-107 disable linter installation and select apps/cli-go; line 137 defaults shell steps to that directory. The checked-out apps/ directory contains no cli-go, and mise.toml:3-5 configures only jactionlint and shellcheck.

Suggested fix: Preserve next's deletion of .github/workflows/cli-go-ci.yml when resolving the modify/delete conflict.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧐 this file should be deleted — looks like this comment correctly determined that but i'm not sure how to proceed. do we delete these files ourselves or is there something we should be doing so the releaser bot handles it?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same comment as above

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do not merge Approve to apply; do not merge.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant