name: E2E Tests on: push: branches: - develop pull_request_target: types: [opened, synchronize, reopened] branches: - develop # 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 jobs: initial-checks: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version-file: ".nvmrc" cache: "npm" - name: Install dependencies run: npm ci e2e: needs: initial-checks runs-on: ubuntu-latest environment: production env: DATABASE_URL: "postgresql://postgres:secret@localhost:5432/postgres" NEXTAUTH_URL: http://localhost:3000/api/auth GITHUB_ID: ${{ secrets.E2E_GITHUB_ID }} GITHUB_SECRET: ${{ secrets.E2E_GITHUB_SECRET }} NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }} steps: - name: Checkout repository uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version-file: ".nvmrc" cache: "npm" - name: Cache Playwright browsers uses: actions/cache@v3 with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-playwright- - name: Run docker-compose uses: isbang/compose-action@v1.5.1 with: compose-file: "./docker-compose.yml" down-flags: "--volumes" services: | db - name: Wait for DB to be ready run: | timeout 60s bash -c 'until nc -z localhost 5432; do echo "Waiting for database connection..."; sleep 2; done' shell: bash - name: Install dependencies run: npm ci - name: Install Playwright browsers run: npx playwright install --with-deps if: steps.playwright-cache.outputs.cache-hit != 'true' - name: Seed database run: | npm run db:migrate npm run db:seed - name: Run Playwright tests id: playwright-tests run: npx playwright test continue-on-error: true - name: Upload Playwright report uses: actions/upload-artifact@v4 if: always() with: name: playwright-report path: playwright-report/ retention-days: 30 - name: Check test results if: steps.playwright-tests.outcome == 'failure' run: exit 1