Skip to content

Commit 1c61157

Browse files
committed
chore: add adjust global cp logic
1 parent dae22a9 commit 1c61157

File tree

7 files changed

+46
-24
lines changed

7 files changed

+46
-24
lines changed

code-pushup.preset.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,14 @@ export const jsDocsCoreConfig = (
205205

206206
export const eslintCoreConfigNx = async (
207207
projectName?: string,
208+
opt?: { cwd?: string },
208209
): Promise<CoreConfig> => ({
209210
plugins: [
210211
await eslintPlugin(
211212
await (projectName
212213
? eslintConfigFromNxProject(projectName)
213214
: eslintConfigFromAllNxProjects()),
215+
opt,
214216
),
215217
],
216218
categories: eslintCategories,

packages/models/code-pushup.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export default mergeConfigs(
2929
await typescriptPluginConfig({
3030
tsconfig: `packages/${projectName}/tsconfig.lib.json`,
3131
}),
32-
await eslintCoreConfigNx(projectName),
32+
await eslintCoreConfigNx(projectName, { cwd: `./packages/${projectName}` }),
3333
jsDocsCoreConfig([
3434
`packages/${projectName}/src/**/*.ts`,
3535
...jsDocsExclusionPatterns,

packages/plugin-eslint/src/bin.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ import process from 'node:process';
22
import { Parser } from 'yargs/helpers';
33
import { executeRunner } from './lib/runner/index.js';
44

5-
const { runnerConfigPath, runnerOutputPath } = Parser(process.argv);
5+
const { runnerConfigPath, runnerOutputPath, cwd } = Parser(process.argv);
66

7-
await executeRunner({ runnerConfigPath, runnerOutputPath });
7+
await executeRunner({ runnerConfigPath, runnerOutputPath }, { cwd });

packages/plugin-eslint/src/lib/config.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ const patternsSchema = z.union([z.string(), z.array(z.string()).min(1)], {
66
'Lint target files. May contain file paths, directory paths or glob patterns',
77
});
88

9+
const envSchema = z.object({
10+
cwd: z.string({ description: 'CWD path' }).optional(),
11+
});
12+
913
const eslintrcSchema = z.string({ description: 'Path to ESLint config file' });
1014

1115
const eslintTargetObjectSchema = z.object({
@@ -62,7 +66,9 @@ const customGroupSchema = z.object({
6266
});
6367
export type CustomGroup = z.infer<typeof customGroupSchema>;
6468

65-
export const eslintPluginOptionsSchema = z.object({
66-
groups: z.array(customGroupSchema).optional(),
67-
});
69+
export const eslintPluginOptionsSchema = z
70+
.object({
71+
groups: z.array(customGroupSchema).optional(),
72+
})
73+
.merge(envSchema);
6874
export type ESLintPluginOptions = z.infer<typeof eslintPluginOptionsSchema>;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export async function eslintPlugin(
4141
schemaType: 'ESLint plugin config',
4242
});
4343

44+
const cwd = options?.cwd || process.cwd();
4445
const customGroups = options
4546
? parseSchema(eslintPluginOptionsSchema, options, {
4647
schemaType: 'ESLint plugin options',
@@ -71,6 +72,8 @@ export async function eslintPlugin(
7172
audits,
7273
groups,
7374

74-
runner: await createRunnerConfig(runnerScriptPath, audits, targets),
75+
runner: await createRunnerConfig(runnerScriptPath, audits, targets, {
76+
cwd,
77+
}),
7578
};
7679
}

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,19 @@ import type { ESLintPluginRunnerConfig, ESLintTarget } from '../config.js';
1919
import { lint } from './lint.js';
2020
import { lintResultsToAudits, mergeLinterOutputs } from './transform.js';
2121

22-
export async function executeRunner({
23-
runnerConfigPath,
24-
runnerOutputPath,
25-
}: RunnerFilesPaths): Promise<void> {
22+
export async function executeRunner(
23+
{ runnerConfigPath, runnerOutputPath }: RunnerFilesPaths,
24+
opt?: { cwd?: string },
25+
): Promise<void> {
26+
const { cwd = process.cwd() } = opt || {};
2627
const { slugs, targets } =
2728
await readJsonFile<ESLintPluginRunnerConfig>(runnerConfigPath);
2829

29-
ui().logger.log(`ESLint plugin executing ${targets.length} lint targets`);
30+
ui().logger.log(
31+
`ESLint plugin executing ${targets.length} lint targets with cwd: ${cwd}`,
32+
);
3033

31-
const linterOutputs = await asyncSequential(targets, lint);
34+
const linterOutputs = await asyncSequential(targets, cfg => lint(cfg, opt));
3235
const lintResults = mergeLinterOutputs(linterOutputs);
3336
const failedAudits = lintResultsToAudits(lintResults);
3437

@@ -51,6 +54,7 @@ export async function createRunnerConfig(
5154
scriptPath: string,
5255
audits: Audit[],
5356
targets: ESLintTarget[],
57+
opt?: { cwd?: string },
5458
): Promise<RunnerConfig> {
5559
const config: ESLintPluginRunnerConfig = {
5660
targets,
@@ -65,7 +69,11 @@ export async function createRunnerConfig(
6569
command: 'node',
6670
args: [
6771
filePathToCliArg(scriptPath),
68-
...objectToCliArgs({ runnerConfigPath, runnerOutputPath }),
72+
...objectToCliArgs({
73+
runnerConfigPath,
74+
runnerOutputPath,
75+
...(opt?.cwd ? { cwd: opt.cwd } : {}),
76+
}),
6977
],
7078
configFile: runnerConfigPath,
7179
outputFile: runnerOutputPath,

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ESLint, Linter } from 'eslint';
22
import { platform } from 'node:os';
3+
import { join } from 'node:path';
34
import {
45
distinct,
56
executeProcess,
@@ -10,20 +11,21 @@ import type { ESLintTarget } from '../config.js';
1011
import { setupESLint } from '../setup.js';
1112
import type { LinterOutput, RuleOptionsPerFile } from './types.js';
1213

13-
export async function lint({
14-
eslintrc,
15-
patterns,
16-
}: ESLintTarget): Promise<LinterOutput> {
17-
const results = await executeLint({ eslintrc, patterns });
14+
export async function lint(
15+
{ eslintrc, patterns }: ESLintTarget,
16+
opt?: { cwd?: string },
17+
): Promise<LinterOutput> {
18+
const results = await executeLint({ eslintrc, patterns }, opt);
1819
const eslint = await setupESLint(eslintrc);
1920
const ruleOptionsPerFile = await loadRuleOptionsPerFile(eslint, results);
2021
return { results, ruleOptionsPerFile };
2122
}
2223

23-
async function executeLint({
24-
eslintrc,
25-
patterns,
26-
}: ESLintTarget): Promise<ESLint.LintResult[]> {
24+
async function executeLint(
25+
{ eslintrc, patterns }: ESLintTarget,
26+
opt?: { cwd?: string },
27+
): Promise<ESLint.LintResult[]> {
28+
const { cwd = process.cwd() } = opt ?? {};
2729
// running as CLI because ESLint#lintFiles() runs out of memory
2830
const { stdout } = await executeProcess({
2931
command: 'npx',
@@ -33,13 +35,14 @@ async function executeLint({
3335
...(typeof eslintrc === 'object' ? ['--no-eslintrc'] : []),
3436
'--no-error-on-unmatched-pattern',
3537
'--format=json',
38+
`--output-file=${join(cwd, '.eslint-results.json')}`,
3639
...toArray(patterns).map(pattern =>
3740
// globs need to be escaped on Unix
3841
platform() === 'win32' ? pattern : `'${pattern}'`,
3942
),
4043
],
4144
ignoreExitCode: true,
42-
cwd: process.cwd(),
45+
cwd,
4346
});
4447

4548
return JSON.parse(stdout) as ESLint.LintResult[];

0 commit comments

Comments
 (0)