mirror of
https://github.com/Fission-AI/OpenSpec.git
synced 2026-09-14 20:16:53 +08:00
d56f9fc766
34 test files spawn the real CLI across ~62 call sites. Each spawn runs the preAction hook exactly like a user invocation, so a local `pnpm test` persisted an anonymousId into the developer's real global config (~/.config/openspec/config.json) and POSTed a command_executed event per spawn to the telemetry endpoint. CI never saw this because CI=<truthy> already disables telemetry; it only happens on contributor machines, where it also skews the maintainers' usage data with test traffic. Set OPENSPEC_TELEMETRY=0 / DO_NOT_TRACK=1 via vitest's env so workers and the CLI children they spawn are both covered. Telemetry's own tests delete these vars before asserting, so they are unaffected.
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { defineConfig } from 'vitest/config';
|
|
import os from 'node:os';
|
|
|
|
function resolveMaxWorkers(): number | undefined {
|
|
// Allow callers (CI/agents) to override without editing config.
|
|
const raw = process.env.VITEST_MAX_WORKERS;
|
|
if (raw) {
|
|
const parsed = Number(raw);
|
|
if (Number.isFinite(parsed) && parsed > 0) {
|
|
return parsed;
|
|
}
|
|
}
|
|
|
|
// Vitest v3 defaults to `pool: "forks"` and scales worker processes with CPU.
|
|
// This repo's tests can spawn many Node processes (CLI invocations, temp FS),
|
|
// so cap parallelism to avoid runaway CPU/memory usage in automation.
|
|
const cpuCount = typeof os.availableParallelism === 'function'
|
|
? os.availableParallelism()
|
|
: os.cpus().length;
|
|
return Math.min(4, Math.max(1, cpuCount));
|
|
}
|
|
|
|
export default defineConfig({
|
|
test: {
|
|
globals: true,
|
|
environment: 'node',
|
|
globalSetup: './vitest.setup.ts',
|
|
// Opt the suite out of telemetry. Many tests spawn the real CLI, which runs
|
|
// the preAction hook like any user invocation: it would persist an
|
|
// anonymousId into the developer's *real* global config and POST a
|
|
// command_executed event per spawn. Workers inherit this env, and so do the
|
|
// CLI child processes they spawn. Telemetry's own tests delete these vars
|
|
// before asserting, so they are unaffected.
|
|
env: {
|
|
OPENSPEC_TELEMETRY: '0',
|
|
DO_NOT_TRACK: '1',
|
|
},
|
|
// Tests rely on per-file process isolation (e.g., `process.cwd()` assumptions).
|
|
pool: 'forks',
|
|
maxWorkers: resolveMaxWorkers(),
|
|
include: ['test/**/*.test.ts'],
|
|
coverage: {
|
|
reporter: ['text', 'json', 'html'],
|
|
exclude: [
|
|
'node_modules/',
|
|
'dist/',
|
|
'bin/',
|
|
'*.config.ts',
|
|
'build.js',
|
|
'test/**'
|
|
]
|
|
},
|
|
testTimeout: 10000,
|
|
hookTimeout: 10000,
|
|
teardownTimeout: 3000
|
|
}
|
|
});
|