name: Selfhosted Studio E2E Tests on: push: branches: [master] pull_request: # Cancel old builds on new commit for same workflow + branch/PR concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true permissions: contents: write pull-requests: write jobs: test: timeout-minutes: 60 runs-on: blacksmith-4vcpu-ubuntu-2404 env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} steps: - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 id: filter with: filters: | studio: - 'packages/pg-meta/**' - 'apps/studio/**' - 'apps/ui-library/**' - 'apps/design-system/**' - 'e2e/studio/**' - 'pnpm-lock.yaml' - '.github/workflows/studio-e2e-test.yml' - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0 if: steps.filter.outputs.studio == 'true' name: Install pnpm with: run_install: false - name: Use Node.js if: steps.filter.outputs.studio == 'true' uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: '.nvmrc' cache: 'pnpm' - name: Install dependencies if: steps.filter.outputs.studio == 'true' run: pnpm install --frozen-lockfile - name: Install Playwright Browsers if: steps.filter.outputs.studio == 'true' run: pnpm -C e2e/studio exec playwright install chromium --with-deps --only-shell - name: 🚀 Run Playwright tests against Vercel Preview if: steps.filter.outputs.studio == 'true' id: playwright run: pnpm e2e - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: always() && steps.filter.outputs.studio == 'true' with: name: playwright-artifacts path: | e2e/studio/playwright-report/ e2e/studio/test-results/ retention-days: 7 - name: Comment Playwright test results on PR uses: daun/playwright-report-comment@be9e270edd5ad86038604d3caa84a819a6ff6fed # v3.10.0 if: always() && steps.filter.outputs.studio == 'true' && github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork with: report-file: e2e/studio/test-results/test-results.json comment-title: '🎭 Playwright Test Results' - name: Fail job if tests failed if: steps.filter.outputs.studio == 'true' && (steps.playwright.outcome != 'success' || steps.summarize.outputs.flaky_count > 0) run: | echo "E2E tests failed" >&2 exit 1