@code-pushup/ci 0.70.0 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -103,11 +103,12 @@ Optionally, you can override default options for further customization:
103
103
  | `nxProjectsFilter` | `string \| string[]` | `'--with-target={task}'` | Arguments passed to [`nx show projects`](https://nx.dev/nx-api/nx/documents/show#projects), only relevant for Nx in [monorepo mode](#monorepo-mode) [^2] |
104
104
  | `directory` | `string` | `process.cwd()` | Directory in which Code PushUp CLI should run |
105
105
  | `config` | `string \| null` | `null` [^1] | Path to config file (`--config` option) |
106
- | `silent` | `boolean` | `false` | Hides logs from CLI commands (erros will be printed) |
106
+ | `silent` | `boolean` | `false` | Hides logs from CLI commands (errors will be printed) |
107
107
  | `bin` | `string` | `'npx --no-install code-pushup'` | Command for executing Code PushUp CLI |
108
108
  | `detectNewIssues` | `boolean` | `true` | Toggles if new issues should be detected and returned in `newIssues` property |
109
109
  | `logger` | `Logger` | `console` | Logger for reporting progress and encountered problems |
110
110
  | `skipComment` | `boolean` | `false` | Toggles if comparison comment is posted to PR |
111
+ | `configPatterns` | `ConfigPatterns \| null` | `null` | Additional configuration which enables [faster CI runs](#faster-ci-runs-with-configpatterns) |
111
112
 
112
113
  [^1]: By default, the `code-pushup.config` file is autodetected as described in [`@code-pushup/cli` docs](../cli/README.md#configuration).
113
114
 
@@ -216,6 +217,32 @@ await runInCI(refs, api, {
216
217
  });
217
218
  ```
218
219
 
220
+ ### Faster CI runs with `configPatterns`
221
+
222
+ By default, the `print-config` command is run sequentially for each project in order to reliably detect how `code-pushup` is configured - specifically, where to read output files from (`persist` config) and whether portal may be used as a cache (`upload` config). This allows for each project to be configured in its own way without breaking anything, but for large monorepos these extra `code-pushup print-config` executions can accumulate and significantly slow down CI pipelines.
223
+
224
+ As a more scalable alternative, `configPatterns` may be provided. A user declares upfront how every project is configured, which allows `print-config` to be skipped. It's the user's responsibility to ensure this configuration holds for every project (it won't be checked). The `configPatterns` support string interpolation, substituting `{projectName}` with each project's name. Other than that, each project's `code-pushup.config` must have exactly the same `persist` and `upload` configurations.
225
+
226
+ ```ts
227
+ await runInCI(refs, api, {
228
+ monorepo: true,
229
+ configPatterns: {
230
+ persist: {
231
+ outputDir: '.code-pushup/{projectName}',
232
+ filename: 'report',
233
+ format: ['json', 'md'],
234
+ },
235
+ // optional: will use portal as cache when comparing reports in PRs
236
+ upload: {
237
+ server: 'https://api.code-pushup.example.com/graphql',
238
+ apiKey: 'cp_...',
239
+ organization: 'example',
240
+ project: '{projectName}',
241
+ },
242
+ },
243
+ });
244
+ ```
245
+
219
246
  ### Monorepo result
220
247
 
221
248
  In monorepo mode, the resolved object includes the merged diff at the top-level, as well as a list of projects.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-pushup/ci",
3
- "version": "0.70.0",
3
+ "version": "0.72.0",
4
4
  "description": "CI automation logic for Code PushUp (provider-agnostic)",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/code-pushup/cli/tree/main/packages/ci#readme",
@@ -26,8 +26,9 @@
26
26
  },
27
27
  "type": "module",
28
28
  "dependencies": {
29
- "@code-pushup/models": "0.70.0",
30
- "@code-pushup/utils": "0.70.0",
29
+ "@code-pushup/models": "0.72.0",
30
+ "@code-pushup/portal-client": "^0.14.3",
31
+ "@code-pushup/utils": "0.72.0",
31
32
  "glob": "^11.0.1",
32
33
  "simple-git": "^3.20.0",
33
34
  "yaml": "^2.5.1",
@@ -1,8 +1,4 @@
1
1
  import type { CommandContext } from '../context.js';
2
- type CompareOptions = {
3
- before: string;
4
- after: string;
5
- label?: string;
6
- };
7
- export declare function runCompare({ before, after, label }: CompareOptions, { bin, config, directory, observer }: CommandContext): Promise<void>;
8
- export {};
2
+ export declare function runCompare({ bin, config, directory, observer }: CommandContext, { hasFormats }: {
3
+ hasFormats: boolean;
4
+ }): Promise<void>;
@@ -1,16 +1,15 @@
1
1
  import { DEFAULT_PERSIST_FORMAT } from '@code-pushup/models';
2
2
  import { executeProcess, isVerbose } from '@code-pushup/utils';
3
- export async function runCompare({ before, after, label }, { bin, config, directory, observer }) {
3
+ export async function runCompare({ bin, config, directory, observer }, { hasFormats }) {
4
4
  await executeProcess({
5
5
  command: bin,
6
6
  args: [
7
7
  'compare',
8
8
  ...(isVerbose() ? ['--verbose'] : []),
9
- `--before=${before}`,
10
- `--after=${after}`,
11
- ...(label ? [`--label=${label}`] : []),
12
9
  ...(config ? [`--config=${config}`] : []),
13
- ...DEFAULT_PERSIST_FORMAT.map(format => `--persist.format=${format}`),
10
+ ...(hasFormats
11
+ ? []
12
+ : DEFAULT_PERSIST_FORMAT.map(format => `--persist.format=${format}`)),
14
13
  ],
15
14
  cwd: directory,
16
15
  observer,
@@ -1 +1 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../../../../../packages/ci/src/lib/cli/commands/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAS/D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAkB,EACxC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAkB;IAEpD,MAAM,cAAc,CAAC;QACnB,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE;YACJ,SAAS;YACT,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,YAAY,MAAM,EAAE;YACpB,WAAW,KAAK,EAAE;YAClB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,MAAM,EAAE,CAAC;SACtE;QACD,GAAG,EAAE,SAAS;QACd,QAAQ;KACT,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../../../../../packages/ci/src/lib/cli/commands/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAkB,EACpD,EAAE,UAAU,EAA2B;IAEvC,MAAM,cAAc,CAAC;QACnB,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE;YACJ,SAAS;YACT,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,UAAU;gBACZ,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;SACxE;QACD,GAAG,EAAE,SAAS;QACd,QAAQ;KACT,CAAC,CAAC;AACL,CAAC"}
@@ -3,4 +3,4 @@ export { runCompare } from './commands/compare.js';
3
3
  export { runMergeDiffs } from './commands/merge-diffs.js';
4
4
  export { runPrintConfig } from './commands/print-config.js';
5
5
  export { createCommandContext, type CommandContext } from './context.js';
6
- export { persistedFilesFromConfig } from './persist.js';
6
+ export { parsePersistConfig, persistedFilesFromConfig, type EnhancedPersistConfig, } from './persist.js';
@@ -3,5 +3,5 @@ export { runCompare } from './commands/compare.js';
3
3
  export { runMergeDiffs } from './commands/merge-diffs.js';
4
4
  export { runPrintConfig } from './commands/print-config.js';
5
5
  export { createCommandContext } from './context.js';
6
- export { persistedFilesFromConfig } from './persist.js';
6
+ export { parsePersistConfig, persistedFilesFromConfig, } from './persist.js';
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/ci/src/lib/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAuB,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/ci/src/lib/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAuB,MAAM,cAAc,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,cAAc,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { type CoreConfig, type Format } from '@code-pushup/models';
2
- export declare function persistedFilesFromConfig(config: Pick<CoreConfig, 'persist'>, { isDiff, directory }: {
2
+ export type EnhancedPersistConfig = Pick<CoreConfig, 'persist' | 'upload'>;
3
+ export declare function persistedFilesFromConfig(config: EnhancedPersistConfig, { isDiff, directory }: {
3
4
  isDiff?: boolean;
4
5
  directory: string;
5
6
  }): Record<Format, string>;
6
- export declare function parsePersistConfig(json: unknown): Promise<Pick<CoreConfig, 'persist'>>;
7
+ export declare function parsePersistConfig(json: unknown): Promise<EnhancedPersistConfig>;
@@ -1,23 +1,26 @@
1
1
  import path from 'node:path';
2
2
  import { z } from 'zod';
3
- import { DEFAULT_PERSIST_FILENAME, DEFAULT_PERSIST_FORMAT, DEFAULT_PERSIST_OUTPUT_DIR, persistConfigSchema, } from '@code-pushup/models';
4
- import { objectFromEntries, stringifyError } from '@code-pushup/utils';
3
+ import { DEFAULT_PERSIST_FILENAME, DEFAULT_PERSIST_FORMAT, DEFAULT_PERSIST_OUTPUT_DIR, persistConfigSchema, uploadConfigSchema, } from '@code-pushup/models';
4
+ import { createReportPath, objectFromEntries } from '@code-pushup/utils';
5
5
  export function persistedFilesFromConfig(config, { isDiff, directory }) {
6
6
  const { persist: { outputDir = DEFAULT_PERSIST_OUTPUT_DIR, filename = DEFAULT_PERSIST_FILENAME, } = {}, } = config;
7
7
  const dir = path.isAbsolute(outputDir)
8
8
  ? outputDir
9
9
  : path.join(directory, outputDir);
10
- const name = isDiff ? `${filename}-diff` : filename;
10
+ const suffix = isDiff ? 'diff' : undefined;
11
11
  return objectFromEntries(DEFAULT_PERSIST_FORMAT.map(format => [
12
12
  format,
13
- path.join(dir, `${name}.${format}`),
13
+ createReportPath({ outputDir: dir, filename, format, suffix }),
14
14
  ]));
15
15
  }
16
16
  export async function parsePersistConfig(json) {
17
- const schema = z.object({ persist: persistConfigSchema.optional() });
17
+ const schema = z.object({
18
+ persist: persistConfigSchema.optional(),
19
+ upload: uploadConfigSchema.optional(),
20
+ });
18
21
  const result = await schema.safeParseAsync(json);
19
22
  if (result.error) {
20
- throw new Error(`Invalid persist config - ${stringifyError(result.error)}`);
23
+ throw new Error(`Code PushUp config is invalid:\n${z.prettifyError(result.error)}`);
21
24
  }
22
25
  return result.data;
23
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../../../../packages/ci/src/lib/cli/persist.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAE1B,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,UAAU,wBAAwB,CACtC,MAAmC,EACnC,EAAE,MAAM,EAAE,SAAS,EAA2C;IAE9D,MAAM,EACJ,OAAO,EAAE,EACP,SAAS,GAAG,0BAA0B,EACtC,QAAQ,GAAG,wBAAwB,GACpC,GAAG,EAAE,GACP,GAAG,MAAM,CAAC;IAEX,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEpD,OAAO,iBAAiB,CACtB,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM;QACN,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;KACpC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAa;IAEb,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../../../../../packages/ci/src/lib/cli/persist.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAE1B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAIzE,MAAM,UAAU,wBAAwB,CACtC,MAA6B,EAC7B,EAAE,MAAM,EAAE,SAAS,EAA2C;IAE9D,MAAM,EACJ,OAAO,EAAE,EACP,SAAS,GAAG,0BAA0B,EACtC,QAAQ,GAAG,wBAAwB,GACpC,GAAG,EAAE,GACP,GAAG,MAAM,CAAC;IAEX,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3C,OAAO,iBAAiB,CACtB,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM;QACN,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;KAC/D,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAa;IAEb,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE;QACvC,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,mCAAmC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -12,5 +12,6 @@ export const DEFAULT_SETTINGS = {
12
12
  logger: console,
13
13
  nxProjectsFilter: '--with-target={task}',
14
14
  skipComment: false,
15
+ configPatterns: null,
15
16
  };
16
17
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../packages/ci/src/lib/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,8BAA8B;IACnC,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;IACxB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,OAAO;IACf,gBAAgB,EAAE,sBAAsB;IACxC,WAAW,EAAE,KAAK;CACnB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../packages/ci/src/lib/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,8BAA8B;IACnC,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;IACxB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,OAAO;IACf,gBAAgB,EAAE,sBAAsB;IACxC,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,IAAI;CACrB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Format } from '@code-pushup/models';
1
+ import type { Format, PersistConfig, UploadConfig } from '@code-pushup/models';
2
2
  import type { SourceFileIssue } from './issues.js';
3
3
  import type { MonorepoTool } from './monorepo/index.js';
4
4
  /**
@@ -19,6 +19,7 @@ export type Options = {
19
19
  detectNewIssues?: boolean;
20
20
  logger?: Logger;
21
21
  skipComment?: boolean;
22
+ configPatterns?: ConfigPatterns | null;
22
23
  };
23
24
  /**
24
25
  * {@link Options} with filled-in defaults.
@@ -66,6 +67,14 @@ export type Logger = {
66
67
  info: (message: string) => void;
67
68
  debug: (message: string) => void;
68
69
  };
70
+ /**
71
+ * Code PushUp config patterns which hold for every project in monorepo.
72
+ * Providing this information upfront makes CI runs faster (skips print-config).
73
+ */
74
+ export type ConfigPatterns = {
75
+ persist: Required<PersistConfig>;
76
+ upload?: UploadConfig;
77
+ };
69
78
  /**
70
79
  * Resolved return value of {@link runInCI}
71
80
  */
@@ -1,5 +1,5 @@
1
1
  import path from 'node:path';
2
- import { executeProcess, fileExists, stringifyError, toArray, } from '@code-pushup/utils';
2
+ import { executeProcess, fileExists, interpolate, stringifyError, toArray, } from '@code-pushup/utils';
3
3
  export const nxHandler = {
4
4
  tool: 'nx',
5
5
  async isConfigured(options) {
@@ -19,7 +19,7 @@ export const nxHandler = {
19
19
  'nx',
20
20
  'show',
21
21
  'projects',
22
- ...toArray(nxProjectsFilter).map(arg => arg.replaceAll('{task}', task)),
22
+ ...toArray(nxProjectsFilter).map(arg => interpolate(arg, { task })),
23
23
  '--json',
24
24
  ],
25
25
  cwd,
@@ -1 +1 @@
1
- {"version":3,"file":"nx.js","sourceRoot":"","sources":["../../../../../../../packages/ci/src/lib/monorepo/handlers/nx.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,UAAU,EACV,cAAc,EACd,OAAO,GACR,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,IAAI,EAAE,IAAI;IAEV,KAAK,CAAC,YAAY,CAAC,OAAO;QACxB,OAAO,CACL,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YACrD,CACE,MAAM,cAAc,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,cAAc,EAAE,IAAI;aACrB,CAAC,CACH,CAAC,IAAI,KAAK,CAAC,CACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE;QAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC;YACtC,OAAO,EAAE,KAAK;YACd,IAAI,EAAE;gBACJ,IAAI;gBACJ,MAAM;gBACN,UAAU;gBACV,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACvE,QAAQ;aACT;YACD,GAAG;YACH,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,cAAc,OAAO,IAAI,IAAI,KAAK;SACxC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,oBAAoB,CAAC,OAAO,EAAE,QAAQ;QACpC,MAAM,YAAY,GAChB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO;YACL,KAAK;YACL,IAAI;YACJ,UAAU;YACV,aAAa,OAAO,CAAC,IAAI,EAAE;YAC3B,cAAc,OAAO,CAAC,QAAQ,EAAE;YAChC,cAAc,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACtC,IAAI;SACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,MAAc;IACnC,6CAA6C;IAC7C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qDAAqD,cAAc,CACjE,KAAK,CACN,EAAE,CACJ,CAAC;IACJ,CAAC;IAED,IACE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,KAAK,CACb,oFAAoF,IAAI,CAAC,SAAS,CAChG,IAAI,CACL,EAAE,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"nx.js","sourceRoot":"","sources":["../../../../../../../packages/ci/src/lib/monorepo/handlers/nx.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,OAAO,GACR,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,IAAI,EAAE,IAAI;IAEV,KAAK,CAAC,YAAY,CAAC,OAAO;QACxB,OAAO,CACL,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YACrD,CACE,MAAM,cAAc,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,cAAc,EAAE,IAAI;aACrB,CAAC,CACH,CAAC,IAAI,KAAK,CAAC,CACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE;QAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC;YACtC,OAAO,EAAE,KAAK;YACd,IAAI,EAAE;gBACJ,IAAI;gBACJ,MAAM;gBACN,UAAU;gBACV,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnE,QAAQ;aACT;YACD,GAAG;YACH,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,cAAc,OAAO,IAAI,IAAI,KAAK;SACxC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,oBAAoB,CAAC,OAAO,EAAE,QAAQ;QACpC,MAAM,YAAY,GAChB,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO;YACL,KAAK;YACL,IAAI;YACJ,UAAU;YACV,aAAa,OAAO,CAAC,IAAI,EAAE;YAC3B,cAAc,OAAO,CAAC,QAAQ,EAAE;YAChC,cAAc,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACtC,IAAI;SACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,MAAc;IACnC,6CAA6C;IAC7C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qDAAqD,cAAc,CACjE,KAAK,CACN,EAAE,CACJ,CAAC;IACJ,CAAC;IAED,IACE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,KAAK,CACb,oFAAoF,IAAI,CAAC,SAAS,CAChG,IAAI,CACL,EAAE,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type PortalDownloadArgs } from '@code-pushup/portal-client';
2
+ export declare function downloadReportFromPortal(args: PortalDownloadArgs): Promise<string | null>;
@@ -0,0 +1,16 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { downloadFromPortal, } from '@code-pushup/portal-client';
4
+ import { transformGQLReport } from './transform.js';
5
+ export async function downloadReportFromPortal(args) {
6
+ const gqlReport = await downloadFromPortal(args);
7
+ if (!gqlReport) {
8
+ return null;
9
+ }
10
+ const report = transformGQLReport(gqlReport);
11
+ const outputFile = path.join('tmp', 'code-pushup', 'portal', args.parameters.organization, args.parameters.project, 'report.json');
12
+ await mkdir(path.dirname(outputFile), { recursive: true });
13
+ await writeFile(outputFile, JSON.stringify(report, null, 2));
14
+ return outputFile;
15
+ }
16
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../../../packages/ci/src/lib/portal/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAEL,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAwB;IAExB,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,KAAK,EACL,aAAa,EACb,QAAQ,EACR,IAAI,CAAC,UAAU,CAAC,YAAY,EAC5B,IAAI,CAAC,UAAU,CAAC,OAAO,EACvB,aAAa,CACd,CAAC;IACF,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1 @@
1
+ export { downloadReportFromPortal } from './download.js';
@@ -0,0 +1,2 @@
1
+ export { downloadReportFromPortal } from './download.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/ci/src/lib/portal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ReportFragment } from '@code-pushup/portal-client';
2
+ import type { Report } from '@code-pushup/models';
3
+ export declare function transformGQLReport(report: ReportFragment): Report;
@@ -0,0 +1,179 @@
1
+ import { lowercase } from '@code-pushup/utils';
2
+ export function transformGQLReport(report) {
3
+ return {
4
+ commit: transformGQLCommit(report.commit),
5
+ plugins: report.plugins.map(plugin => transformGQLPlugin(plugin, report.issues?.edges.map(({ node }) => node) ?? [])),
6
+ categories: report.categories.map(transformGQLCategory),
7
+ // TODO: make report metadata required in Portal API?
8
+ packageName: report.packageName ?? 'unknown',
9
+ version: report.packageVersion ?? 'unknown',
10
+ date: report.commandStartDate ?? '',
11
+ duration: report.commandDuration ?? 0,
12
+ };
13
+ }
14
+ function transformGQLCommit(commit) {
15
+ return {
16
+ hash: commit.sha,
17
+ message: commit.message,
18
+ // TODO: make commit author and date required in Portal API?
19
+ author: commit.author
20
+ ? `${commit.author.name} <${commit.author.email}>`
21
+ : 'unknown',
22
+ date: commit.date ? new Date(commit.date) : new Date(),
23
+ };
24
+ }
25
+ function transformGQLCategory(category) {
26
+ return {
27
+ slug: category.slug,
28
+ title: category.title,
29
+ isBinary: category.isBinary,
30
+ ...(category.description && { description: category.description }),
31
+ refs: category.refs.map(({ target, weight }) => ({
32
+ type: lowercase(target.__typename),
33
+ plugin: target.plugin.slug,
34
+ slug: target.slug,
35
+ weight,
36
+ })),
37
+ };
38
+ }
39
+ function transformGQLPlugin(plugin, issues) {
40
+ return {
41
+ slug: plugin.slug,
42
+ title: plugin.title,
43
+ icon: plugin.icon,
44
+ ...(plugin.description && { description: plugin.description }),
45
+ ...(plugin.docsUrl && { docsUrl: plugin.docsUrl }),
46
+ audits: plugin.audits.edges.map(({ node }) => transformGQLAudit(node, issues.filter(issue => issue.audit.plugin.slug === plugin.slug &&
47
+ issue.audit.slug === node.slug))),
48
+ groups: plugin.groups.map(transformGQLGroup),
49
+ ...(plugin.packageName && { packageName: plugin.packageName }),
50
+ ...(plugin.packageVersion && { version: plugin.packageVersion }),
51
+ // TODO: make plugin metadata required in Portal API?
52
+ date: plugin.runnerStartDate ?? '',
53
+ duration: plugin.runnerDuration ?? 0,
54
+ };
55
+ }
56
+ function transformGQLGroup(group) {
57
+ return {
58
+ slug: group.slug,
59
+ title: group.title,
60
+ ...(group.description && { description: group.description }),
61
+ refs: group.refs.map(({ target, weight }) => ({
62
+ slug: target.slug,
63
+ weight,
64
+ })),
65
+ };
66
+ }
67
+ function transformGQLAudit(audit, issues) {
68
+ return {
69
+ slug: audit.slug,
70
+ title: audit.title,
71
+ ...(audit.description && { description: audit.description }),
72
+ ...(audit.docsUrl && { docsUrl: audit.docsUrl }),
73
+ score: audit.score,
74
+ value: audit.value,
75
+ ...(audit.formattedValue && { displayValue: audit.formattedValue }),
76
+ ...(audit.details?.enabled && {
77
+ details: {
78
+ ...(issues.length > 0 && {
79
+ issues: issues.map(transformGQLIssue),
80
+ }),
81
+ ...(audit.details.tables[0] && {
82
+ table: transformGQLTable(audit.details.tables[0]),
83
+ }),
84
+ ...(audit.details.trees.length > 0 && {
85
+ trees: audit.details.trees.map(transformGQLTree),
86
+ }),
87
+ },
88
+ }),
89
+ };
90
+ }
91
+ function transformGQLIssue(issue) {
92
+ return {
93
+ message: issue.message,
94
+ severity: lowercase(issue.severity),
95
+ ...(issue.source?.__typename === 'SourceCodeLocation' && {
96
+ source: {
97
+ file: issue.source.filePath,
98
+ position: {
99
+ startLine: issue.source.startLine ?? 0,
100
+ ...(issue.source.startColumn != null && {
101
+ startColumn: issue.source.startColumn,
102
+ }),
103
+ ...(issue.source.endLine != null && {
104
+ endLine: issue.source.endLine,
105
+ }),
106
+ ...(issue.source.endColumn != null && {
107
+ endColumn: issue.source.endColumn,
108
+ }),
109
+ },
110
+ },
111
+ }),
112
+ };
113
+ }
114
+ function transformGQLTable(table) {
115
+ if (!table.header) {
116
+ return {
117
+ ...(table.title && { title: table.title }),
118
+ rows: table.body.map(cells => cells.map(cell => cell.content)),
119
+ };
120
+ }
121
+ return {
122
+ ...(table.title && { title: table.title }),
123
+ columns: table.header.map(({ content, alignment }, idx) => ({
124
+ key: idx.toString(),
125
+ label: content,
126
+ align: lowercase(alignment),
127
+ })),
128
+ rows: table.body.map(cells => Object.fromEntries(cells.map((cell, idx) => [idx, cell.content]))),
129
+ };
130
+ }
131
+ function transformGQLTree(tree) {
132
+ switch (tree.__typename) {
133
+ case 'BasicTree':
134
+ return {
135
+ type: 'basic',
136
+ ...(tree.title && { title: tree.title }),
137
+ root: transformGQLBasicTreeNode(tree.root),
138
+ };
139
+ case 'CoverageTree':
140
+ return {
141
+ type: 'coverage',
142
+ ...(tree.title && { title: tree.title }),
143
+ root: transformGQLCoverageTreeNode(tree.root),
144
+ };
145
+ }
146
+ }
147
+ function transformGQLBasicTreeNode(node) {
148
+ return {
149
+ name: node.name,
150
+ ...(node.customValues && {
151
+ values: Object.fromEntries(node.customValues.map(({ key, value }) => [key, value])),
152
+ }),
153
+ ...(node.children && {
154
+ children: node.children.map(transformGQLBasicTreeNode),
155
+ }),
156
+ };
157
+ }
158
+ function transformGQLCoverageTreeNode(node) {
159
+ return {
160
+ name: node.name,
161
+ values: {
162
+ coverage: node.values.coverage,
163
+ ...(node.values.missing && {
164
+ missing: node.values.missing.map(missing => ({
165
+ ...(missing.kind && { kind: missing.kind }),
166
+ ...(missing.name && { name: missing.name }),
167
+ startLine: missing.startLine,
168
+ ...(missing.startColumn && { startColumn: missing.startColumn }),
169
+ ...(missing.endLine && { endLine: missing.endLine }),
170
+ ...(missing.endColumn && { endColumn: missing.endColumn }),
171
+ })),
172
+ }),
173
+ },
174
+ ...(node.children && {
175
+ children: node.children.map(transformGQLCoverageTreeNode),
176
+ }),
177
+ };
178
+ }
179
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../../../packages/ci/src/lib/portal/transform.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { CoreConfig } from '@code-pushup/models';
1
+ import { type EnhancedPersistConfig } from './cli/index.js';
2
2
  import type { MonorepoRunResult } from './models.js';
3
3
  import { type RunEnv } from './run-utils.js';
4
4
  export declare function runInMonorepoMode(env: RunEnv): Promise<MonorepoRunResult>;
5
5
  export declare function allProjectsHaveDefaultPersistFormats(projects: {
6
- config: Pick<CoreConfig, 'persist'>;
6
+ config: EnhancedPersistConfig;
7
7
  }[]): boolean;
@@ -1,10 +1,11 @@
1
+ /* eslint-disable max-lines */
1
2
  import { readFile } from 'node:fs/promises';
2
3
  import { asyncSequential, hasNoNullableProps, } from '@code-pushup/utils';
3
- import { createCommandContext, persistedFilesFromConfig, runCollect, runMergeDiffs, } from './cli/index.js';
4
+ import { createCommandContext, persistedFilesFromConfig, runCollect, runCompare, runMergeDiffs, } from './cli/index.js';
4
5
  import { commentOnPR } from './comment.js';
5
6
  import { listMonorepoProjects, } from './monorepo/index.js';
6
7
  import { saveOutputFiles } from './output-files.js';
7
- import { checkPrintConfig, compareReports, hasDefaultPersistFormats, loadCachedBaseReport, printPersistConfig, runInBaseBranch, runOnProject, saveReportFiles, } from './run-utils.js';
8
+ import { checkPrintConfig, configFromPatterns, hasDefaultPersistFormats, loadCachedBaseReport, prepareReportFilesToCompare, printPersistConfig, runInBaseBranch, runOnProject, saveDiffFiles, saveReportFiles, } from './run-utils.js';
8
9
  export async function runInMonorepoMode(env) {
9
10
  const { api, settings } = env;
10
11
  const { logger } = settings;
@@ -45,20 +46,9 @@ async function runProjectsInBulk(projects, runManyCommand, env) {
45
46
  const { refs: { base }, settings, } = env;
46
47
  const { logger } = settings;
47
48
  logger.info(`Running on ${projects.length} projects in bulk (parallel: ${settings.parallel})`);
48
- const currProjectConfigs = await asyncSequential(projects, async (project) => {
49
- const ctx = createCommandContext(settings, project);
50
- const config = await printPersistConfig(ctx);
51
- return { project, config, ctx };
52
- });
53
- const hasFormats = allProjectsHaveDefaultPersistFormats(currProjectConfigs);
54
- logger.debug([
55
- `Loaded ${currProjectConfigs.length} persist configs by running print-config command for each project.`,
56
- hasFormats
57
- ? 'Every project has default persist formats.'
58
- : 'Not all projects have default persist formats.',
59
- ].join(' '));
49
+ const { projectEnvs, hasFormats } = await loadProjectEnvs(projects, settings);
60
50
  await collectMany(runManyCommand, env, { hasFormats });
61
- const currProjectReports = await Promise.all(currProjectConfigs.map(async ({ project, config, ctx }) => {
51
+ const currProjectReports = await Promise.all(projectEnvs.map(async ({ project, config, ctx }) => {
62
52
  const reports = await saveOutputFiles({
63
53
  project,
64
54
  type: 'current',
@@ -72,9 +62,33 @@ async function runProjectsInBulk(projects, runManyCommand, env) {
72
62
  }
73
63
  return compareProjectsInBulk(currProjectReports, base, runManyCommand, env);
74
64
  }
65
+ async function loadProjectEnvs(projects, settings) {
66
+ const { logger, configPatterns } = settings;
67
+ const projectEnvs = configPatterns
68
+ ? projects.map((project) => ({
69
+ project,
70
+ config: configFromPatterns(configPatterns, project),
71
+ ctx: createCommandContext(settings, project),
72
+ }))
73
+ : await asyncSequential(projects, async (project) => {
74
+ const ctx = createCommandContext(settings, project);
75
+ const config = await printPersistConfig(ctx);
76
+ return { project, config, ctx };
77
+ });
78
+ const hasFormats = allProjectsHaveDefaultPersistFormats(projectEnvs);
79
+ logger.debug([
80
+ configPatterns
81
+ ? `Parsed ${projectEnvs.length} persist and upload configs by interpolating configPatterns option for each project.`
82
+ : `Loaded ${projectEnvs.length} persist and upload configs by running print-config command for each project.`,
83
+ hasFormats
84
+ ? 'Every project has default persist formats.'
85
+ : 'Not all projects have default persist formats.',
86
+ ].join(' '));
87
+ return { projectEnvs, hasFormats };
88
+ }
75
89
  async function compareProjectsInBulk(currProjectReports, base, runManyCommand, env) {
76
90
  const projectReportsWithCache = await Promise.all(currProjectReports.map(async ({ project, ctx, reports, config }) => {
77
- const args = { project, base, ctx, env };
91
+ const args = { project, config, base, ctx, env };
78
92
  const [currReport, prevReport] = await Promise.all([
79
93
  readFile(reports.json, 'utf8').then((content) => ({
80
94
  content,
@@ -93,12 +107,19 @@ async function compareProjectsInBulk(currProjectReports, base, runManyCommand, e
93
107
  prevReport: args.prevReport || collectedPrevReports[args.project.name],
94
108
  }))
95
109
  .filter(hasNoNullableProps);
96
- const projectComparisons = Object.fromEntries(await asyncSequential(projectsToCompare, async (args) => [
97
- args.project.name,
98
- await compareReports(args),
99
- ]));
110
+ const projectComparisons = await compareManyProjects(projectsToCompare, runManyCommand, env);
100
111
  return finalizeProjectReports(currProjectReports, projectComparisons);
101
112
  }
113
+ async function compareManyProjects(projectsToCompare, runManyCommand, env) {
114
+ await Promise.all(projectsToCompare.map(prepareReportFilesToCompare));
115
+ await compareMany(runManyCommand, env, {
116
+ hasFormats: allProjectsHaveDefaultPersistFormats(projectsToCompare),
117
+ });
118
+ return Object.fromEntries(await Promise.all(projectsToCompare.map(async (args) => [
119
+ args.project.name,
120
+ await saveDiffFiles(args),
121
+ ])));
122
+ }
102
123
  function finalizeProjectReports(projectReports, projectComparisons) {
103
124
  return projectReports.map(({ project, reports }) => {
104
125
  const comparison = projectComparisons?.[project.name];
@@ -111,20 +132,25 @@ function finalizeProjectReports(projectReports, projectComparisons) {
111
132
  }
112
133
  async function collectPreviousReports(base, uncachedProjectReports, runManyCommand, env) {
113
134
  const { settings } = env;
114
- const { logger } = settings;
135
+ const { logger, configPatterns } = settings;
115
136
  if (uncachedProjectReports.length === 0) {
116
137
  return {};
117
138
  }
118
139
  return runInBaseBranch(base, env, async () => {
119
- const uncachedProjectConfigs = await asyncSequential(uncachedProjectReports, async (args) => ({
120
- name: args.project.name,
121
- ctx: args.ctx,
122
- config: await checkPrintConfig(args),
123
- }));
140
+ const uncachedProjectConfigs = configPatterns
141
+ ? uncachedProjectReports.map(({ project, ctx }) => {
142
+ const config = configFromPatterns(configPatterns, project);
143
+ return { project, ctx, config };
144
+ })
145
+ : await asyncSequential(uncachedProjectReports, async (args) => ({
146
+ project: args.project,
147
+ ctx: args.ctx,
148
+ config: await checkPrintConfig(args),
149
+ }));
124
150
  const validProjectConfigs = uncachedProjectConfigs.filter(hasNoNullableProps);
125
- const onlyProjects = validProjectConfigs.map(({ name }) => name);
151
+ const onlyProjects = validProjectConfigs.map(({ project }) => project.name);
126
152
  const invalidProjects = uncachedProjectConfigs
127
- .map(({ name }) => name)
153
+ .map(({ project }) => project.name)
128
154
  .filter(name => !onlyProjects.includes(name));
129
155
  if (invalidProjects.length > 0) {
130
156
  logger.debug(`Printing config failed for ${invalidProjects.length} projects - ${invalidProjects.join(', ')}`);
@@ -140,14 +166,14 @@ async function collectPreviousReports(base, uncachedProjectReports, runManyComma
140
166
  });
141
167
  }
142
168
  async function savePreviousProjectReport(args) {
143
- const { name, ctx, config, settings } = args;
169
+ const { project, ctx, config, settings } = args;
144
170
  const files = await saveReportFiles({
145
- project: { name },
171
+ project,
146
172
  type: 'previous',
147
173
  files: persistedFilesFromConfig(config, ctx),
148
174
  settings,
149
175
  });
150
- return [name, files];
176
+ return [project.name, files];
151
177
  }
152
178
  async function collectMany(runManyCommand, env, options) {
153
179
  const { settings } = env;
@@ -163,6 +189,16 @@ async function collectMany(runManyCommand, env, options) {
163
189
  : 'all current';
164
190
  settings.logger.debug(`Collected ${countText} reports using command \`${command}\``);
165
191
  }
192
+ async function compareMany(runManyCommand, env, options) {
193
+ const { settings } = env;
194
+ const { hasFormats } = options;
195
+ const ctx = {
196
+ ...createCommandContext(settings, null),
197
+ bin: await runManyCommand(),
198
+ };
199
+ await runCompare(ctx, { hasFormats });
200
+ settings.logger.debug('Compared all project reports');
201
+ }
166
202
  export function allProjectsHaveDefaultPersistFormats(projects) {
167
203
  return projects.every(({ config }) => hasDefaultPersistFormats(config));
168
204
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-monorepo.js","sourceRoot":"","sources":["../../../../../packages/ci/src/lib/run-monorepo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-monorepo.js","sourceRoot":"","sources":["../../../../../packages/ci/src/lib/run-monorepo.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { SimpleGit } from 'simple-git';
2
- import { type CoreConfig } from '@code-pushup/models';
3
- import { type CommandContext } from './cli/index.js';
2
+ import { type Diff } from '@code-pushup/utils';
3
+ import { type CommandContext, type EnhancedPersistConfig } from './cli/index.js';
4
4
  import { type SourceFileIssue } from './issues.js';
5
- import type { GitBranch, GitRefs, Options, OutputFiles, ProjectRunResult, ProviderAPIClient, Settings } from './models.js';
5
+ import type { ConfigPatterns, GitBranch, GitRefs, Options, OutputFiles, ProjectRunResult, ProviderAPIClient, Settings } from './models.js';
6
6
  import type { ProjectConfig } from './monorepo/index.js';
7
7
  export type RunEnv = {
8
8
  refs: NormalizedGitRefs;
@@ -17,13 +17,15 @@ type NormalizedGitRefs = {
17
17
  export type CompareReportsArgs = {
18
18
  project: ProjectConfig | null;
19
19
  env: RunEnv;
20
+ ctx: CommandContext;
20
21
  base: GitBranch;
21
22
  currReport: ReportData<'current'>;
22
23
  prevReport: ReportData<'previous'>;
23
- config: Pick<CoreConfig, 'persist'>;
24
+ config: EnhancedPersistConfig;
24
25
  };
25
26
  export type BaseReportArgs = {
26
27
  project: ProjectConfig | null;
28
+ config: EnhancedPersistConfig;
27
29
  env: RunEnv;
28
30
  base: GitBranch;
29
31
  ctx: CommandContext;
@@ -35,6 +37,16 @@ export type ReportData<T extends 'current' | 'previous'> = {
35
37
  export declare function createRunEnv(refs: GitRefs, api: ProviderAPIClient, options: Options | undefined, git: SimpleGit): Promise<RunEnv>;
36
38
  export declare function runOnProject(project: ProjectConfig | null, env: RunEnv): Promise<ProjectRunResult>;
37
39
  export declare function compareReports(args: CompareReportsArgs): Promise<ProjectRunResult>;
40
+ export declare function prepareReportFilesToCompare(args: CompareReportsArgs): Promise<Diff<string>>;
41
+ export declare function saveDiffFiles(args: CompareReportsArgs): Promise<{
42
+ newIssues?: SourceFileIssue[] | undefined;
43
+ name: string;
44
+ files: {
45
+ current: OutputFiles;
46
+ previous: OutputFiles | Pick<OutputFiles, "json">;
47
+ comparison: Record<"json" | "md", string>;
48
+ };
49
+ }>;
38
50
  export declare function saveReportFiles<T extends 'current' | 'previous'>(args: {
39
51
  project: Pick<ProjectConfig, 'name'> | null;
40
52
  type: T;
@@ -44,9 +56,10 @@ export declare function saveReportFiles<T extends 'current' | 'previous'>(args:
44
56
  export declare function collectPreviousReport(args: BaseReportArgs): Promise<ReportData<'previous'> | null>;
45
57
  export declare function loadCachedBaseReport(args: BaseReportArgs): Promise<ReportData<'previous'> | null>;
46
58
  export declare function runInBaseBranch<T>(base: GitBranch, env: RunEnv, fn: () => Promise<T>): Promise<T>;
47
- export declare function checkPrintConfig(args: BaseReportArgs): Promise<Pick<CoreConfig, 'persist'> | null>;
48
- export declare function printPersistConfig(ctx: CommandContext): Promise<Pick<CoreConfig, 'persist'>>;
49
- export declare function hasDefaultPersistFormats(config: Pick<CoreConfig, 'persist'>): boolean;
59
+ export declare function checkPrintConfig(args: BaseReportArgs): Promise<EnhancedPersistConfig | null>;
60
+ export declare function printPersistConfig(ctx: CommandContext): Promise<EnhancedPersistConfig>;
61
+ export declare function hasDefaultPersistFormats(config: EnhancedPersistConfig): boolean;
62
+ export declare function configFromPatterns(configPatterns: ConfigPatterns, project: ProjectConfig | null): ConfigPatterns;
50
63
  export declare function findNewIssues(args: CompareReportsArgs & {
51
64
  diffFiles: OutputFiles;
52
65
  }): Promise<SourceFileIssue[]>;
@@ -1,15 +1,16 @@
1
1
  /* eslint-disable max-lines */
2
- import { readFile } from 'node:fs/promises';
3
- import { DEFAULT_PERSIST_FORMAT, } from '@code-pushup/models';
4
- import { removeUndefinedAndEmptyProps, stringifyError, } from '@code-pushup/utils';
5
- import { createCommandContext, persistedFilesFromConfig, runCollect, runCompare, runPrintConfig, } from './cli/index.js';
6
- import { parsePersistConfig } from './cli/persist.js';
2
+ import { readFile, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { DEFAULT_PERSIST_FILENAME, DEFAULT_PERSIST_FORMAT, DEFAULT_PERSIST_OUTPUT_DIR, } from '@code-pushup/models';
5
+ import { createReportPath, interpolate, objectFromEntries, readJsonFile, removeUndefinedAndEmptyProps, stringifyError, } from '@code-pushup/utils';
6
+ import { createCommandContext, parsePersistConfig, persistedFilesFromConfig, runCollect, runCompare, runPrintConfig, } from './cli/index.js';
7
7
  import { DEFAULT_SETTINGS } from './constants.js';
8
8
  import { listChangedFiles, normalizeGitRef } from './git.js';
9
9
  import { filterRelevantIssues } from './issues.js';
10
10
  import { saveOutputFiles } from './output-files.js';
11
+ import { downloadReportFromPortal } from './portal/download.js';
11
12
  export async function createRunEnv(refs, api, options, git) {
12
- const inferredVerbose = Boolean(options?.debug === true || options?.silent === false);
13
+ const inferredVerbose = options?.debug === true || options?.silent === false;
13
14
  // eslint-disable-next-line functional/immutable-data
14
15
  process.env['CP_VERBOSE'] = `${inferredVerbose}`;
15
16
  const [head, base] = await Promise.all([
@@ -33,8 +34,12 @@ export async function runOnProject(project, env) {
33
34
  if (project) {
34
35
  logger.info(`Running Code PushUp on monorepo project ${project.name}`);
35
36
  }
36
- const config = await printPersistConfig(ctx);
37
- logger.debug(`Loaded persist config from print-config command - ${JSON.stringify(config.persist)}`);
37
+ const config = settings.configPatterns
38
+ ? configFromPatterns(settings.configPatterns, project)
39
+ : await printPersistConfig(ctx);
40
+ logger.debug(settings.configPatterns
41
+ ? `Parsed persist and upload configs from configPatterns option - ${JSON.stringify(config)}`
42
+ : `Loaded persist and upload configs from print-config command - ${JSON.stringify(config)}`);
38
43
  await runCollect(ctx, { hasFormats: hasDefaultPersistFormats(config) });
39
44
  const currReport = await saveReportFiles({
40
45
  project,
@@ -51,28 +56,58 @@ export async function runOnProject(project, env) {
51
56
  return noDiffOutput;
52
57
  }
53
58
  logger.info(`PR/MR detected, preparing to compare base branch ${base.ref} to head ${head.ref}`);
54
- const prevReport = await collectPreviousReport({ project, env, base, ctx });
59
+ const baseArgs = { project, env, base, config, ctx };
60
+ const prevReport = await collectPreviousReport(baseArgs);
55
61
  if (!prevReport) {
56
62
  return noDiffOutput;
57
63
  }
58
- const compareArgs = { project, env, base, config, currReport, prevReport };
64
+ const compareArgs = { ...baseArgs, currReport, prevReport };
59
65
  return compareReports(compareArgs);
60
66
  }
61
67
  export async function compareReports(args) {
62
- const { project, env: { settings }, currReport, prevReport, config, } = args;
63
- const logger = settings.logger;
64
- const ctx = createCommandContext(settings, project);
65
- await runCompare({
66
- before: prevReport.files.json,
67
- after: currReport.files.json,
68
- label: project?.name,
69
- }, ctx);
68
+ const { ctx, env, config } = args;
69
+ const { logger } = env.settings;
70
+ await prepareReportFilesToCompare(args);
71
+ await runCompare(ctx, { hasFormats: hasDefaultPersistFormats(config) });
72
+ logger.info('Compared reports and generated diff files');
73
+ return saveDiffFiles(args);
74
+ }
75
+ export async function prepareReportFilesToCompare(args) {
76
+ const { config, project, env, ctx } = args;
77
+ const { outputDir = DEFAULT_PERSIST_OUTPUT_DIR, filename = DEFAULT_PERSIST_FILENAME, } = config.persist ?? {};
78
+ const label = project?.name;
79
+ const { logger } = env.settings;
80
+ const originalReports = await Promise.all([args.currReport, args.prevReport].map(({ files }) => readJsonFile(files.json)));
81
+ const labeledReports = label
82
+ ? originalReports.map(report => ({ ...report, label }))
83
+ : originalReports;
84
+ const reportPaths = labeledReports.map((report, idx) => {
85
+ const key = idx === 0 ? 'after' : 'before';
86
+ const filePath = createReportPath({
87
+ outputDir: path.resolve(ctx.directory, outputDir),
88
+ filename,
89
+ format: 'json',
90
+ suffix: key,
91
+ });
92
+ return { key, report, filePath };
93
+ });
94
+ await Promise.all(reportPaths.map(({ filePath, report }) => writeFile(filePath, JSON.stringify(report, null, 2))));
95
+ logger.debug([
96
+ 'Prepared',
97
+ project && `"${project.name}" project's`,
98
+ 'report files for comparison',
99
+ `at ${reportPaths.map(({ filePath }) => filePath).join(' and ')}`,
100
+ ]
101
+ .filter(Boolean)
102
+ .join(' '));
103
+ return objectFromEntries(reportPaths.map(({ key, filePath }) => [key, filePath]));
104
+ }
105
+ export async function saveDiffFiles(args) {
106
+ const { project, ctx, env: { settings }, currReport, prevReport, config, } = args;
70
107
  const diffFiles = persistedFilesFromConfig(config, {
71
108
  directory: ctx.directory,
72
109
  isDiff: true,
73
110
  });
74
- logger.info('Compared reports and generated diff files');
75
- logger.debug(`Generated diff files at ${diffFiles.json} and ${diffFiles.md}`);
76
111
  return {
77
112
  name: projectToName(project),
78
113
  files: {
@@ -100,13 +135,15 @@ export async function saveReportFiles(args) {
100
135
  export async function collectPreviousReport(args) {
101
136
  const { ctx, env, base, project } = args;
102
137
  const { settings } = env;
103
- const { logger } = settings;
138
+ const { logger, configPatterns } = settings;
104
139
  const cachedBaseReport = await loadCachedBaseReport(args);
105
140
  if (cachedBaseReport) {
106
141
  return cachedBaseReport;
107
142
  }
108
143
  return runInBaseBranch(base, env, async () => {
109
- const config = await checkPrintConfig(args);
144
+ const config = configPatterns
145
+ ? configFromPatterns(configPatterns, project)
146
+ : await checkPrintConfig(args);
110
147
  if (!config) {
111
148
  return null;
112
149
  }
@@ -122,19 +159,9 @@ export async function collectPreviousReport(args) {
122
159
  });
123
160
  }
124
161
  export async function loadCachedBaseReport(args) {
125
- const { project, env: { api, settings }, } = args;
126
- const { logger } = settings;
127
- const cachedBaseReport = await api
128
- .downloadReportArtifact?.(project?.name)
129
- .catch((error) => {
130
- logger.warn(`Error when downloading previous report artifact, skipping - ${stringifyError(error)}`);
131
- });
132
- if (api.downloadReportArtifact != null) {
133
- logger.info(`Previous report artifact ${cachedBaseReport ? 'found' : 'not found'}`);
134
- if (cachedBaseReport) {
135
- logger.debug(`Previous report artifact downloaded to ${cachedBaseReport}`);
136
- }
137
- }
162
+ const { project, env: { settings }, } = args;
163
+ const cachedBaseReport = (await loadCachedBaseReportFromPortal(args)) ??
164
+ (await loadCachedBaseReportFromArtifacts(args));
138
165
  if (!cachedBaseReport) {
139
166
  return null;
140
167
  }
@@ -145,6 +172,47 @@ export async function loadCachedBaseReport(args) {
145
172
  settings,
146
173
  });
147
174
  }
175
+ async function loadCachedBaseReportFromArtifacts(args) {
176
+ const { env: { api, settings }, project, } = args;
177
+ const { logger } = settings;
178
+ if (api.downloadReportArtifact == null) {
179
+ return null;
180
+ }
181
+ const reportPath = await api
182
+ .downloadReportArtifact(project?.name)
183
+ .catch((error) => {
184
+ logger.warn(`Error when downloading previous report artifact, skipping - ${stringifyError(error)}`);
185
+ return null;
186
+ });
187
+ logger.info(`Previous report artifact ${reportPath ? 'found' : 'not found'}`);
188
+ if (reportPath) {
189
+ logger.debug(`Previous report artifact downloaded to ${reportPath}`);
190
+ }
191
+ return reportPath;
192
+ }
193
+ async function loadCachedBaseReportFromPortal(args) {
194
+ const { config, env: { settings }, } = args;
195
+ const { logger } = settings;
196
+ if (!config.upload) {
197
+ return null;
198
+ }
199
+ const reportPath = await downloadReportFromPortal({
200
+ server: config.upload.server,
201
+ apiKey: config.upload.apiKey,
202
+ parameters: {
203
+ organization: config.upload.organization,
204
+ project: config.upload.project,
205
+ },
206
+ }).catch((error) => {
207
+ logger.warn(`Error when downloading previous report from portal, skipping - ${stringifyError(error)}`);
208
+ return null;
209
+ });
210
+ logger.info(`Previous report ${reportPath ? 'found' : 'not found'} in Code PushUp portal`);
211
+ if (reportPath) {
212
+ logger.debug(`Previous report downloaded from portal to ${reportPath}`);
213
+ }
214
+ return reportPath;
215
+ }
148
216
  export async function runInBaseBranch(base, env, fn) {
149
217
  const { git, settings: { logger }, } = env;
150
218
  await git.fetch('origin', base.ref, ['--depth=1']);
@@ -181,6 +249,28 @@ export function hasDefaultPersistFormats(config) {
181
249
  return (formats == null ||
182
250
  DEFAULT_PERSIST_FORMAT.every(format => formats.includes(format)));
183
251
  }
252
+ export function configFromPatterns(configPatterns, project) {
253
+ const { persist, upload } = configPatterns;
254
+ const variables = {
255
+ projectName: project?.name ?? '',
256
+ };
257
+ return {
258
+ persist: {
259
+ outputDir: interpolate(persist.outputDir, variables),
260
+ filename: interpolate(persist.filename, variables),
261
+ format: persist.format,
262
+ },
263
+ ...(upload && {
264
+ upload: {
265
+ server: upload.server,
266
+ apiKey: upload.apiKey,
267
+ organization: interpolate(upload.organization, variables),
268
+ project: interpolate(upload.project, variables),
269
+ ...(upload.timeout != null && { timeout: upload.timeout }),
270
+ },
271
+ }),
272
+ };
273
+ }
184
274
  export async function findNewIssues(args) {
185
275
  const { base, currReport, prevReport, diffFiles, env: { git, settings: { logger }, }, } = args;
186
276
  await git.fetch('origin', base.ref, ['--depth=1']);
@@ -1 +1 @@
1
- {"version":3,"file":"run-utils.js","sourceRoot":"","sources":["../../../../../packages/ci/src/lib/run-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-utils.js","sourceRoot":"","sources":["../../../../../packages/ci/src/lib/run-utils.ts"],"names":[],"mappings":"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"}