diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d0f34d467e..ac3cdab2ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -500,7 +500,11 @@ jobs: test-e2e: name: E2E Tests (${{ matrix.shard }}/6) runs-on: ubuntu-latest - timeout-minutes: 20 + # 20m was too tight for the heaviest shard: each shard re-runs `npm run build` + # (~5m) before Playwright, so a slow shard's tests + build overran 20m and the + # job was cancelled mid-run. 35m gives headroom; the per-test cap in + # playwright.config.ts bounds any genuine hang to a fast, visible failure. + timeout-minutes: 35 needs: build strategy: fail-fast: false diff --git a/playwright.config.ts b/playwright.config.ts index 5263e2643a..072fb79a0f 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -25,7 +25,11 @@ export default defineConfig({ "**/skills-marketplace.spec.ts", ], fullyParallel: false, - timeout: 600_000, + // Per-test cap. 600s was high enough that one hung test (× retries) could + // exhaust the e2e job's wall-clock budget, so the GitHub job hit its + // timeout-minutes and was CANCELLED mid-run instead of the test failing fast. + // 180s is generous for a UI flow yet bounds a hang to a clear per-test failure. + timeout: 180_000, forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, workers: 1,