diff --git a/eslint.config.mjs b/eslint.config.mjs index eb57f77..ac2be1a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -28,6 +28,7 @@ export default tseslint.config( 'apps/web/e2e/helpers/*.ts', 'apps/web/playwright.config.ts', 'apps/gateway/vitest.config.ts', + 'packages/db/vitest.config.ts', 'packages/storage/vitest.config.ts', 'packages/mosaic/__tests__/*.ts', 'tools/federation-harness/*.ts', diff --git a/packages/db/vitest.config.ts b/packages/db/vitest.config.ts index 8e730d5..7cdd921 100644 --- a/packages/db/vitest.config.ts +++ b/packages/db/vitest.config.ts @@ -4,5 +4,22 @@ export default defineConfig({ test: { globals: true, environment: 'node', + // The migration suite spins up a real PGlite (WASM Postgres) instance per + // test and applies the full drizzle migration set. Each case legitimately + // takes ~5s locally and considerably longer on CI, where turbo runs many + // packages' test suites concurrently. The 5s vitest default then expires + // mid-migration and the run fails as a phantom "Test timed out in 5000ms" + // (often surfacing the underlying WASM `memory access out of bounds` when + // the heap is starved). Give migrations real headroom. + testTimeout: 120_000, + hookTimeout: 120_000, + // Each PGlite instance carries a multi-hundred-MB WASM heap. Running test + // files in parallel forks multiplies that peak and is what tips the CI + // runner into the WASM OOM. A single fork keeps only one instance resident + // at a time — slightly slower, but deterministic. + pool: 'forks', + poolOptions: { + forks: { singleFork: true }, + }, }, });