diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9fae6189..8ef74ade 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -72,8 +72,18 @@ jobs: e2e-pr: if: github.event_name != 'schedule' needs: build-and-unit + name: E2E-pr-${{ matrix.suite }}-${{ matrix.project }} runs-on: [self-hosted, Linux, X64, default] - timeout-minutes: 45 + timeout-minutes: 30 + strategy: + fail-fast: false + max-parallel: 4 + matrix: + suite: [core, changed] + project: [chromium-desktop, chromium-mobile] + env: + PLAYWRIGHT_ARTIFACT_NAMESPACE: e2e-pr-${{ matrix.suite }}-${{ matrix.project }} + PLAYWRIGHT_REPORTER_MODE: line-html steps: - name: Checkout repository uses: actions/checkout@v5 @@ -116,22 +126,32 @@ jobs: run: npx playwright install --with-deps chromium - name: Run Playwright smoke tests + if: matrix.suite == 'core' run: | ulimit -n 16384 || true - npm run test:e2e:smoke + npx playwright test --grep @smoke --project="${{ matrix.project }}" - - name: Run Playwright PR tests + - name: Run Playwright PR core tests + if: matrix.suite == 'core' run: | ulimit -n 16384 || true - npm run test:e2e:pr -- --base="${{ steps.playwright-diff.outputs.base }}" --head="${{ steps.playwright-diff.outputs.head }}" + npm run test:e2e:pr -- --core-only --project="${{ matrix.project }}" + + - name: Run Playwright changed-area tests + if: matrix.suite == 'changed' + run: | + ulimit -n 16384 || true + npm run test:e2e:pr -- --changed-only --project="${{ matrix.project }}" --base="${{ steps.playwright-diff.outputs.base }}" --head="${{ steps.playwright-diff.outputs.head }}" - name: Upload Playwright report if: failure() || cancelled() continue-on-error: true uses: actions/upload-artifact@v4 with: - name: playwright-report-pr - path: output/playwright + name: playwright-report-pr-${{ matrix.suite }}-${{ matrix.project }} + path: | + output/playwright/${{ env.PLAYWRIGHT_ARTIFACT_NAMESPACE }}-* + output/playwright/${{ env.PLAYWRIGHT_ARTIFACT_NAMESPACE }} if-no-files-found: ignore retention-days: 3 diff --git a/scripts/run-playwright-pr.mjs b/scripts/run-playwright-pr.mjs index d1da717c..dbd5df0f 100644 --- a/scripts/run-playwright-pr.mjs +++ b/scripts/run-playwright-pr.mjs @@ -22,6 +22,7 @@ for (const signal of ["SIGINT", "SIGTERM"]) { function parseArgs(rawArgs) { const parsed = { help: false, + coreOnly: false, changedOnly: false, listOnly: false, base: "", @@ -43,6 +44,11 @@ function parseArgs(rawArgs) { continue; } + if (value === "--core-only") { + parsed.coreOnly = true; + continue; + } + if (value === "--changed-only") { parsed.changedOnly = true; continue; @@ -103,12 +109,14 @@ Options: --base Base ref for changed-area detection --head Head ref for changed-area detection. Default: HEAD --project Restrict to one Chromium Playwright project. Can be repeated. + --core-only Run only the core @pr gate --changed-only Run changed-area selection without the core @pr gate --list-only List selected tests instead of running them -h, --help Show help Examples: npm run test:e2e:pr + npm run test:e2e:pr -- --core-only --project=chromium-desktop npm run test:e2e:changed -- --base=HEAD~1 --head=HEAD `); } @@ -418,6 +426,10 @@ async function main() { return; } + if (args.coreOnly && args.changedOnly) { + throw new Error("--core-only and --changed-only cannot be used together."); + } + await fs.access(playwrightCliPath); if (!args.changedOnly) { @@ -428,6 +440,10 @@ async function main() { } } + if (args.coreOnly) { + return; + } + const changed = await getChangedFiles(); if (changed.unavailable) { console.log(`[playwright-pr] Changed-area diff unavailable for ${changed.source}; skipping changed-area selection.`);