Repository navigation
chore(stack): bump storage to v1.79.37-r0 #7381
Workflow file for this run
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
| name: Test | |
| # Release-notes PRs (head ref `release-notes/*`) only add markdown under | |
| # `release-notes/` and are published via approval — skip the full CI suite. | |
| # | |
| # Default path: ready (non-draft) PRs targeting `develop`, plus the merge queue. | |
| # `run-ci.yml` calls this workflow for drafts and stacked / non-develop PRs. | |
| on: | |
| pull_request: | |
| types: | |
| - opened | |
| - synchronize | |
| - reopened | |
| - ready_for_review | |
| - converted_to_draft | |
| branches: | |
| - develop | |
| merge_group: | |
| types: | |
| - checks_requested | |
| branches: | |
| - develop | |
| workflow_call: | |
| inputs: | |
| force: | |
| description: Run the suite even when the PR is a draft (used by run-ci.yml) | |
| type: boolean | |
| default: false | |
| secrets: | |
| DF_FIREWALL_TOKEN: | |
| required: true | |
| permissions: | |
| contents: read | |
| actions: read | |
| # Literal prefix: called workflows inherit github.workflow from the caller | |
| # (`run-ci`), which would cancel the caller. `inputs.force` keeps a skipped | |
| # native Test run on a develop draft from cancelling the forced run-ci call. | |
| concurrency: | |
| group: test.yml-${{ github.event.pull_request.number || github.head_ref || github.ref }}-${{ inputs.force && 'run-ci' || 'direct' }} | |
| cancel-in-progress: true | |
| jobs: | |
| check: | |
| if: | | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Check code quality | |
| runs-on: blacksmith-8vcpu-ubuntu-2404 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| with: | |
| dependency-firewall-token: ${{ secrets.DF_FIREWALL_TOKEN }} | |
| - name: Unlock keyring (for cli-go keyring tests) | |
| uses: t1m0thyj/unlock-keyring@cbcf205c879ebd86add70bab3a6abfcce59a5cae # v1.2.0 | |
| - name: Check code quality | |
| run: pnpm run check:all | |
| # Advisory only (base-vs-head diff, no acceptance artifact to gate a | |
| # required check on) — the hard release-time gate is | |
| # tools/config-release-gate.ts in release-config.yml (CLI-2233). | |
| # `continue-on-error` flags the diff without failing the job; | |
| # the tool's own fetch/unshallow fallback resolves a merge-base from | |
| # this checkout's shallow clone, and skips the compare (exit 0) rather | |
| # than failing when history still can't be resolved. | |
| - name: config type-surface diff (advisory) | |
| continue-on-error: true | |
| run: pnpm run check:config-api | |
| test-unit: | |
| if: | | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Run unit tests | |
| runs-on: blacksmith-4vcpu-ubuntu-2404 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| with: | |
| dependency-firewall-token: ${{ secrets.DF_FIREWALL_TOKEN }} | |
| go-cache: "false" | |
| - name: Run unit tests | |
| run: pnpm run test:unit | |
| test-integration: | |
| if: | | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Run integration tests | |
| runs-on: blacksmith-8vcpu-ubuntu-2404 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| with: | |
| dependency-firewall-token: ${{ secrets.DF_FIREWALL_TOKEN }} | |
| go-cache: "false" | |
| - name: Run integration tests | |
| run: pnpm run test:integration | |
| test-stack-ports: | |
| if: | | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Run stack port tests (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Linux coverage for these files comes from the integration job, which | |
| # runs the whole stack integration project. | |
| os: [macos-latest, windows-latest] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| with: | |
| dependency-firewall-token: ${{ secrets.DF_FIREWALL_TOKEN }} | |
| go-cache: "false" | |
| - name: Run stack integration tests | |
| working-directory: packages/stack | |
| run: >- | |
| pnpm test:integration | |
| src/Ports.integration.test.ts | |
| src/storage/DirectoryCopy.integration.test.ts | |
| src/State.integration.test.ts | |
| src/State.windows.integration.test.ts | |
| src/State.process.integration.test.ts | |
| src/HostProcess.integration.test.ts | |
| src/Network.integration.test.ts | |
| src/Proxy.integration.test.ts | |
| src/HttpProxy.integration.test.ts | |
| --passWithNoTests=false | |
| # Windows-only CLI subset: paths, PATH lookup, and permission semantics diverge there. | |
| - name: Run CLI integration tests | |
| if: runner.os == 'Windows' | |
| working-directory: apps/cli | |
| run: >- | |
| pnpm test:integration | |
| src/commands/db/reset/reset.integration.test.ts | |
| src/commands/experimental/stack/start/start.integration.test.ts | |
| --passWithNoTests=false | |
| test-summary: | |
| if: | | |
| always() && | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Run unit and integration tests | |
| needs: [test-unit, test-integration, test-stack-ports] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Verify unit and integration tests succeeded | |
| run: | | |
| if [ "${{ needs.test-unit.result }}" = "failure" ] || [ "${{ needs.test-unit.result }}" = "cancelled" ] || \ | |
| [ "${{ needs.test-integration.result }}" = "failure" ] || [ "${{ needs.test-integration.result }}" = "cancelled" ]; then | |
| echo "::error ::Unit or integration tests failed: unit=${{ needs.test-unit.result }}, integration=${{ needs.test-integration.result }}, stack-ports=${{ needs.test-stack-ports.result }}" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.test-stack-ports.result }}" = "failure" ] || [ "${{ needs.test-stack-ports.result }}" = "cancelled" ]; then | |
| echo "::error ::Stack port tests failed: stack-ports=${{ needs.test-stack-ports.result }}" | |
| exit 1 | |
| fi | |
| echo "Unit and integration tests reported: unit=${{ needs.test-unit.result }}, integration=${{ needs.test-integration.result }}, stack-ports=${{ needs.test-stack-ports.result }}" | |
| test-e2e: | |
| if: | | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Run CLI end-to-end tests (${{ matrix.name }}) | |
| runs-on: blacksmith-8vcpu-ubuntu-2404 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { suite: cli, shard: 1, shards: 4, name: cli 1/4 } | |
| - { suite: cli, shard: 2, shards: 4, name: cli 2/4 } | |
| - { suite: cli, shard: 3, shards: 4, name: cli 3/4 } | |
| - { suite: cli, shard: 4, shards: 4, name: cli 4/4 } | |
| - { suite: cli-e2e, name: cli-e2e } | |
| steps: | |
| - name: Checkout | |
| uses: useblacksmith/checkout@6fd481652155169ed4d2f25ebaf97464f685175f # v1.0.0-beta | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| with: | |
| dependency-firewall-token: ${{ secrets.DF_FIREWALL_TOKEN }} | |
| - name: Cache Go CLI binary | |
| id: cache-go-binary | |
| uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: apps/cli-go/supabase-go | |
| key: go-cli-${{ runner.os }}-${{ hashFiles('apps/cli-go/**/*.go', | |
| 'apps/cli-go/go.mod', 'apps/cli-go/go.sum') }} | |
| - name: Build Go CLI | |
| if: steps.cache-go-binary.outputs.cache-hit != 'true' | |
| run: go build -o supabase-go . | |
| working-directory: apps/cli-go | |
| # The e2e harness invokes `node apps/cli/dist/supabase.js` with | |
| # `SUPABASE_CLI_BINARY_OVERRIDE` pointing at the compiled binary in | |
| # `apps/cli/dist/`. Build the CLI explicitly before invoking every | |
| # package-local e2e suite. | |
| - name: Build CLI | |
| run: pnpm exec turbo run supabase#build | |
| - name: Run end-to-end tests | |
| if: matrix.suite == 'cli' | |
| run: pnpm exec turbo run test:e2e:run --only --filter=supabase -- --shard=${{ matrix.shard }}/${{ matrix.shards }} | |
| env: | |
| SUPABASE_GO_BINARY: ${{ github.workspace }}/apps/cli-go/supabase-go | |
| - name: Run cli-e2e end-to-end tests | |
| if: matrix.suite == 'cli-e2e' | |
| run: pnpm exec turbo run test:e2e:run --only --filter=@supabase/cli-e2e | |
| env: | |
| SUPABASE_GO_BINARY: ${{ github.workspace }}/apps/cli-go/supabase-go | |
| # Vitest writes its results cache under a sha1-named directory. The refresh script | |
| # (apps/cli/scripts/refresh-e2e-timings.ts) merges these into tests/e2e-timings.json. | |
| - name: Upload e2e timings | |
| if: always() && matrix.suite == 'cli' | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: e2e-timings-${{ matrix.shard }} | |
| path: apps/cli/node_modules/.vite/vitest/**/results.json | |
| retention-days: 7 | |
| if-no-files-found: warn | |
| test-stack-e2e: | |
| if: | | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Run stack end-to-end tests (${{ matrix.runtime }}, ${{ matrix.suite }}) | |
| runs-on: blacksmith-8vcpu-ubuntu-2404 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runtime: [native, docker] | |
| suite: [lifecycle, idle-parallel] | |
| steps: | |
| - name: Checkout | |
| uses: useblacksmith/checkout@6fd481652155169ed4d2f25ebaf97464f685175f # v1.0.0-beta | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| with: | |
| dependency-firewall-token: ${{ secrets.DF_FIREWALL_TOKEN }} | |
| go-cache: "false" | |
| - name: Run stack end-to-end tests | |
| run: >- | |
| pnpm --filter @supabase/stack test:e2e:run | |
| src/whole-stack.${{ matrix.runtime }}.${{ matrix.suite }}.e2e.test.ts | |
| --passWithNoTests=false | |
| - name: Run public stack end-to-end tests | |
| if: matrix.runtime == 'native' && matrix.suite == 'lifecycle' | |
| run: >- | |
| pnpm --filter @supabase/stack test:e2e:run | |
| src/public.e2e.test.ts | |
| --passWithNoTests=false | |
| # Summary job that gates branch protection. It preserves the original check | |
| # name and succeeds iff every CLI shard and stack runtime succeeded. | |
| test-e2e-summary: | |
| if: | | |
| always() && | |
| !startsWith(github.head_ref, 'release-notes/') && | |
| (github.event_name == 'merge_group' || | |
| inputs.force || | |
| github.event.pull_request.draft == false) | |
| name: Run end-to-end tests | |
| needs: [test-e2e, test-stack-e2e] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Verify all shards succeeded | |
| run: | | |
| if [ "${{ needs.test-e2e.result }}" = "failure" ] || [ "${{ needs.test-e2e.result }}" = "cancelled" ] || [ "${{ needs.test-stack-e2e.result }}" = "failure" ] || [ "${{ needs.test-stack-e2e.result }}" = "cancelled" ]; then | |
| echo "::error ::One or more e2e jobs failed: cli=${{ needs.test-e2e.result }}, stack=${{ needs.test-stack-e2e.result }}" | |
| exit 1 | |
| fi | |
| echo "All e2e jobs reported: cli=${{ needs.test-e2e.result }}, stack=${{ needs.test-stack-e2e.result }}" |