Skip to content

Commit 5665643

Browse files
committed
Make local e2e reliable in CI: serialize boots, add headless shell
The local project booted its executor web servers with file parallelism on, the only server-booting project that did. On a CI runner several cold vite boots at once thrashed past the token-URL wait, timing out stdio-mcp and auth. Run the files serially like every other server-booting project so the first boot warms the vite cache. Also install chromium-headless-shell, which the browser scenarios launch and which does not come with the chromium download.
1 parent 28105c4 commit 5665643

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

.github/workflows/ci.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,10 @@ jobs:
9292

9393
- run: bun install --frozen-lockfile
9494

95+
# `chromium` and the new `chromium-headless-shell` ship as separate
96+
# downloads; the browser-driven scenarios launch the headless shell.
9597
- name: Install Playwright Chromium
96-
run: bunx playwright install --with-deps chromium
98+
run: bunx playwright install --with-deps chromium chromium-headless-shell
9799

98100
# The `local` vitest project is excluded from the default `test` chain
99101
# (each scenario launches its own server), so run it as its own job.

e2e/vitest.config.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,17 @@ export default defineConfig({
7979
}),
8080
// The single-user local app. Each scenario launches its OWN `executor
8181
// web` via the CLI on a throwaway data dir + an OS-assigned port, so
82-
// there is no shared instance and scenarios are independent — file
83-
// parallelism is ON. No globalSetup (nothing shared to boot). Only
84-
// local/** scenarios. Not part of the default `npm run test` chain; run
85-
// with `vitest run --project local`.
82+
// there is no shared instance and scenarios are independent. Files run
83+
// SERIALLY (like every other server-booting project): a cold `executor
84+
// web` boot runs vite's optimizeDeps, and several booting at once on a
85+
// CI runner thrash hard enough to blow the token-URL wait. Serial lets
86+
// the first boot warm the shared vite cache so the rest come up fast. No
87+
// globalSetup (nothing shared to boot). Only local/** scenarios. Not part
88+
// of the default `npm run test` chain; run with `vitest run --project local`.
8689
project("local", {
8790
include: ["local/**/*.test.ts"],
8891
globalSetup: [],
89-
fileParallelism: true,
92+
fileParallelism: false,
9093
testTimeout: 180_000,
9194
}),
9295
// The supervised CLI daemon inside a guest VM, one project per OS. The

0 commit comments

Comments
 (0)