Skip to content

Commit a3c0314

Browse files
committed
fix: wrap paths in quotes in case of spaces
1 parent 0a8ed63 commit a3c0314

11 files changed

Lines changed: 39 additions & 16 deletions

File tree

packages/plugin-coverage/src/lib/runner/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
ProcessError,
77
ensureDirectoryExists,
88
executeProcess,
9+
filePathToCliArg,
910
readJsonFile,
1011
ui,
1112
} from '@code-pushup/utils';
@@ -60,7 +61,7 @@ export async function createRunnerConfig(
6061

6162
return {
6263
command: 'node',
63-
args: [scriptPath],
64+
args: [filePathToCliArg(scriptPath)],
6465
outputFile: RUNNER_OUTPUT_PATH,
6566
...(threshold != null && {
6667
outputTransform: outputs =>

packages/plugin-coverage/src/lib/runner/runner.integration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe('createRunnerConfig', () => {
1717
});
1818
expect(runnerConfig).toStrictEqual<RunnerConfig>({
1919
command: 'node',
20-
args: ['executeRunner.ts'],
20+
args: ['"executeRunner.ts"'],
2121
outputTransform: expect.any(Function),
2222
outputFile: expect.stringContaining('runner-output.json'),
2323
});

packages/plugin-eslint/src/lib/__snapshots__/eslint-plugin.integration.test.ts.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ exports[`eslintPlugin > should initialize ESLint plugin for React application 1`
508508
"packageName": "@code-pushup/eslint-plugin",
509509
"runner": {
510510
"args": [
511-
"<dirname>/bin.js",
511+
""<dirname>/bin.js"",
512512
],
513513
"command": "node",
514514
"outputFile": "node_modules/.code-pushup/eslint/runner-output.json",

packages/plugin-eslint/src/lib/runner/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { dirname, join } from 'node:path';
33
import type { Audit, AuditOutput, RunnerConfig } from '@code-pushup/models';
44
import {
55
ensureDirectoryExists,
6+
filePathToCliArg,
67
pluginWorkDir,
78
readJsonFile,
89
} from '@code-pushup/utils';
@@ -60,7 +61,7 @@ export async function createRunnerConfig(
6061

6162
return {
6263
command: 'node',
63-
args: [scriptPath],
64+
args: [filePathToCliArg(scriptPath)],
6465
outputFile: RUNNER_OUTPUT_PATH,
6566
};
6667
}

packages/plugin-eslint/src/lib/runner/lint.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import type { ESLint, Linter } from 'eslint';
22
import { rm, writeFile } from 'node:fs/promises';
33
import { platform } from 'node:os';
44
import { join } from 'node:path';
5-
import { distinct, executeProcess, toArray } from '@code-pushup/utils';
5+
import {
6+
distinct,
7+
executeProcess,
8+
filePathToCliArg,
9+
toArray,
10+
} from '@code-pushup/utils';
611
import type { ESLintTarget } from '../config';
712
import { setupESLint } from '../setup';
813
import type { LinterOutput, RuleOptionsPerFile } from './types';
@@ -26,7 +31,7 @@ function executeLint({
2631
command: 'npx',
2732
args: [
2833
'eslint',
29-
...(configPath ? [`--config=${configPath}`] : []),
34+
...(configPath ? [`--config=${filePathToCliArg(configPath)}`] : []),
3035
...(typeof eslintrc === 'object' ? ['--no-eslintrc'] : []),
3136
'--no-error-on-unmatched-pattern',
3237
'--format=json',

packages/plugin-eslint/src/lib/runner/lint.unit.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ describe('lint', () => {
106106
command: 'npx',
107107
args: [
108108
'eslint',
109-
'--config=.eslintrc.js',
109+
'--config=".eslintrc.js"',
110110
'--no-error-on-unmatched-pattern',
111111
'--format=json',
112112
expect.stringContaining('**/*.js'), // wraps in quotes on Unix

packages/plugin-js-packages/src/lib/runner/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { RunnerConfig } from '@code-pushup/models';
44
import {
55
ensureDirectoryExists,
66
executeProcess,
7+
filePathToCliArg,
78
isPromiseFulfilledResult,
89
isPromiseRejectedResult,
910
objectFromEntries,
@@ -34,7 +35,7 @@ export async function createRunnerConfig(
3435

3536
return {
3637
command: 'node',
37-
args: [scriptPath],
38+
args: [filePathToCliArg(scriptPath)],
3839
outputFile: RUNNER_OUTPUT_PATH,
3940
};
4041
}

packages/plugin-js-packages/src/lib/runner/runner.integration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe('createRunnerConfig', () => {
1717
});
1818
expect(runnerConfig).toStrictEqual<RunnerConfig>({
1919
command: 'node',
20-
args: ['executeRunner.ts'],
20+
args: ['"executeRunner.ts"'],
2121
outputFile: expect.stringContaining('runner-output.json'),
2222
});
2323
});

packages/utils/src/index.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
export * from './lib/text-formats';
2-
export { ExcludeNullFromPropertyTypes } from './lib/types';
31
export { exists } from '@code-pushup/models';
42
export { Diff, comparePairs, matchArrayItemsByKey } from './lib/diff';
53
export {
@@ -17,6 +15,7 @@ export {
1715
directoryExists,
1816
ensureDirectoryExists,
1917
fileExists,
18+
filePathToCliArg,
2019
findLineNumberInText,
2120
importEsmModule,
2221
logMultipleFileResults,
@@ -39,18 +38,18 @@ export {
3938
} from './lib/formatting';
4039
export {
4140
formatGitPath,
42-
guardAgainstLocalChanges,
4341
getGitRoot,
42+
guardAgainstLocalChanges,
4443
safeCheckout,
4544
toGitPath,
4645
} from './lib/git/git';
4746
export {
48-
getSemverTags,
4947
LogResult,
50-
getHashes,
51-
getHashFromTag,
5248
getCurrentBranchOrTag,
49+
getHashFromTag,
50+
getHashes,
5351
getLatestCommit,
52+
getSemverTags,
5453
} from './lib/git/git.commits-and-tags';
5554
export { groupByStatus } from './lib/group-by-status';
5655
export {
@@ -85,6 +84,8 @@ export {
8584
compareIssueSeverity,
8685
loadReport,
8786
} from './lib/reports/utils';
87+
export { isSemver, normalizeSemver, sortSemvers } from './lib/semver';
88+
export * from './lib/text-formats';
8889
export {
8990
CliArgsObject,
9091
apostrophize,
@@ -104,5 +105,5 @@ export {
104105
toUnixNewlines,
105106
toUnixPath,
106107
} from './lib/transform';
108+
export { ExcludeNullFromPropertyTypes } from './lib/types';
107109
export { verboseUtils } from './lib/verbose-utils';
108-
export { isSemver, normalizeSemver, sortSemvers } from './lib/semver';

packages/utils/src/lib/file-system.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,8 @@ export function findLineNumberInText(
139139
const lineNumber = lines.findIndex(line => line.includes(pattern)) + 1; // +1 because line numbers are 1-based
140140
return lineNumber === 0 ? null : lineNumber; // If the package isn't found, return null
141141
}
142+
143+
export function filePathToCliArg(path: string): string {
144+
// needs to be escaped if spaces included
145+
return `"${path}"`;
146+
}

0 commit comments

Comments
 (0)