diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000000..b18fd29357367 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: 'github-actions' + directory: '/' + schedule: + interval: 'weekly' diff --git a/.github/workflows/ai-tests.yml b/.github/workflows/ai-tests.yml index 7f57915773122..72cb382d0e4d6 100644 --- a/.github/workflows/ai-tests.yml +++ b/.github/workflows/ai-tests.yml @@ -32,21 +32,21 @@ jobs: working-directory: ./packages/ai-commands steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | packages - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Type check run: pnpm run typecheck - name: Run tests diff --git a/.github/workflows/auto-label-issues.yml b/.github/workflows/auto-label-issues.yml index 59dfb2f88c3d4..2e897310bcdd2 100644 --- a/.github/workflows/auto-label-issues.yml +++ b/.github/workflows/auto-label-issues.yml @@ -8,26 +8,27 @@ jobs: permissions: issues: write steps: - - name: Check if organization member - id: is-org-member - uses: JamesSingleton/is-organization-member@1.0.0 - with: - organization: ${{ github.repository_owner }} - username: ${{ github.event.issue.user.login }} - token: ${{ secrets.GITHUB_TOKEN }} - - name: label-member - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - NUMBER: ${{ github.event.issue.number }} - run: | - if [ ${{ steps.is-org-member.outputs.result }} != "true" ]; then - echo "User is outside of organization, labeling external" - gh issue edit "$NUMBER" --add-label "external-issue" - else - echo "User is within the organization, labeling internal" - gh issue edit "$NUMBER" --add-label "internal-issue" - fi + - name: Check if organization member + id: is-org-member + uses: JamesSingleton/is-organization-member@39c59b3b17cca4eb75c81772b95e724e2a24c025 # v1.0.0 + with: + organization: ${{ github.repository_owner }} + username: ${{ github.event.issue.user.login }} + token: ${{ secrets.GITHUB_TOKEN }} + - name: label-member + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + NUMBER: ${{ github.event.issue.number }} + IS_INTERNAL: ${{ steps.is-org-member.outputs.result }} + run: | + if [ "$IS_INTERNAL" != "true" ]; then + echo "User is outside of organization, labeling external" + gh issue edit "$NUMBER" --add-label "external-issue" + else + echo "User is within the organization, labeling internal" + gh issue edit "$NUMBER" --add-label "internal-issue" + fi triage-new: runs-on: ubuntu-latest permissions: diff --git a/.github/workflows/autofix_linters.yml b/.github/workflows/autofix_linters.yml index e24443c07bbbb..f86e63bf4dba3 100644 --- a/.github/workflows/autofix_linters.yml +++ b/.github/workflows/autofix_linters.yml @@ -23,7 +23,7 @@ jobs: - name: Calculate number of commits run: echo "PR_FETCH_DEPTH=$(( ${{ github.event.pull_request.commits }} + 1 ))" >> "${GITHUB_ENV}" - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: ${{ github.head_ref }} token: ${{ secrets.PAT_AUTOFIX }} @@ -32,23 +32,23 @@ jobs: packages apps - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm - - uses: actions/setup-node@v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: pnpm - name: Install required dependencies - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run Prettier in fix mode run: pnpm run format - name: Commit changes and push to existing branch - uses: stefanzweifel/git-auto-commit-action@v5 + uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 # v5.2.0 with: - commit_message: "ci: Autofix updates from GitHub workflow" - commit_user_name: "kevcodez" - commit_user_email: "k.grueneberg1994@gmail.com" + commit_message: 'ci: Autofix updates from GitHub workflow' + commit_user_name: 'kevcodez' + commit_user_email: 'k.grueneberg1994@gmail.com' diff --git a/.github/workflows/avoid-typos.yml b/.github/workflows/avoid-typos.yml index 9897266012e2c..0b1b4004d72a4 100644 --- a/.github/workflows/avoid-typos.yml +++ b/.github/workflows/avoid-typos.yml @@ -17,9 +17,9 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Check out code. - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: misspell - uses: reviewdog/action-misspell@v1 + uses: reviewdog/action-misspell@9daa94af4357dddb6fd3775de806bc0a8e98d3e4 # v1.26.3 with: github_token: ${{ secrets.github_token }} locale: 'US' diff --git a/.github/workflows/docs-js-libs-update.yml b/.github/workflows/docs-js-libs-update.yml index 0ec5bea40cdcf..2f6daecbc750f 100644 --- a/.github/workflows/docs-js-libs-update.yml +++ b/.github/workflows/docs-js-libs-update.yml @@ -22,23 +22,23 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: master - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Regenerate JS client libraries tsdoc files working-directory: apps/docs/spec @@ -55,7 +55,7 @@ jobs: npx vitest run --update ./features/docs/Reference.typeSpec.test.ts - name: Create pull request - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: 'docs: update js client libraries (${{ github.event.inputs.version }})' diff --git a/.github/workflows/docs-last-changed.yml b/.github/workflows/docs-last-changed.yml index a7ebfdb06537c..0cf0418a716af 100644 --- a/.github/workflows/docs-last-changed.yml +++ b/.github/workflows/docs-last-changed.yml @@ -23,24 +23,24 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 sparse-checkout: | apps/docs - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' - name: Download dependencies - run: pnpm i + run: pnpm install --frozen-lockfile - name: Update last-changed dates working-directory: ./apps/docs diff --git a/.github/workflows/docs-lint-v2-comment.yml b/.github/workflows/docs-lint-v2-comment.yml index f69e2fc4f4920..7c4561d36950b 100644 --- a/.github/workflows/docs-lint-v2-comment.yml +++ b/.github/workflows/docs-lint-v2-comment.yml @@ -25,7 +25,7 @@ jobs: steps: - id: download_artifact name: 'Download artifact' - uses: actions/github-script@v7 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ @@ -53,7 +53,7 @@ jobs: run: unzip lint_results.zip - name: 'Comment on PR' if: steps.download_artifact.outputs.contains_results == 'true' - uses: actions/github-script@v7 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const fs = require('fs'); diff --git a/.github/workflows/docs-lint-v2-scheduled.yml b/.github/workflows/docs-lint-v2-scheduled.yml index af9e6955943a8..8691af99ead30 100644 --- a/.github/workflows/docs-lint-v2-scheduled.yml +++ b/.github/workflows/docs-lint-v2-scheduled.yml @@ -15,7 +15,7 @@ jobs: lint-all: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 sparse-checkout: | @@ -24,7 +24,7 @@ jobs: apps/docs/content - name: cache cargo id: cache-cargo - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: | ~/.cargo/bin/ diff --git a/.github/workflows/docs-lint-v2.yml b/.github/workflows/docs-lint-v2.yml index 89f42c2862c67..5555f3245cdd0 100644 --- a/.github/workflows/docs-lint-v2.yml +++ b/.github/workflows/docs-lint-v2.yml @@ -28,14 +28,14 @@ jobs: name: supa-mdx-lint runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: fetch-depth: 0 sparse-checkout: | supa-mdx-lint.config.toml supa-mdx-lint apps/docs/content - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 #v3.0.2 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 id: filter with: filters: | @@ -98,7 +98,7 @@ jobs: fi - name: save results as artifact (external) if: steps.filter.outputs.docs == 'true' && github.event.pull_request.head.repo.full_name != github.repository && steps.external_lint.outputs.LINT_EXIT_CODE != 0 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: lint_results path: __github_actions__pr/ diff --git a/.github/workflows/docs-mgmt-api-update.yml b/.github/workflows/docs-mgmt-api-update.yml index e9261c90096aa..e170ddb04af14 100644 --- a/.github/workflows/docs-mgmt-api-update.yml +++ b/.github/workflows/docs-mgmt-api-update.yml @@ -15,32 +15,32 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: master sparse-checkout: | apps/docs - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Change to apps/docs/spec directory and run make command working-directory: apps/docs/spec run: make download.api.v1 dereference.api.v1 generate.sections.api.v1 format - name: Create pull request - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: 'feat: update mgmt api docs' diff --git a/.github/workflows/docs-sync-troubleshooting.yml b/.github/workflows/docs-sync-troubleshooting.yml index 703df013e7d23..4f40768e8f827 100644 --- a/.github/workflows/docs-sync-troubleshooting.yml +++ b/.github/workflows/docs-sync-troubleshooting.yml @@ -24,27 +24,27 @@ jobs: SUPABASE_SECRET_KEY: ${{ secrets.SEARCH_SUPABASE_SERVICE_ROLE_KEY }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | apps/docs - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install dependencies - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run Troubleshooting script - run: pnpm run -F docs troubleshooting:sync + run: pnpm run --filter docs troubleshooting:sync - name: Create Pull Request uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5 diff --git a/.github/workflows/docs-sync.yml b/.github/workflows/docs-sync.yml index e4e78f0fc7226..78843195d1e49 100644 --- a/.github/workflows/docs-sync.yml +++ b/.github/workflows/docs-sync.yml @@ -26,25 +26,25 @@ jobs: SUPABASE_SECRET_KEY: ${{ secrets.SEARCH_SUPABASE_SERVICE_ROLE_KEY }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | apps/docs packages - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install dependencies - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run sync script - run: pnpm run -F docs sync + run: pnpm run --filter docs sync diff --git a/.github/workflows/docs-tests-smoke.yml b/.github/workflows/docs-tests-smoke.yml index 335dffb43162e..942c5d70f7c23 100644 --- a/.github/workflows/docs-tests-smoke.yml +++ b/.github/workflows/docs-tests-smoke.yml @@ -19,25 +19,25 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | apps/docs packages - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run tests run: pnpm --prefix="apps/docs" run test:smoke diff --git a/.github/workflows/docs-tests.yml b/.github/workflows/docs-tests.yml index 233418e270f33..3020e13dc7400 100644 --- a/.github/workflows/docs-tests.yml +++ b/.github/workflows/docs-tests.yml @@ -23,7 +23,7 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | apps/docs @@ -31,19 +31,19 @@ jobs: packages supabase - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run tests run: | diff --git a/.github/workflows/external-pr-comment.yml b/.github/workflows/external-pr-comment.yml index 5e3c36dd35884..d330ad18b97c9 100644 --- a/.github/workflows/external-pr-comment.yml +++ b/.github/workflows/external-pr-comment.yml @@ -13,7 +13,7 @@ jobs: if: github.event.pull_request.head.repo.full_name != github.repository steps: - name: Comment on PR - uses: actions/github-script@v7 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const commentBody = ` diff --git a/.github/workflows/fix-typos.yml b/.github/workflows/fix-typos.yml index 84c9bbf4d3468..a7af81d334d56 100644 --- a/.github/workflows/fix-typos.yml +++ b/.github/workflows/fix-typos.yml @@ -17,12 +17,10 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: master - - uses: sobolevn/misspell-fixer-action@master - - uses: peter-evans/create-pull-request@v4 - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' + - uses: sobolevn/misspell-fixer-action@06ff0b508d4f4c0ba70d15f9a628232c0aade536 # v0.1.0 + - uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0 with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/label_prs.yml b/.github/workflows/label_prs.yml index 36f4ec2dc9064..741ddea4ac724 100644 --- a/.github/workflows/label_prs.yml +++ b/.github/workflows/label_prs.yml @@ -13,4 +13,4 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@v6 + - uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1 diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index a28d54e3f7cb0..56169a93802ee 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -22,19 +22,19 @@ jobs: id-token: write steps: - name: configure aws credentials - uses: aws-actions/configure-aws-credentials@v2 + uses: aws-actions/configure-aws-credentials@5fd3084fc36e372ff1fff382a39b10d03659f355 # v2.2.0 with: role-to-assume: ${{ secrets.PROD_AWS_ROLE }} aws-region: us-east-1 - - uses: docker/login-action@v2 + - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: registry: public.ecr.aws - - uses: docker/login-action@v2 + - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: akhilerm/tag-push-action@v2.1.0 + - uses: akhilerm/tag-push-action@85bf542f43f5f2060ef76262a67ee3607cb6db37 # v2.1.0 with: src: docker.io/supabase/studio:${{ inputs.version }} dst: | diff --git a/.github/workflows/og_images.yml b/.github/workflows/og_images.yml index 6c2166e755894..02a40a0bf582b 100644 --- a/.github/workflows/og_images.yml +++ b/.github/workflows/og_images.yml @@ -21,10 +21,10 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Setup the Supabase CLI - uses: supabase/setup-cli@v1 + uses: supabase/setup-cli@b60b5899c73b63a2d2d651b1e90db8d4c9392f51 # v1.6.0 with: version: latest diff --git a/.github/workflows/pg-meta-tests.yml b/.github/workflows/pg-meta-tests.yml index bd051bf650882..fd6f2daedb6c0 100644 --- a/.github/workflows/pg-meta-tests.yml +++ b/.github/workflows/pg-meta-tests.yml @@ -24,31 +24,31 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | packages/pg-meta packages/tsconfig - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run tests run: pnpm --filter=@supabase/pg-meta run test - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@ab904c41d6ece82784817410c45d8b8c02684457 # v3.1.6 with: directory: packages/pg-meta/coverage flags: pg-meta diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index 9b06f5d533c76..9c3ab48f0acc1 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -18,21 +18,21 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Check out repo - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: apps - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Download dependencies run: | - pnpm i + pnpm install --frozen-lockfile - name: Run prettier run: |- pnpm run test:prettier @@ -42,22 +42,22 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Check out repo - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | i18n - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Download dependencies run: | - pnpm i + pnpm install --frozen-lockfile - name: Run prettier run: |- pnpm exec prettier -c 'i18n/**/*.{js,jsx,ts,tsx,css,md,mdx,json}' @@ -66,23 +66,23 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Check out repo - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | apps/docs/pages apps/docs/content - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Download dependencies run: | - pnpm i + pnpm install --frozen-lockfile - name: Run prettier run: |- # Check mdx files which contain sql code blocks diff --git a/.github/workflows/publish_image.yml b/.github/workflows/publish_image.yml index 8664bcf08ace1..40c142134ab38 100644 --- a/.github/workflows/publish_image.yml +++ b/.github/workflows/publish_image.yml @@ -13,7 +13,7 @@ jobs: image_version: ${{ steps.meta.outputs.version }} steps: - id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175 # v4.6.0 with: images: | supabase/studio @@ -33,23 +33,23 @@ jobs: image_digest: ${{ steps.build.outputs.digest }} steps: - id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175 # v4.6.0 with: images: | supabase/studio tags: | type=raw,value=${{ needs.settings.outputs.image_version }}_${{ env.arch }} - - uses: docker/setup-buildx-action@v2 + - uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 - name: Login to DockerHub - uses: docker/login-action@v2 + uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - id: build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@1104d471370f9806843c095c1db02b5a90c5f8b6 # v3.3.1 with: push: true context: '{{defaultContext}}' @@ -69,22 +69,22 @@ jobs: outputs: image_digest: ${{ steps.build.outputs.digest }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175 # v4.6.0 with: images: | supabase/studio tags: | type=raw,value=${{ needs.settings.outputs.image_version }}_${{ env.arch }} - - uses: docker/login-action@v2 + - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - - uses: docker/setup-buildx-action@v2 + - uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 with: driver: docker driver-opts: | @@ -92,7 +92,7 @@ jobs: network=host - id: build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@1104d471370f9806843c095c1db02b5a90c5f8b6 # v3.3.1 with: push: true context: . @@ -109,9 +109,9 @@ jobs: - release_arm runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: docker/setup-buildx-action@v2 + - uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 - - uses: docker/login-action@v2 + - uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.github/workflows/search.yml b/.github/workflows/search.yml index cdafa84f2ba93..d9153a40b5240 100644 --- a/.github/workflows/search.yml +++ b/.github/workflows/search.yml @@ -40,7 +40,7 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | apps/docs @@ -49,18 +49,18 @@ jobs: packages supabase - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' - name: Download dependencies - run: pnpm i + run: pnpm install --frozen-lockfile - name: Update embeddings working-directory: ./apps/docs diff --git a/.github/workflows/self-host-tests-smoke.yml b/.github/workflows/self-host-tests-smoke.yml index 78094b7ad3b8c..19228e752b5bb 100644 --- a/.github/workflows/self-host-tests-smoke.yml +++ b/.github/workflows/self-host-tests-smoke.yml @@ -19,7 +19,7 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | docker/ diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index b059f21708527..1050707fc7490 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Label Stale Issues - uses: actions/stale@v9.0.0 + uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0 with: days-before-issue-stale: 30 stale-issue-message: 'After 30 days of inactivity, this issue has been marked as stale. Commenting (or other activity) will remove the stale label.' diff --git a/.github/workflows/studio-e2e-test.yml b/.github/workflows/studio-e2e-test.yml index 160f43494f5ac..42eb11cf90642 100644 --- a/.github/workflows/studio-e2e-test.yml +++ b/.github/workflows/studio-e2e-test.yml @@ -42,25 +42,25 @@ jobs: VERCEL_AUTOMATION_BYPASS_SELFHOSTED_STUDIO: ${{ secrets.VERCEL_AUTOMATION_BYPASS_SELFHOSTED_STUDIO }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - name: Verify Vercel bypass secret exists run: | if [ -z "${{ secrets.VERCEL_AUTOMATION_BYPASS_SELFHOSTED_STUDIO }}" ]; then echo "Required secret VERCEL_AUTOMATION_BYPASS_SELFHOSTED_STUDIO is not set" >&2 exit 1 fi - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install dependencies - run: pnpm i + run: pnpm install --frozen-lockfile # Deploy a preview to Vercel (CLI mode) and capture the URL - name: Install Vercel CLI @@ -94,7 +94,7 @@ jobs: VERCEL_AUTOMATION_BYPASS_SELFHOSTED_STUDIO: ${{ secrets.VERCEL_AUTOMATION_BYPASS_SELFHOSTED_STUDIO }} run: pnpm e2e - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: always() with: name: playwright-artifacts @@ -106,7 +106,7 @@ jobs: - name: Prepare summary (outputs) if: always() id: summarize - uses: actions/github-script@v7 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const fs = require('fs') @@ -144,7 +144,7 @@ jobs: - name: Comment summary on PR if: always() && github.event_name == 'pull_request' - uses: actions/github-script@v7 + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 with: script: | const owner = context.repo.owner diff --git a/.github/workflows/studio-unit-tests.yml b/.github/workflows/studio-unit-tests.yml index 08ffc95673f7c..a59c13186687d 100644 --- a/.github/workflows/studio-unit-tests.yml +++ b/.github/workflows/studio-unit-tests.yml @@ -32,22 +32,22 @@ jobs: test_number: [1] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | apps/studio packages - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile working-directory: ./ - name: Run Tests env: @@ -57,7 +57,7 @@ jobs: working-directory: ./apps/studio - name: Upload coverage results to Coveralls - uses: coverallsapp/github-action@master + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: parallel: true flag-name: studio-tests @@ -72,7 +72,7 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Coveralls Finished - uses: coverallsapp/github-action@master + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: parallel-finished: true github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/trigger-nimbus-sync.yml b/.github/workflows/trigger-nimbus-sync.yml index 603360eb1706e..8e47cc31e5cb6 100644 --- a/.github/workflows/trigger-nimbus-sync.yml +++ b/.github/workflows/trigger-nimbus-sync.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Trigger sync in supabase-nimbus - uses: peter-evans/repository-dispatch@v4 + uses: peter-evans/repository-dispatch@5fc4efd1a4797ddb68ffd0714a238564e4cc0e6f # v4.0.0 with: token: ${{ secrets.NIMBUS_SYNC_TOKEN }} repository: supabase/supabase-nimbus diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index f5215584d8651..dc8ea8b9a79ae 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -21,21 +21,21 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run TypeScript type check run: pnpm exec turbo run typecheck diff --git a/.github/workflows/ui-patterns-tests.yml b/.github/workflows/ui-patterns-tests.yml index e666b815d67ed..008d33e82bd03 100644 --- a/.github/workflows/ui-patterns-tests.yml +++ b/.github/workflows/ui-patterns-tests.yml @@ -19,24 +19,24 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | packages - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run tests run: pnpm run test:ui-patterns diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml index 4a23fd333595e..650dad54d685a 100644 --- a/.github/workflows/ui-tests.yml +++ b/.github/workflows/ui-tests.yml @@ -22,31 +22,31 @@ jobs: test_number: [1] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: sparse-checkout: | packages - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install deps - run: pnpm i + run: pnpm install --frozen-lockfile - name: Run tests run: pnpm run test:ci working-directory: ./packages/ui - name: Upload coverage results to Coveralls - uses: coverallsapp/github-action@master + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: parallel: true flag-name: ui-tests @@ -60,7 +60,7 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Coveralls Finished - uses: coverallsapp/github-action@master + uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 with: parallel-finished: true github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/update-js-libs.yml b/.github/workflows/update-js-libs.yml index 4d8da2a18453f..aa41efd4db685 100644 --- a/.github/workflows/update-js-libs.yml +++ b/.github/workflows/update-js-libs.yml @@ -22,17 +22,17 @@ jobs: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 with: ref: master - - uses: pnpm/action-setup@v4 + - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 name: Install pnpm with: run_install: false - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' @@ -41,36 +41,36 @@ jobs: run: | # Update @supabase/supabase-js sed -i "s/'@supabase\/supabase-js': .*/'@supabase\/supabase-js': ${{ github.event.inputs.version }}/" pnpm-workspace.yaml - + # Update @supabase/auth-js sed -i "s/'@supabase\/auth-js': .*/'@supabase\/auth-js': ${{ github.event.inputs.version }}/" pnpm-workspace.yaml - + # Update @supabase/realtime-js sed -i "s/'@supabase\/realtime-js': .*/'@supabase\/realtime-js': ${{ github.event.inputs.version }}/" pnpm-workspace.yaml - + echo "Updated pnpm-workspace.yaml:" cat pnpm-workspace.yaml - name: Install dependencies - run: pnpm i --no-frozen-lockfile + run: pnpm install --no-frozen-lockfile - name: Create pull request - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: 'feat: update @supabase/*-js libraries to v${{ github.event.inputs.version }}' title: 'feat: update @supabase/*-js libraries to v${{ github.event.inputs.version }}' body: | This PR updates @supabase/*-js libraries to version ${{ github.event.inputs.version }}. - + **Source**: ${{ github.event.inputs.source }} - + **Changes**: - Updated @supabase/supabase-js to ${{ github.event.inputs.version }} - Updated @supabase/auth-js to ${{ github.event.inputs.version }} - Updated @supabase/realtime-js to ${{ github.event.inputs.version }} - Refreshed pnpm-lock.yaml - + This PR was created automatically. branch: 'gha/auto-update-js-libs-v${{ github.event.inputs.version }}' base: 'master' diff --git a/apps/docs/content/troubleshooting/new-branch-doesnt-copy-database.mdx b/apps/docs/content/troubleshooting/new-branch-doesnt-copy-database.mdx new file mode 100644 index 0000000000000..7470a05c7c7b4 --- /dev/null +++ b/apps/docs/content/troubleshooting/new-branch-doesnt-copy-database.mdx @@ -0,0 +1,62 @@ +--- +title = "Why are my Supabase branches empty?" +topics = [ "branching" ] +keywords = [ "branching", "migrations" ] +--- + +Branching in Supabase (Branching 2.0) relies on the current migration files in your project—**not** a schema dump—when creating environments from `main`. This means if your `main` branch lacks migration history, branching will not fully capture your schema. This is a known limitation highlighted in the [Branching 2.0 documentation](/blog/branching-2-0#current-limitations). Follow the steps below to generate, synchronize, and repair your migration history for smooth branching. + +#### 1. Prerequisites: Prepare local Supabase environment + +- If you do not have a local environment set up already, follow the Supabase local development getting started guide: + - [Running Supabase Locally](/docs/guides/local-development/cli/getting-started). + +Execute the following commands to initialize and start a local project: + +```bash +supabase init +supabase start +``` + +--- + +#### 2. Pull remote schema into migrations + +With your project linked, run: + +```bash +supabase db pull --linked +``` + +This command generates a migration file in your `supabase/migrations` folder which reflects your remote schema. This will not run the migration locally or overwrite anything. + +--- + +#### 3. Sync remote migration history + +Upon running the above command, the Supabase CLI will typically prompt with: + +``` +Update remote migration history table? [Y/n] +``` + +Type `Y` to update your remote project’s migration history and ensure it matches your new local migrations. + +- If the CLI suggests repairing migration history due to mismatches, you might see: + ``` + Make sure your local git repo is up-to-date. If the error persists, try repairing the migration history table: + supabase migration repair --status applied + ``` + Run the exact repair command provided, replacing the timestamp as instructed (example timestamp: 20251006141726). This synchronizes the migration state between local and remote. + +--- + +#### 4. Proceed with Branching + +Once your migration history is up to date, continue to use branching features as normal. Each new branch will now inherit the correct migrations from your `main` branch. + +--- + +#### Additional tips + +- If further issues arise (such as schema drift or migration mismatches), review the [troubleshooting documentation](/docs/guides/deployment/branching/troubleshooting#migration-issues), and consider manual repair with `supabase migration repair`(https://supabase.com/docs/reference/cli/supabase-migration-repair). diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index 959a9be6bf505..3d76a41db96e1 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -27,6 +27,7 @@ Cameron Blackwood Cemal Kılıç Chandana Anumula Charis Lam +Chase Cresgy Chase Granberry Chris Caruso Chris Chandler diff --git a/apps/studio/data/reports/database-charts.ts b/apps/studio/data/reports/database-charts.ts index 692edba8947d1..6ee8c26fbac58 100644 --- a/apps/studio/data/reports/database-charts.ts +++ b/apps/studio/data/reports/database-charts.ts @@ -221,7 +221,7 @@ export const getReportAttributesV2: ( docsUrl: `${DOCS_URL}/guides/telemetry/reports#database-connections`, attributes: [ { - attribute: 'total_db_connections', + attribute: 'pg_stat_database_num_backends', provider: 'infra-monitoring', label: 'Total connections', tooltip: 'Total number of active database connections', diff --git a/apps/studio/data/table-rows/table-rows-query.ts b/apps/studio/data/table-rows/table-rows-query.ts index 6bd944e07b920..a7807780735b3 100644 --- a/apps/studio/data/table-rows/table-rows-query.ts +++ b/apps/studio/data/table-rows/table-rows-query.ts @@ -7,7 +7,6 @@ import { type UseQueryOptions, } from '@tanstack/react-query' -import { THRESHOLD_COUNT } from '@supabase/pg-meta/src/sql/studio/get-count-estimate' import { IS_PLATFORM } from 'common' import { parseSupaTable } from 'components/grid/SupabaseGrid.utils' import { Filter, Sort, SupaRow, SupaTable } from 'components/grid/types' @@ -50,7 +49,7 @@ async function sleep(ms: number) { export async function executeWithRetry( fn: () => Promise, maxRetries: number = 3, - baseDelay: number = 500 + baseDelay: number = 1000 ): Promise { for (let attempt = 0; attempt <= maxRetries; attempt++) { try { diff --git a/apps/studio/pages/project/[ref]/branches/merge-requests.tsx b/apps/studio/pages/project/[ref]/branches/merge-requests.tsx index a0fa030ca1170..b4e8d95498c3d 100644 --- a/apps/studio/pages/project/[ref]/branches/merge-requests.tsx +++ b/apps/studio/pages/project/[ref]/branches/merge-requests.tsx @@ -258,7 +258,10 @@ const MergeRequestsPage: NextPageWithLayout = () => { rowLink={rowLink} external={isPR} rowActions={ - !isPR && ( + // We always want to show the action button to close a merge request + // when user has requested review from dashboard. It doesn't matter + // whether the branch is linked to a GitHub PR. + branch.review_requested_at && (