From eb7902e7d0f9632b021b3dc1288d18fa5d069242 Mon Sep 17 00:00:00 2001 From: jdalton Date: Wed, 5 Nov 2025 10:51:09 -0500 Subject: [PATCH 1/2] fix(tests): prevent v8 coverage segfault on large codebase Fixes segmentation fault when running `pnpm cover` by adding memory management and processing concurrency options. Changes: - Hoist logger to module scope in cover.mjs to fix ReferenceError - Use NODE_OPTIONS with --max-old-space-size=8192 for vitest coverage - Add processingConcurrency: 1 to vitest config to prevent v8 crashes - Add reportOnFailure: true and explicit reportsDirectory The segfault occurred because v8 coverage was processing too much data at once without sufficient memory. These changes allow the coverage command to complete successfully with 2,255 tests and 196 test files. Test Results: - 196 test files passed - 2,255 tests passed, 2 skipped - Type Coverage: 98.16% - Code Coverage: 37.17% - Cumulative: 67.66% --- packages/cli/package.json | 2 +- packages/cli/scripts/cover.mjs | 7 +++++-- packages/cli/vitest.config.mts | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index ba55ef043..5e10f0e0b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -56,7 +56,7 @@ "test:prepare": "dotenvx -q run -f .env.test -- pnpm build && del-cli 'test/**/node_modules'", "test:unit": "dotenvx -q run -f .env.test -- vitest run", "test:unit:update": "dotenvx -q run -f .env.test -- vitest run --update", - "test:unit:coverage": "dotenvx -q run -f .env.test -- vitest run --coverage", + "test:unit:coverage": "NODE_OPTIONS='--max-old-space-size=8192' dotenvx -q run -f .env.test -- vitest run --coverage", "test:validate": "node --import=./scripts/load.mjs scripts/validate-tests.mjs", "test:wrapper": "node --import=./scripts/load.mjs scripts/test-wrapper.mjs", "test-ci": "run-s test:*", diff --git a/packages/cli/scripts/cover.mjs b/packages/cli/scripts/cover.mjs index 93a6dc6c5..66bbff6d6 100644 --- a/packages/cli/scripts/cover.mjs +++ b/packages/cli/scripts/cover.mjs @@ -20,12 +20,15 @@ import { WIN32 } from '@socketsecurity/lib/constants/platform' import { getDefaultLogger } from '@socketsecurity/lib/logger' import { spawn } from '@socketsecurity/lib/spawn' +const logger = getDefaultLogger() + /** * Print a header message. */ function printHeader(message) { - const logger = getDefaultLogger() - logger.error('\n═══════════════════════════════════════════════════════') + logger.error( + '\n═══════════════════════════════════════════════════════', + ) logger.error(` ${message}`) logger.error('═══════════════════════════════════════════════════════\n') } diff --git a/packages/cli/vitest.config.mts b/packages/cli/vitest.config.mts index 524cf3452..bfa74c248 100644 --- a/packages/cli/vitest.config.mts +++ b/packages/cli/vitest.config.mts @@ -89,6 +89,11 @@ export default defineConfig({ coverage: { provider: 'v8', reporter: ['text', 'json', 'html', 'lcov', 'clover'], + // Prevent v8 coverage segfaults by processing in smaller chunks. + processingConcurrency: 1, + // Use less memory-intensive options. + reportOnFailure: true, + reportsDirectory: './coverage', exclude: [ '**/*.config.*', '**/node_modules/**', From 87677316df10f55bafcfe95756543723f2c6a73a Mon Sep 17 00:00:00 2001 From: jdalton Date: Wed, 5 Nov 2025 10:59:14 -0500 Subject: [PATCH 2/2] docs: update coverage badges with actual test coverage numbers Updates coverage badges to reflect actual test results: - Code Coverage: 37.17% (yellow badge) - Type Coverage: 98.16% (green badge) Based on test run with: - 196 test files passed - 2,255 tests passed (2 skipped) - Duration: 11.91s --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1de1230fb..4dd404cf4 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![Socket Badge](https://socket.dev/api/badge/npm/package/socket)](https://socket.dev/npm/package/socket) [![CI](https://github.com/SocketDev/socket-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/SocketDev/socket-cli/actions/workflows/ci.yml) -![Test Coverage](https://img.shields.io/badge/test--coverage-90%25-brightgreen) -![Type Coverage](https://img.shields.io/badge/type--coverage-95%25-brightgreen) +![Code Coverage](https://img.shields.io/badge/code--coverage-37.17%25-yellow) +![Type Coverage](https://img.shields.io/badge/type--coverage-98.16%25-brightgreen) [![Follow @SocketSecurity](https://img.shields.io/twitter/follow/SocketSecurity?style=social)](https://twitter.com/SocketSecurity)