name: End-to-end tests (playwright) on: push: branches: [ main ] paths: - 'src/**' - 'test-e2e/**' - 'package-lock.json' - '.browserslistrc' - 'babel.config.json' - 'public/index.html' - 'public/**/index.html' - '.github/workflows/browsers.yml' - 'playwright.config.ts' pull_request: paths: - 'src/**' - 'test-e2e/**' - 'package-lock.json' - '.browserslistrc' - 'babel.config.json' - 'public/index.html' - 'public/**/index.html' - '.github/workflows/browsers.yml' - 'playwright.config.ts' jobs: test-e2e-playwright: timeout-minutes: 60 strategy: fail-fast: false matrix: os: [windows-latest, macos-latest, ubuntu-latest] browser: [chromium, firefox, webkit] exclude: - os: windows-latest browser: webkit - os: windows-latest browser: firefox - os: macos-latest browser: firefox runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 with: fetch-depth: 1 - uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' - name: Install dependencies run: npm ci --no-audit env: HUSKY_SKIP_INSTALL: true - name: Install Playwright Browsers run: npx playwright install --with-deps - run: npx playwright install-deps - name: Run Playwright tests run: npx playwright test --project=${{ matrix.browser }} - uses: actions/upload-artifact@v4 if: failure() with: name: screenshot-${{ matrix.os }} path: test-results/**/*.png - uses: actions/upload-artifact@v4 if: '!cancelled()' with: name: blob-report-${{ matrix.os }}-${{ matrix.browser }} path: blob-report/ retention-days: 1 merge-reports: # Merge reports after playwright-tests, even if some shards have failed if: ${{ !cancelled() }} needs: [test-e2e-playwright] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 1 - uses: actions/setup-node@v4 with: node-version: 20 - name: Install dependencies run: npm ci - name: Download blob reports from GitHub Actions Artifacts uses: actions/download-artifact@v4 with: path: all-blob-reports pattern: blob-report-* merge-multiple: true - name: Merge into HTML Report run: npx playwright merge-reports -c test-e2e/merge.config.ts ./all-blob-reports - name: Upload HTML report uses: actions/upload-artifact@v4 with: name: html-report--attempt-${{ github.run_attempt }} path: playwright-report retention-days: 30