name: E2E on: pull_request: push: branches: [main] jobs: e2e: name: Playwright E2E (chromium-desktop) runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' cache-dependency-path: 'e2e/package.json' - name: Install e2e deps working-directory: ./e2e run: npm install - name: Install Playwright browsers working-directory: ./e2e run: npx playwright install --with-deps chromium - name: Bring up the test stack working-directory: ./e2e run: docker compose -f docker-compose.test.yml up -d --build - name: Wait for stack health working-directory: ./e2e run: | for i in $(seq 1 60); do if curl -fsS http://localhost:3101/health > /dev/null; then exit 0; fi sleep 2 done echo "Stack never became healthy. Dumping logs:" docker compose -f docker-compose.test.yml logs exit 1 - name: Run E2E tests working-directory: ./e2e run: npm run test:e2e -- --project=chromium-desktop - name: Upload Playwright report if: failure() uses: actions/upload-artifact@v4 with: name: playwright-report path: e2e/playwright-report/ retention-days: 14 - name: Upload traces if: failure() uses: actions/upload-artifact@v4 with: name: traces path: e2e/test-results/ retention-days: 14 - name: Tear down stack if: always() working-directory: ./e2e run: docker compose -f docker-compose.test.yml down -v smoke-ua-matrix: name: Cross-UA smoke matrix runs-on: ubuntu-latest timeout-minutes: 20 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' - name: Install e2e deps working-directory: ./e2e run: npm install - name: Install Playwright browsers (full) working-directory: ./e2e run: npx playwright install --with-deps chromium firefox webkit - name: Bring up the test stack working-directory: ./e2e run: docker compose -f docker-compose.test.yml up -d --build - name: Wait for stack health working-directory: ./e2e run: | for i in $(seq 1 60); do if curl -fsS http://localhost:3101/health > /dev/null; then exit 0; fi sleep 2 done docker compose -f docker-compose.test.yml logs exit 1 - name: Smoke matrix working-directory: ./e2e run: npm run test:e2e:smoke - name: Upload smoke report if: failure() uses: actions/upload-artifact@v4 with: name: playwright-smoke-report path: e2e/playwright-report/ retention-days: 14 - name: Tear down if: always() working-directory: ./e2e run: docker compose -f docker-compose.test.yml down -v