60 lines
2.8 KiB
TypeScript
60 lines
2.8 KiB
TypeScript
import { defineConfig } from "vitest/config";
|
|
|
|
export default defineConfig({
|
|
test: {
|
|
include: ["src/**/*.test.ts", "test/unit/**/*.test.ts"],
|
|
exclude: ["node_modules", "dist", "test/integration/**", "test/e2e/**"],
|
|
environment: "node",
|
|
globals: false,
|
|
// Several orchestrator integration tests boot a real Hono server,
|
|
// chokidar watcher, scheduler, and PB client in beforeEach and tear
|
|
// them down in afterEach. On macOS + CI runners the teardown can
|
|
// spike well past the 10s default (chokidar.close on a deleted
|
|
// tempdir + http.Server.close + scheduler settle) — visible as
|
|
// cascading "Hook timed out in 10000ms" failures on `/health
|
|
// wiring`, `OPS_TRIGGER_TOKEN`, and probe-unregister describe
|
|
// blocks. The R21-a SIGHUP-reload test in particular deletes the
|
|
// configDir mid-test and chokidar's watcher.close() on a vanished
|
|
// path can hang for ~30s on macOS. 60s absorbs the variance
|
|
// without masking real hangs (a stuck stop() blocks for minutes,
|
|
// not seconds, so the ceiling still surfaces those cleanly).
|
|
hookTimeout: 60_000,
|
|
coverage: {
|
|
provider: "v8",
|
|
include: ["src/**/*.ts"],
|
|
// NOTE: we intentionally do NOT exclude `src/**/index.ts` wholesale.
|
|
// Barrel-only re-export files are counted as covered-by-proxy (they
|
|
// transitively execute when any consumer imports a symbol), so they
|
|
// don't hurt the threshold. Excluding them wholesale would silently
|
|
// drop an index.ts that gains real logic from the coverage surface.
|
|
exclude: ["src/**/*.test.ts"],
|
|
thresholds: {
|
|
// Branches intentionally held AT lines/statements, not above:
|
|
// the previous config set branches: 90 and the others to 85 —
|
|
// inverted from the usual pattern (branches are hardest because
|
|
// defensive guards for pb 5xx re-auth, S3 SDK dynamic import
|
|
// failure, etc. are exercised integration-side, not unit-side).
|
|
// A 90-branch floor caused spurious CI failures every time a
|
|
// new guard landed without a paired unit test for its error arm.
|
|
lines: 85,
|
|
branches: 85,
|
|
functions: 85,
|
|
statements: 85,
|
|
// Per-glob floors for the probe-driver + discovery-source registries.
|
|
// These modules are closed-enum registry tables — every registered
|
|
// driver/source is an operator-visible contract, and a regression
|
|
// in the registry itself silently corrupts every probe tick. Hold
|
|
// them at 95% line coverage so a new driver/source entering the
|
|
// codebase without a paired unit test fails CI at the coverage
|
|
// gate rather than shipping a probe path with no confidence.
|
|
"src/probes/drivers/**": {
|
|
lines: 95,
|
|
},
|
|
"src/probes/discovery/**": {
|
|
lines: 95,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|