mirror of
https://github.com/n8n-io/n8n.git
synced 2026-10-17 05:29:44 +02:00
chore: Remove --runner flag from janitor test scoping (#33373)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e7e44fed83
commit
29e0e32e3b
|
|
@ -24,9 +24,9 @@
|
|||
"start": "node ../../scripts/os-normalize.mjs --dir bin n8n",
|
||||
"test": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite vitest run",
|
||||
"test:unit": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite vitest run",
|
||||
"test:unit:changed": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite janitor test-scoped --runner=vitest",
|
||||
"test:unit:changed": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite janitor test-scoped",
|
||||
"test:integration": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite vitest run --config vitest.config.integration.ts",
|
||||
"test:integration:changed": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite janitor test-scoped --runner=vitest -- --config vitest.config.integration.ts",
|
||||
"test:integration:changed": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite janitor test-scoped -- --config vitest.config.integration.ts",
|
||||
"test:dev": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite vitest --silent=false",
|
||||
"test:sqlite": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite vitest run --config vitest.config.integration.ts",
|
||||
"test:sqlite:migrations": "N8N_LOG_LEVEL=silent DB_SQLITE_POOL_SIZE=4 DB_TYPE=sqlite vitest run --config vitest.config.migration.ts --coverage.enabled=false",
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
"watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\"",
|
||||
"test": "vitest run",
|
||||
"test:unit": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --silent=false"
|
||||
},
|
||||
"files": [
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
"preview": "vite preview",
|
||||
"test:dev": "vitest",
|
||||
"test": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"lint": "eslint src --quiet",
|
||||
"lint:fix": "eslint src --fix",
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
"preview": "vite preview",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"test": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --silent=false",
|
||||
"lint": "eslint src --quiet",
|
||||
"lint:fix": "eslint src --fix",
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"typecheck": "vue-tsc --noEmit",
|
||||
"typecheck:watch": "vue-tsc --watch --noEmit",
|
||||
"test": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest",
|
||||
"chromatic": "chromatic",
|
||||
"format": "biome format --write . && prettier --write . --ignore-path ../../../../.prettierignore",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
"preview": "vite preview",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"test": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --silent=false",
|
||||
"lint": "eslint src --quiet",
|
||||
"lint:fix": "eslint src --fix",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
"preview": "vite preview",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"test": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --silent=false",
|
||||
"lint": "eslint src --quiet",
|
||||
"lint:fix": "eslint src --fix",
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
"preview": "vite preview",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"test": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --silent=false",
|
||||
"lint": "eslint src --quiet",
|
||||
"lint:fix": "eslint src --fix",
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
"format:check": "biome ci . && prettier --check . --ignore-path ../../../.prettierignore",
|
||||
"serve": "cross-env VUE_APP_URL_BASE_API=http://localhost:5678/ vite --host 0.0.0.0 --port 8080 dev",
|
||||
"test": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --silent=false"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
"watch": "tsc-watch -p tsconfig.build.cjs.json --onCompilationComplete \"pnpm copy-nodes-json && tsc-alias -p tsconfig.build.cjs.json\" --onSuccess \"pnpm n8n-generate-metadata\"",
|
||||
"test": "vitest run",
|
||||
"test:unit": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --silent=false",
|
||||
"test:integration:skip": "vitest run --config vitest.integration.config.ts"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ ci-filter (in install-and-build)
|
|||
│
|
||||
└─→ CHANGED_FILES forwarded to test jobs
|
||||
│
|
||||
└─→ janitor test-scoped --runner=vitest (per-package)
|
||||
└─→ janitor test-scoped (per-package)
|
||||
│
|
||||
├─→ SKIP → exit 0 (no in-package changes)
|
||||
├─→ RUN_FULL → spawn runner with no scope flags
|
||||
|
|
@ -225,10 +225,10 @@ ci-filter (in install-and-build)
|
|||
CHANGED_FILES="packages/workflow/src/x.ts" janitor affected-packages
|
||||
|
||||
# Compute scope for the cwd package. Output: SKIP | RUN_FULL | <files>
|
||||
janitor scope --runner=vitest
|
||||
janitor scope
|
||||
|
||||
# Compute scope AND spawn the runner. Unrecognised flags forward to runner.
|
||||
janitor test-scoped --runner=vitest --shard=1/2 --coverage
|
||||
janitor test-scoped --shard=1/2 --coverage
|
||||
```
|
||||
|
||||
**Bailout triggers (force ALL packages):** `pnpm-lock.yaml`, root `package.json`.
|
||||
|
|
|
|||
|
|
@ -629,14 +629,9 @@ function runAffectedPackages(options: CliOptions): void {
|
|||
}
|
||||
|
||||
function runTestScopedCmd(options: CliOptions): void {
|
||||
if (!options.runner) {
|
||||
console.error('Error: --runner=vitest is required');
|
||||
process.exit(1);
|
||||
}
|
||||
const packageDir = options.packageDir ?? process.cwd();
|
||||
const changedFiles = readChangedFiles(options);
|
||||
const exitCode = runTestScoped({
|
||||
runner: options.runner,
|
||||
packageDir,
|
||||
rootDir: findWorkspaceRoot(process.cwd()),
|
||||
changedFiles,
|
||||
|
|
@ -646,13 +641,7 @@ function runTestScopedCmd(options: CliOptions): void {
|
|||
}
|
||||
|
||||
function runScope(options: CliOptions): void {
|
||||
if (!options.runner) {
|
||||
console.error('Error: --runner=vitest is required');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const result = computeScope({
|
||||
runner: options.runner,
|
||||
packageDir: options.packageDir ?? process.cwd(),
|
||||
changedFiles: readChangedFiles(options),
|
||||
rootDir: findWorkspaceRoot(process.cwd()),
|
||||
|
|
|
|||
|
|
@ -197,17 +197,6 @@ describe('arg-parser', () => {
|
|||
const result = parseArgs();
|
||||
expect(result.testCommand).toBe('pnpm test');
|
||||
});
|
||||
|
||||
it('parses --runner=vitest', () => {
|
||||
setArgs(['--runner=vitest']);
|
||||
const result = parseArgs();
|
||||
expect(result.runner).toBe('vitest');
|
||||
});
|
||||
|
||||
it('throws on unknown --runner value', () => {
|
||||
setArgs(['--runner=jest']);
|
||||
expect(() => parseArgs()).toThrow(/Unknown --runner=jest/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('combined arguments', () => {
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ export interface CliOptions {
|
|||
impact: boolean;
|
||||
// Affected-packages / scope options
|
||||
changedFiles?: string;
|
||||
runner?: 'vitest';
|
||||
packageDir?: string;
|
||||
/** Anything after `--` — forwarded to the test runner by `test-scoped`. */
|
||||
passthroughArgs: string[];
|
||||
|
|
@ -190,13 +189,6 @@ const VALUE_FLAG_HANDLERS: Record<string, (options: CliOptions, value: string) =
|
|||
'--changed-files=': (opts, value) => {
|
||||
opts.changedFiles = value;
|
||||
},
|
||||
'--runner=': (opts, value) => {
|
||||
if (value === 'vitest') {
|
||||
opts.runner = value;
|
||||
} else {
|
||||
throw new Error(`Unknown --runner=${value}. Expected 'vitest'.`);
|
||||
}
|
||||
},
|
||||
'--package-dir=': (opts, value) => {
|
||||
opts.packageDir = value;
|
||||
},
|
||||
|
|
@ -250,7 +242,6 @@ function createDefaultOptions(): CliOptions {
|
|||
shardIndex: undefined,
|
||||
impact: false,
|
||||
changedFiles: undefined,
|
||||
runner: undefined,
|
||||
packageDir: undefined,
|
||||
passthroughArgs: [],
|
||||
url: undefined,
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ export function showScopeHelp(): void {
|
|||
Scope - Per-package vitest scope from changed files
|
||||
|
||||
Usage:
|
||||
janitor scope --runner=vitest [--package-dir=<dir>] [--changed-files=<list>]
|
||||
janitor scope [--package-dir=<dir>] [--changed-files=<list>]
|
||||
|
||||
--package-dir: defaults to cwd (matches how pnpm/turbo invoke test scripts).
|
||||
--changed-files: newline- OR comma-separated repo-root-relative paths.
|
||||
|
|
@ -257,7 +257,7 @@ export function showTestScopedHelp(): void {
|
|||
Test-Scoped - Compute scope and spawn vitest with the right flags
|
||||
|
||||
Usage:
|
||||
janitor test-scoped --runner=vitest [--package-dir=<dir>] [--changed-files=<list>] [extra runner args]
|
||||
janitor test-scoped [--package-dir=<dir>] [--changed-files=<list>] [extra runner args]
|
||||
|
||||
--package-dir: defaults to cwd (matches how pnpm/turbo invoke test scripts).
|
||||
--changed-files: newline- OR comma-separated repo-root-relative paths.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ describe('computeScope', () => {
|
|||
it('returns full when CHANGED_FILES signal is missing (local dev)', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: null,
|
||||
|
|
@ -29,7 +28,6 @@ describe('computeScope', () => {
|
|||
it('returns skip when no in-package files changed', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/other/src/x.ts'],
|
||||
|
|
@ -41,7 +39,6 @@ describe('computeScope', () => {
|
|||
it('returns scoped list when only source files changed', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/cli/src/a.ts', 'packages/cli/src/b.ts'],
|
||||
|
|
@ -56,7 +53,6 @@ describe('computeScope', () => {
|
|||
it('bails to full on package.json change', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/cli/package.json'],
|
||||
|
|
@ -67,7 +63,6 @@ describe('computeScope', () => {
|
|||
it('bails to full on tsconfig change', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/cli/tsconfig.build.json'],
|
||||
|
|
@ -78,7 +73,6 @@ describe('computeScope', () => {
|
|||
it('ignores files outside the package even when configs match', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/other/package.json'],
|
||||
|
|
@ -89,7 +83,6 @@ describe('computeScope', () => {
|
|||
it('bails to full on vitest.config change', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/cli/vitest.config.ts'],
|
||||
|
|
@ -100,7 +93,6 @@ describe('computeScope', () => {
|
|||
it('bails to full on vite.config change (vitest reads vite.config)', () => {
|
||||
const rootDir = makePackageDir('packages/frontend/editor-ui');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/frontend/editor-ui',
|
||||
rootDir,
|
||||
changedFiles: ['packages/frontend/editor-ui/vite.config.mts'],
|
||||
|
|
@ -111,7 +103,6 @@ describe('computeScope', () => {
|
|||
it('bails to full on src/__tests__/setup.ts change', () => {
|
||||
const rootDir = makePackageDir('packages/frontend/editor-ui');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/frontend/editor-ui',
|
||||
rootDir,
|
||||
changedFiles: ['packages/frontend/editor-ui/src/__tests__/setup.ts'],
|
||||
|
|
@ -129,7 +120,6 @@ describe('computeScope', () => {
|
|||
])('bails to full on %s even when nothing changed in-package', (_label, changed) => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: [changed],
|
||||
|
|
@ -141,7 +131,6 @@ describe('computeScope', () => {
|
|||
it('a universal-sink change forces full for a downstream package too', () => {
|
||||
const rootDir = makePackageDir('packages/nodes-base');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/nodes-base',
|
||||
rootDir,
|
||||
changedFiles: ['packages/workflow/src/Workflow.ts'],
|
||||
|
|
@ -152,7 +141,6 @@ describe('computeScope', () => {
|
|||
it('does NOT treat a per-package package.json as a global trigger', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/other/package.json'],
|
||||
|
|
@ -163,7 +151,6 @@ describe('computeScope', () => {
|
|||
it('still SKIPs an unrelated cross-package change', () => {
|
||||
const rootDir = makePackageDir('packages/cli');
|
||||
const result = computeScope({
|
||||
runner: 'vitest',
|
||||
packageDir: 'packages/cli',
|
||||
rootDir,
|
||||
changedFiles: ['packages/nodes-base/nodes/Slack/Slack.node.ts'],
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import { isAbsolute, relative, resolve } from 'node:path';
|
|||
import { matchesGlobalTrigger } from './global-triggers.js';
|
||||
import { toPosix } from './path-utils.js';
|
||||
|
||||
export type Runner = 'vitest';
|
||||
|
||||
// Bailout patterns are centralised here (vs the original DEVP-194 spec's
|
||||
// per-package `n8nTestChanged.inPackageBailouts` field) because the n8n
|
||||
// workspace shares the same vitest config helpers + setup file layout via
|
||||
|
|
@ -36,7 +34,6 @@ const VITEST_BAILOUT = [
|
|||
];
|
||||
|
||||
export interface ComputeScopeOptions {
|
||||
runner: Runner;
|
||||
packageDir: string;
|
||||
rootDir: string;
|
||||
/** `null` = no signal → RUN_FULL (local dev with unset env). */
|
||||
|
|
|
|||
|
|
@ -3,10 +3,9 @@
|
|||
import { spawnSync } from 'node:child_process';
|
||||
import { isAbsolute, resolve } from 'node:path';
|
||||
|
||||
import { computeScope, type Runner, type ScopeResult } from './scope-analyzer.js';
|
||||
import { computeScope, type ScopeResult } from './scope-analyzer.js';
|
||||
|
||||
export interface TestScopedOptions {
|
||||
runner: Runner;
|
||||
packageDir: string;
|
||||
rootDir: string;
|
||||
changedFiles: string[] | null;
|
||||
|
|
@ -35,7 +34,6 @@ export function buildRunnerArgs(
|
|||
|
||||
export function runTestScoped(options: TestScopedOptions): number {
|
||||
const scope = computeScope({
|
||||
runner: options.runner,
|
||||
packageDir: options.packageDir,
|
||||
rootDir: options.rootDir,
|
||||
changedFiles: options.changedFiles,
|
||||
|
|
@ -56,5 +54,5 @@ export function runTestScoped(options: TestScopedOptions): number {
|
|||
// Pass cwd explicitly so an override via --package-dir is honoured
|
||||
// (otherwise spawnSync inherits the caller's cwd and vitest would
|
||||
// resolve config + tests from the wrong project).
|
||||
return spawnSync(options.runner, args, { stdio: 'inherit', cwd: options.packageDir }).status ?? 1;
|
||||
return spawnSync('vitest', args, { stdio: 'inherit', cwd: options.packageDir }).status ?? 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
"watch": "tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json --watch",
|
||||
"test": "vitest run",
|
||||
"test:unit": "vitest run",
|
||||
"test:changed": "janitor test-scoped --runner=vitest",
|
||||
"test:changed": "janitor test-scoped",
|
||||
"test:dev": "vitest --watch",
|
||||
"mutate": "node ../../scripts/mutation-health/mutate.mjs --package-dir packages/workflow"
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user