From f04f4d33014e6165277e67654742aa8cb09aeb65 Mon Sep 17 00:00:00 2001 From: "j.w.jonkers" Date: Mon, 11 May 2026 13:25:53 +0200 Subject: [PATCH 1/3] =?UTF-8?q?ci:=20parallelise=20frontend=20e2e=20(2=20w?= =?UTF-8?q?orkers=20in=20CI),=20bump=20system-test=20shards=204=E2=86=926?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two parallelism dials to cut wall-clock CI time: - services/frontend/playwright.config.ts: fullyParallel=true and workers=process.env.CI ? 2 : undefined. Local runs use Playwright's half-CPU default; CI runners are 2-vCPU so 2 workers fits without over-subscription. - .github/workflows/ci.yml: SHARD_TOTAL and the matrix go from 4 to 6. The build.gradle.kts sharding logic (stable FQCN-hash partition) is shard-count-agnostic — just feeding it more buckets gets us six ~equal slices instead of four. --- .github/workflows/ci.yml | 6 +++--- services/frontend/playwright.config.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 218a11e8d..22d5e007e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -275,14 +275,14 @@ jobs: # and includes only its own slice via JUnit's --tests filter. Stable # partition: a class always lands on the same shard, which makes # failure triage easy. - name: System tests (shard ${{ matrix.shard }}/4) + name: System tests (shard ${{ matrix.shard }}/6) runs-on: ubuntu-latest timeout-minutes: 45 needs: [ api-static, fe-static ] strategy: fail-fast: false matrix: - shard: [ 1, 2, 3, 4 ] + shard: [ 1, 2, 3, 4, 5, 6 ] services: db: @@ -371,7 +371,7 @@ jobs: - name: Run system tests env: - SHARD_TOTAL: 4 + SHARD_TOTAL: 6 SHARD_INDEX: ${{ matrix.shard }} run: | ./gradlew --no-daemon :services:system-tests:test \ diff --git a/services/frontend/playwright.config.ts b/services/frontend/playwright.config.ts index c5d551c40..780f660be 100644 --- a/services/frontend/playwright.config.ts +++ b/services/frontend/playwright.config.ts @@ -6,8 +6,8 @@ export default defineConfig({ expect: { timeout: 15_000, }, - fullyParallel: false, - workers: 1, + fullyParallel: true, + workers: process.env.CI ? 2 : undefined, retries: 0, reporter: "list", use: { From f2729acc3ab662434195b5f7d773a4b3dbf2ec5d Mon Sep 17 00:00:00 2001 From: "j.w.jonkers" Date: Mon, 11 May 2026 13:27:21 +0200 Subject: [PATCH 2/3] ci: match Playwright workers to ubuntu-latest 4-vCPU runner --- services/frontend/playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/frontend/playwright.config.ts b/services/frontend/playwright.config.ts index 780f660be..23890c6c3 100644 --- a/services/frontend/playwright.config.ts +++ b/services/frontend/playwright.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ timeout: 15_000, }, fullyParallel: true, - workers: process.env.CI ? 2 : undefined, + workers: process.env.CI ? 4 : undefined, retries: 0, reporter: "list", use: { From 8b66f258a98dfd14e1e14849f735e8b09c6f0c20 Mon Sep 17 00:00:00 2001 From: "j.w.jonkers" Date: Mon, 11 May 2026 13:37:07 +0200 Subject: [PATCH 3/3] frontend: allow node globals in playwright.config.ts for eslint --- services/frontend/eslint.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/frontend/eslint.config.mjs b/services/frontend/eslint.config.mjs index cbafff0f6..74d30e577 100644 --- a/services/frontend/eslint.config.mjs +++ b/services/frontend/eslint.config.mjs @@ -66,7 +66,7 @@ export default [ }, }, { - files: ['vite.config.mjs'], + files: ['vite.config.mjs', 'playwright.config.ts'], languageOptions: { globals: { ...globals.node,