@lage-run/cli 0.34.0 → 0.34.1

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.
Files changed (42) hide show
  1. package/lib/commands/createReporter.d.ts +23 -1
  2. package/lib/commands/createReporter.js +51 -27
  3. package/lib/commands/createReporter.js.map +1 -1
  4. package/lib/commands/exec/action.js +6 -1
  5. package/lib/commands/exec/action.js.map +1 -1
  6. package/lib/commands/exec/executeRemotely.js +5 -2
  7. package/lib/commands/exec/executeRemotely.js.map +1 -1
  8. package/lib/commands/info/action.d.ts +7 -1
  9. package/lib/commands/info/action.js +13 -9
  10. package/lib/commands/info/action.js.map +1 -1
  11. package/lib/commands/initializeReporters.d.ts +2 -1
  12. package/lib/commands/initializeReporters.js +3 -3
  13. package/lib/commands/initializeReporters.js.map +1 -1
  14. package/lib/commands/run/createTargetGraph.d.ts +2 -2
  15. package/lib/commands/run/createTargetGraph.js +26 -8
  16. package/lib/commands/run/createTargetGraph.js.map +1 -1
  17. package/lib/commands/run/runAction.js +5 -2
  18. package/lib/commands/run/runAction.js.map +1 -1
  19. package/lib/commands/run/watchAction.js +2 -2
  20. package/lib/commands/run/watchAction.js.map +1 -1
  21. package/lib/commands/server/action.js +7 -2
  22. package/lib/commands/server/action.js.map +1 -1
  23. package/lib/filter/getFilteredPackages.js +11 -2
  24. package/lib/filter/getFilteredPackages.js.map +1 -1
  25. package/lib/filter/hasRepoChanged.d.ts +13 -1
  26. package/lib/filter/hasRepoChanged.js +14 -12
  27. package/lib/filter/hasRepoChanged.js.map +1 -1
  28. package/lib/index.d.ts +4 -2
  29. package/lib/internal.d.ts +1 -0
  30. package/lib/internal.js +4 -0
  31. package/lib/internal.js.map +1 -0
  32. package/lib/optimizeTargetGraph.js +1 -1
  33. package/lib/optimizeTargetGraph.js.map +1 -1
  34. package/lib/types/ReporterInitOptions.d.ts +4 -0
  35. package/lib/types/ReporterInitOptions.js.map +1 -1
  36. package/package.json +10 -10
  37. package/lib/cache/isRunningFromCI.d.ts +0 -1
  38. package/lib/cache/isRunningFromCI.js +0 -11
  39. package/lib/cache/isRunningFromCI.js.map +0 -1
  40. package/lib/commands/isRunningFromCI.d.ts +0 -1
  41. package/lib/commands/isRunningFromCI.js +0 -11
  42. package/lib/commands/isRunningFromCI.js.map +0 -1
@@ -16,19 +16,32 @@ function getChangedFiles(since, cwd) {
16
16
  const targetBranch = since || (0, _workspacetools.getDefaultRemoteBranch)({
17
17
  cwd
18
18
  });
19
- const changes = [
19
+ return [
20
20
  ...new Set([
21
- ...(0, _workspacetools.getUntrackedChanges)(cwd) || [],
22
- ...(0, _workspacetools.getUnstagedChanges)(cwd) || [],
23
- ...(0, _workspacetools.getBranchChanges)(targetBranch, cwd) || [],
24
- ...(0, _workspacetools.getStagedChanges)(cwd) || []
21
+ ...(0, _workspacetools.getUntrackedChanges)({
22
+ cwd
23
+ }) || [],
24
+ ...(0, _workspacetools.getUnstagedChanges)({
25
+ cwd
26
+ }) || [],
27
+ ...(0, _workspacetools.getBranchChanges)({
28
+ branch: targetBranch,
29
+ cwd
30
+ }) || [],
31
+ ...(0, _workspacetools.getStagedChanges)({
32
+ cwd
33
+ }) || []
25
34
  ])
26
35
  ];
27
- return changes;
28
36
  }
29
37
  async function createTargetGraph(options) {
30
38
  const { logger, root, dependencies, dependents, enableTargetConfigMerging, enablePhantomTargetOptimization, since, scope, repoWideChanges, ignore, pipeline, outputs, tasks, packageInfos, priorities } = options;
31
- const builder = new _targetgraph.WorkspaceTargetGraphBuilder(root, packageInfos, enableTargetConfigMerging, enablePhantomTargetOptimization);
39
+ const builder = new _targetgraph.WorkspaceTargetGraphBuilder({
40
+ root,
41
+ packageInfos,
42
+ enableTargetConfigMerging,
43
+ enablePhantomTargetOptimization
44
+ });
32
45
  const packages = (0, _getFilteredPackages.getFilteredPackages)({
33
46
  root,
34
47
  logger,
@@ -44,7 +57,12 @@ async function createTargetGraph(options) {
44
57
  // TODO: enhancement would be for workspace-tools to implement a "getChangedPackageFromChangedFiles()" type function
45
58
  // TODO: optimize this so that we don't double up the work to determine if repo has changed
46
59
  if (since) {
47
- if (!(0, _hasRepoChanged.hasRepoChanged)(since, root, repoWideChanges, logger)) {
60
+ if (!(0, _hasRepoChanged.hasRepoChanged)({
61
+ since,
62
+ root,
63
+ environmentGlob: repoWideChanges,
64
+ logger
65
+ })) {
48
66
  changedFiles = getChangedFiles(since, root);
49
67
  }
50
68
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/run/createTargetGraph.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport { type TargetGraph, WorkspaceTargetGraphBuilder } from \"@lage-run/target-graph\";\nimport type { PackageInfos } from \"workspace-tools\";\nimport { getBranchChanges, getDefaultRemoteBranch, getStagedChanges, getUnstagedChanges, getUntrackedChanges } from \"workspace-tools\";\nimport { getFilteredPackages } from \"../../filter/getFilteredPackages.js\";\nimport type { PipelineDefinition, Priority } from \"@lage-run/config\";\nimport { hasRepoChanged } from \"../../filter/hasRepoChanged.js\";\n\ninterface CreateTargetGraphOptions {\n logger: Logger;\n root: string;\n dependencies: boolean;\n dependents: boolean;\n since?: string;\n scope?: string[];\n ignore: string[];\n repoWideChanges: string[];\n pipeline: PipelineDefinition;\n outputs: string[];\n tasks: string[];\n packageInfos: PackageInfos;\n priorities: Priority[];\n enableTargetConfigMerging: boolean;\n enablePhantomTargetOptimization: boolean;\n}\n\nfunction getChangedFiles(since: string, cwd: string) {\n const targetBranch = since || getDefaultRemoteBranch({ cwd });\n\n const changes = [\n ...new Set([\n ...(getUntrackedChanges(cwd) || []),\n ...(getUnstagedChanges(cwd) || []),\n ...(getBranchChanges(targetBranch, cwd) || []),\n ...(getStagedChanges(cwd) || []),\n ]),\n ];\n\n return changes;\n}\n\nexport async function createTargetGraph(options: CreateTargetGraphOptions): Promise<TargetGraph> {\n const {\n logger,\n root,\n dependencies,\n dependents,\n enableTargetConfigMerging,\n enablePhantomTargetOptimization,\n since,\n scope,\n repoWideChanges,\n ignore,\n pipeline,\n outputs,\n tasks,\n packageInfos,\n priorities,\n } = options;\n\n const builder = new WorkspaceTargetGraphBuilder(root, packageInfos, enableTargetConfigMerging, enablePhantomTargetOptimization);\n\n const packages = getFilteredPackages({\n root,\n logger,\n packageInfos,\n includeDependencies: dependencies,\n includeDependents: dependents,\n since,\n scope,\n repoWideChanges,\n sinceIgnoreGlobs: ignore,\n });\n\n let changedFiles: string[] = [];\n\n // TODO: enhancement would be for workspace-tools to implement a \"getChangedPackageFromChangedFiles()\" type function\n // TODO: optimize this so that we don't double up the work to determine if repo has changed\n if (since) {\n if (!hasRepoChanged(since, root, repoWideChanges, logger)) {\n changedFiles = getChangedFiles(since, root);\n }\n }\n\n const pipelineEntries = Object.entries(pipeline);\n\n // Add lage pipeline configuration in the package.json files.\n // They are configured in the lage field, but without the package id.\n // i.e. having this package.json\n // { \"name\": \"@lage-run/globby\", \"lage\": { \"transpile\": { type: \"npmScript\" } }}\n // is equivalent to having the following in lage.config.js\n // { pipeline: { \"@lage-run/globby#transpile\": { type: \"npmScript\" } }\n // We conciously add these 'after' the ones in lage.config.js\n // to indicate that the more specific package.json definition takes\n // precedence over the global lage.config.js.\n for (const [packageId, packageInfo] of Object.entries(packageInfos)) {\n const packageLageDefinition = packageInfo.lage as PipelineDefinition;\n if (packageLageDefinition) {\n for (const [id, definition] of Object.entries(packageLageDefinition)) {\n pipelineEntries.push([packageId + \"#\" + id, definition]);\n }\n }\n }\n\n for (const [id, definition] of pipelineEntries) {\n if (Array.isArray(definition)) {\n await builder.addTargetConfig(\n id,\n {\n cache: true,\n dependsOn: definition,\n options: {},\n outputs,\n },\n changedFiles\n );\n } else {\n await builder.addTargetConfig(id, definition, changedFiles);\n }\n }\n\n return await builder.build(tasks, packages, priorities);\n}\n"],"names":["createTargetGraph","getChangedFiles","since","cwd","targetBranch","getDefaultRemoteBranch","changes","Set","getUntrackedChanges","getUnstagedChanges","getBranchChanges","getStagedChanges","options","logger","root","dependencies","dependents","enableTargetConfigMerging","enablePhantomTargetOptimization","scope","repoWideChanges","ignore","pipeline","outputs","tasks","packageInfos","priorities","builder","WorkspaceTargetGraphBuilder","packages","getFilteredPackages","includeDependencies","includeDependents","sinceIgnoreGlobs","changedFiles","hasRepoChanged","pipelineEntries","Object","entries","packageId","packageInfo","packageLageDefinition","lage","id","definition","push","Array","isArray","addTargetConfig","cache","dependsOn","build"],"mappings":";;;;+BAyCsBA;;;eAAAA;;;6BAxCwC;gCAEsD;qCAChF;gCAEL;AAoB/B,SAASC,gBAAgBC,KAAa,EAAEC,GAAW;IACjD,MAAMC,eAAeF,SAASG,IAAAA,sCAAsB,EAAC;QAAEF;IAAI;IAE3D,MAAMG,UAAU;WACX,IAAIC,IAAI;eACLC,IAAAA,mCAAmB,EAACL,QAAQ,EAAE;eAC9BM,IAAAA,kCAAkB,EAACN,QAAQ,EAAE;eAC7BO,IAAAA,gCAAgB,EAACN,cAAcD,QAAQ,EAAE;eACzCQ,IAAAA,gCAAgB,EAACR,QAAQ,EAAE;SAChC;KACF;IAED,OAAOG;AACT;AAEO,eAAeN,kBAAkBY,OAAiC;IACvE,MAAM,EACJC,MAAM,EACNC,IAAI,EACJC,YAAY,EACZC,UAAU,EACVC,yBAAyB,EACzBC,+BAA+B,EAC/BhB,KAAK,EACLiB,KAAK,EACLC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,KAAK,EACLC,YAAY,EACZC,UAAU,EACX,GAAGd;IAEJ,MAAMe,UAAU,IAAIC,wCAA2B,CAACd,MAAMW,cAAcR,2BAA2BC;IAE/F,MAAMW,WAAWC,IAAAA,wCAAmB,EAAC;QACnChB;QACAD;QACAY;QACAM,qBAAqBhB;QACrBiB,mBAAmBhB;QACnBd;QACAiB;QACAC;QACAa,kBAAkBZ;IACpB;IAEA,IAAIa,eAAyB,EAAE;IAE/B,oHAAoH;IACpH,2FAA2F;IAC3F,IAAIhC,OAAO;QACT,IAAI,CAACiC,IAAAA,8BAAc,EAACjC,OAAOY,MAAMM,iBAAiBP,SAAS;YACzDqB,eAAejC,gBAAgBC,OAAOY;QACxC;IACF;IAEA,MAAMsB,kBAAkBC,OAAOC,OAAO,CAAChB;IAEvC,6DAA6D;IAC7D,qEAAqE;IACrE,gCAAgC;IAChC,mFAAmF;IACnF,0DAA0D;IAC1D,sEAAsE;IACtE,6DAA6D;IAC7D,mEAAmE;IACnE,8CAA8C;IAC9C,KAAK,MAAM,CAACiB,WAAWC,YAAY,IAAIH,OAAOC,OAAO,CAACb,cAAe;QACnE,MAAMgB,wBAAwBD,YAAYE,IAAI;QAC9C,IAAID,uBAAuB;YACzB,KAAK,MAAM,CAACE,IAAIC,WAAW,IAAIP,OAAOC,OAAO,CAACG,uBAAwB;gBACpEL,gBAAgBS,IAAI,CAAC;oBAACN,YAAY,MAAMI;oBAAIC;iBAAW;YACzD;QACF;IACF;IAEA,KAAK,MAAM,CAACD,IAAIC,WAAW,IAAIR,gBAAiB;QAC9C,IAAIU,MAAMC,OAAO,CAACH,aAAa;YAC7B,MAAMjB,QAAQqB,eAAe,CAC3BL,IACA;gBACEM,OAAO;gBACPC,WAAWN;gBACXhC,SAAS,CAAC;gBACVW;YACF,GACAW;QAEJ,OAAO;YACL,MAAMP,QAAQqB,eAAe,CAACL,IAAIC,YAAYV;QAChD;IACF;IAEA,OAAO,MAAMP,QAAQwB,KAAK,CAAC3B,OAAOK,UAAUH;AAC9C"}
1
+ {"version":3,"sources":["../../../src/commands/run/createTargetGraph.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport { type Priority, type TargetGraph, WorkspaceTargetGraphBuilder } from \"@lage-run/target-graph\";\nimport type { PackageInfos } from \"workspace-tools\";\nimport { getBranchChanges, getDefaultRemoteBranch, getStagedChanges, getUnstagedChanges, getUntrackedChanges } from \"workspace-tools\";\nimport { getFilteredPackages } from \"../../filter/getFilteredPackages.js\";\nimport type { PipelineDefinition } from \"@lage-run/config\";\nimport { hasRepoChanged } from \"../../filter/hasRepoChanged.js\";\n\ninterface CreateTargetGraphOptions {\n logger: Logger;\n root: string;\n dependencies: boolean;\n dependents: boolean;\n since?: string;\n scope?: string[];\n ignore: string[];\n repoWideChanges: string[];\n pipeline: PipelineDefinition;\n outputs: string[];\n tasks: string[];\n packageInfos: PackageInfos;\n priorities: Priority[];\n enableTargetConfigMerging: boolean;\n enablePhantomTargetOptimization: boolean;\n}\n\nfunction getChangedFiles(since: string, cwd: string) {\n const targetBranch = since || getDefaultRemoteBranch({ cwd });\n\n return [\n ...new Set([\n ...(getUntrackedChanges({ cwd }) || []),\n ...(getUnstagedChanges({ cwd }) || []),\n ...(getBranchChanges({ branch: targetBranch, cwd }) || []),\n ...(getStagedChanges({ cwd }) || []),\n ]),\n ];\n}\n\nexport async function createTargetGraph(options: CreateTargetGraphOptions): Promise<TargetGraph> {\n const {\n logger,\n root,\n dependencies,\n dependents,\n enableTargetConfigMerging,\n enablePhantomTargetOptimization,\n since,\n scope,\n repoWideChanges,\n ignore,\n pipeline,\n outputs,\n tasks,\n packageInfos,\n priorities,\n } = options;\n\n const builder = new WorkspaceTargetGraphBuilder({ root, packageInfos, enableTargetConfigMerging, enablePhantomTargetOptimization });\n\n const packages = getFilteredPackages({\n root,\n logger,\n packageInfos,\n includeDependencies: dependencies,\n includeDependents: dependents,\n since,\n scope,\n repoWideChanges,\n sinceIgnoreGlobs: ignore,\n });\n\n let changedFiles: string[] = [];\n\n // TODO: enhancement would be for workspace-tools to implement a \"getChangedPackageFromChangedFiles()\" type function\n // TODO: optimize this so that we don't double up the work to determine if repo has changed\n if (since) {\n if (!hasRepoChanged({ since, root, environmentGlob: repoWideChanges, logger })) {\n changedFiles = getChangedFiles(since, root);\n }\n }\n\n const pipelineEntries = Object.entries(pipeline);\n\n // Add lage pipeline configuration in the package.json files.\n // They are configured in the lage field, but without the package id.\n // i.e. having this package.json\n // { \"name\": \"@lage-run/globby\", \"lage\": { \"transpile\": { type: \"npmScript\" } }}\n // is equivalent to having the following in lage.config.js\n // { pipeline: { \"@lage-run/globby#transpile\": { type: \"npmScript\" } }\n // We conciously add these 'after' the ones in lage.config.js\n // to indicate that the more specific package.json definition takes\n // precedence over the global lage.config.js.\n for (const [packageId, packageInfo] of Object.entries(packageInfos)) {\n const packageLageDefinition = packageInfo.lage as PipelineDefinition;\n if (packageLageDefinition) {\n for (const [id, definition] of Object.entries(packageLageDefinition)) {\n pipelineEntries.push([packageId + \"#\" + id, definition]);\n }\n }\n }\n\n for (const [id, definition] of pipelineEntries) {\n if (Array.isArray(definition)) {\n await builder.addTargetConfig(\n id,\n {\n cache: true,\n dependsOn: definition,\n options: {},\n outputs,\n },\n changedFiles\n );\n } else {\n await builder.addTargetConfig(id, definition, changedFiles);\n }\n }\n\n return await builder.build(tasks, packages, priorities);\n}\n"],"names":["createTargetGraph","getChangedFiles","since","cwd","targetBranch","getDefaultRemoteBranch","Set","getUntrackedChanges","getUnstagedChanges","getBranchChanges","branch","getStagedChanges","options","logger","root","dependencies","dependents","enableTargetConfigMerging","enablePhantomTargetOptimization","scope","repoWideChanges","ignore","pipeline","outputs","tasks","packageInfos","priorities","builder","WorkspaceTargetGraphBuilder","packages","getFilteredPackages","includeDependencies","includeDependents","sinceIgnoreGlobs","changedFiles","hasRepoChanged","environmentGlob","pipelineEntries","Object","entries","packageId","packageInfo","packageLageDefinition","lage","id","definition","push","Array","isArray","addTargetConfig","cache","dependsOn","build"],"mappings":";;;;+BAuCsBA;;;eAAAA;;;6BAtCuD;gCAEuC;qCAChF;gCAEL;AAoB/B,SAASC,gBAAgBC,KAAa,EAAEC,GAAW;IACjD,MAAMC,eAAeF,SAASG,IAAAA,sCAAsB,EAAC;QAAEF;IAAI;IAE3D,OAAO;WACF,IAAIG,IAAI;eACLC,IAAAA,mCAAmB,EAAC;gBAAEJ;YAAI,MAAM,EAAE;eAClCK,IAAAA,kCAAkB,EAAC;gBAAEL;YAAI,MAAM,EAAE;eACjCM,IAAAA,gCAAgB,EAAC;gBAAEC,QAAQN;gBAAcD;YAAI,MAAM,EAAE;eACrDQ,IAAAA,gCAAgB,EAAC;gBAAER;YAAI,MAAM,EAAE;SACpC;KACF;AACH;AAEO,eAAeH,kBAAkBY,OAAiC;IACvE,MAAM,EACJC,MAAM,EACNC,IAAI,EACJC,YAAY,EACZC,UAAU,EACVC,yBAAyB,EACzBC,+BAA+B,EAC/BhB,KAAK,EACLiB,KAAK,EACLC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,KAAK,EACLC,YAAY,EACZC,UAAU,EACX,GAAGd;IAEJ,MAAMe,UAAU,IAAIC,wCAA2B,CAAC;QAAEd;QAAMW;QAAcR;QAA2BC;IAAgC;IAEjI,MAAMW,WAAWC,IAAAA,wCAAmB,EAAC;QACnChB;QACAD;QACAY;QACAM,qBAAqBhB;QACrBiB,mBAAmBhB;QACnBd;QACAiB;QACAC;QACAa,kBAAkBZ;IACpB;IAEA,IAAIa,eAAyB,EAAE;IAE/B,oHAAoH;IACpH,2FAA2F;IAC3F,IAAIhC,OAAO;QACT,IAAI,CAACiC,IAAAA,8BAAc,EAAC;YAAEjC;YAAOY;YAAMsB,iBAAiBhB;YAAiBP;QAAO,IAAI;YAC9EqB,eAAejC,gBAAgBC,OAAOY;QACxC;IACF;IAEA,MAAMuB,kBAAkBC,OAAOC,OAAO,CAACjB;IAEvC,6DAA6D;IAC7D,qEAAqE;IACrE,gCAAgC;IAChC,mFAAmF;IACnF,0DAA0D;IAC1D,sEAAsE;IACtE,6DAA6D;IAC7D,mEAAmE;IACnE,8CAA8C;IAC9C,KAAK,MAAM,CAACkB,WAAWC,YAAY,IAAIH,OAAOC,OAAO,CAACd,cAAe;QACnE,MAAMiB,wBAAwBD,YAAYE,IAAI;QAC9C,IAAID,uBAAuB;YACzB,KAAK,MAAM,CAACE,IAAIC,WAAW,IAAIP,OAAOC,OAAO,CAACG,uBAAwB;gBACpEL,gBAAgBS,IAAI,CAAC;oBAACN,YAAY,MAAMI;oBAAIC;iBAAW;YACzD;QACF;IACF;IAEA,KAAK,MAAM,CAACD,IAAIC,WAAW,IAAIR,gBAAiB;QAC9C,IAAIU,MAAMC,OAAO,CAACH,aAAa;YAC7B,MAAMlB,QAAQsB,eAAe,CAC3BL,IACA;gBACEM,OAAO;gBACPC,WAAWN;gBACXjC,SAAS,CAAC;gBACVW;YACF,GACAW;QAEJ,OAAO;YACL,MAAMP,QAAQsB,eAAe,CAACL,IAAIC,YAAYX;QAChD;IACF;IAEA,OAAO,MAAMP,QAAQyB,KAAK,CAAC5B,OAAOK,UAAUH;AAC9C"}
@@ -33,12 +33,15 @@ async function runAction(options, command) {
33
33
  const allowNoTargetRuns = options.allowNoTargetRuns || config.allowNoTargetRuns;
34
34
  // Configure logger
35
35
  const logger = (0, _logger.default)();
36
+ const root = (0, _workspacetools.getWorkspaceManagerRoot)(cwd) ?? cwd;
36
37
  const reporters = await (0, _initializeReporters.initializeReporters)(logger, {
37
38
  ...options,
38
39
  concurrency
39
- }, config.reporters);
40
+ }, {
41
+ customReporters: config.reporters,
42
+ root
43
+ });
40
44
  // Build Target Graph
41
- const root = (0, _workspacetools.getWorkspaceManagerRoot)(process.cwd());
42
45
  const packageInfos = (0, _workspacetools.getPackageInfos)(root);
43
46
  const { tasks, taskArgs } = (0, _filterArgsForTasks.filterArgsForTasks)(command.args);
44
47
  const targetGraph = await (0, _createTargetGraph.createTargetGraph)({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/run/runAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { TargetGraph } from \"@lage-run/target-graph\";\nimport { NoTargetFoundError } from \"../../types/errors.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { optimizeTargetGraph } from \"../../optimizeTargetGraph.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function runAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n // Merged options\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n const allowNoTargetRuns = options.allowNoTargetRuns || config.allowNoTargetRuns;\n\n // Configure logger\n const logger = createLogger();\n\n const reporters = await initializeReporters(logger, { ...options, concurrency }, config.reporters);\n\n // Build Target Graph\n const root = getWorkspaceManagerRoot(process.cwd())!;\n const packageInfos = getPackageInfos(root);\n\n const { tasks, taskArgs } = filterArgsForTasks(command.args);\n\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: options.dependencies,\n dependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n ignore: options.ignore.concat(config.ignore),\n pipeline: config.pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n since: options.since,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n validateTargetGraph(targetGraph, allowNoTargetRuns);\n\n logger.verbose(`Running with ${concurrency} workers`);\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n const maxWorkersPerTaskMap = getMaxWorkersPerTaskFromOptions(options.maxWorkersPerTask);\n\n const { hasher } = await createCache({\n root,\n logger,\n cacheOptions: config.cacheOptions,\n cliArgs: taskArgs,\n skipLocalCache: options.skipLocalCache,\n });\n\n const scheduler = new SimpleScheduler({\n logger,\n concurrency,\n continueOnError: options.continue,\n shouldCache: options.cache,\n shouldResetCache: options.resetCache,\n workerData: {\n root,\n taskArgs,\n skipLocalCache: options.skipLocalCache,\n cacheOptions: config.cacheOptions,\n runners: {\n ...getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n },\n },\n maxWorkersPerTask: new Map([...getMaxWorkersPerTask(filteredPipeline, concurrency), ...maxWorkersPerTaskMap]),\n hasher,\n workerIdleMemoryLimit: config.workerIdleMemoryLimit, // in bytes\n });\n\n const optimizedTargets = await optimizeTargetGraph(targetGraph, scheduler.runnerPicker, false);\n const optimizedGraph: TargetGraph = {\n targets: new Map(optimizedTargets.map((target) => [target.id, target])),\n };\n\n const summary = await scheduler.run(root, optimizedGraph);\n await scheduler.cleanup();\n\n displaySummaryAndExit(summary, logger.reporters);\n\n for (const reporter of reporters) {\n reporter.cleanup?.();\n }\n}\n\nfunction displaySummaryAndExit(summary: SchedulerRunSummary, reporters: Reporter[]) {\n if (summary.results !== \"success\") {\n process.exitCode = 1;\n }\n\n for (const reporter of reporters) {\n reporter.summarize(summary);\n }\n}\n\nfunction validateTargetGraph(targetGraph: TargetGraph, allowNoTargetRuns: boolean) {\n const visibleTargets = Array.from(targetGraph.targets.values()).filter((target) => !target.hidden);\n if (visibleTargets.length === 0 && !allowNoTargetRuns) {\n throw NoTargetFoundError;\n }\n}\n"],"names":["runAction","options","command","cwd","process","config","getConfig","concurrency","getConcurrency","allowNoTargetRuns","logger","createLogger","reporters","initializeReporters","root","getWorkspaceManagerRoot","packageInfos","getPackageInfos","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","validateTargetGraph","verbose","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","continue","shouldCache","cache","shouldResetCache","resetCache","workerData","runners","getBuiltInRunners","nodeArg","npmCmd","npmClient","Map","getMaxWorkersPerTask","workerIdleMemoryLimit","optimizedTargets","optimizeTargetGraph","runnerPicker","optimizedGraph","map","target","id","summary","run","cleanup","displaySummaryAndExit","reporter","results","exitCode","summarize","visibleTargets","Array","from","filter","hidden","length","NoTargetFoundError"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/run/runAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { TargetGraph } from \"@lage-run/target-graph\";\nimport { NoTargetFoundError } from \"../../types/errors.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { optimizeTargetGraph } from \"../../optimizeTargetGraph.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function runAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n // Merged options\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n const allowNoTargetRuns = options.allowNoTargetRuns || config.allowNoTargetRuns;\n\n // Configure logger\n const logger = createLogger();\n\n const root = getWorkspaceManagerRoot(cwd) ?? cwd;\n const reporters = await initializeReporters(logger, { ...options, concurrency }, { customReporters: config.reporters, root });\n\n // Build Target Graph\n const packageInfos = getPackageInfos(root);\n\n const { tasks, taskArgs } = filterArgsForTasks(command.args);\n\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: options.dependencies,\n dependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n ignore: options.ignore.concat(config.ignore),\n pipeline: config.pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n since: options.since,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n validateTargetGraph(targetGraph, allowNoTargetRuns);\n\n logger.verbose(`Running with ${concurrency} workers`);\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n const maxWorkersPerTaskMap = getMaxWorkersPerTaskFromOptions(options.maxWorkersPerTask);\n\n const { hasher } = await createCache({\n root,\n logger,\n cacheOptions: config.cacheOptions,\n cliArgs: taskArgs,\n skipLocalCache: options.skipLocalCache,\n });\n\n const scheduler = new SimpleScheduler({\n logger,\n concurrency,\n continueOnError: options.continue,\n shouldCache: options.cache,\n shouldResetCache: options.resetCache,\n workerData: {\n root,\n taskArgs,\n skipLocalCache: options.skipLocalCache,\n cacheOptions: config.cacheOptions,\n runners: {\n ...getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n },\n },\n maxWorkersPerTask: new Map([...getMaxWorkersPerTask(filteredPipeline, concurrency), ...maxWorkersPerTaskMap]),\n hasher,\n workerIdleMemoryLimit: config.workerIdleMemoryLimit, // in bytes\n });\n\n const optimizedTargets = await optimizeTargetGraph(targetGraph, scheduler.runnerPicker, false);\n const optimizedGraph: TargetGraph = {\n targets: new Map(optimizedTargets.map((target) => [target.id, target])),\n };\n\n const summary = await scheduler.run(root, optimizedGraph);\n await scheduler.cleanup();\n\n displaySummaryAndExit(summary, logger.reporters);\n\n for (const reporter of reporters) {\n reporter.cleanup?.();\n }\n}\n\nfunction displaySummaryAndExit(summary: SchedulerRunSummary, reporters: Reporter[]) {\n if (summary.results !== \"success\") {\n process.exitCode = 1;\n }\n\n for (const reporter of reporters) {\n reporter.summarize(summary);\n }\n}\n\nfunction validateTargetGraph(targetGraph: TargetGraph, allowNoTargetRuns: boolean) {\n const visibleTargets = Array.from(targetGraph.targets.values()).filter((target) => !target.hidden);\n if (visibleTargets.length === 0 && !allowNoTargetRuns) {\n throw NoTargetFoundError;\n }\n}\n"],"names":["runAction","options","command","cwd","process","config","getConfig","concurrency","getConcurrency","allowNoTargetRuns","logger","createLogger","root","getWorkspaceManagerRoot","reporters","initializeReporters","customReporters","packageInfos","getPackageInfos","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","validateTargetGraph","verbose","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","continue","shouldCache","cache","shouldResetCache","resetCache","workerData","runners","getBuiltInRunners","nodeArg","npmCmd","npmClient","Map","getMaxWorkersPerTask","workerIdleMemoryLimit","optimizedTargets","optimizeTargetGraph","runnerPicker","optimizedGraph","map","target","id","summary","run","cleanup","displaySummaryAndExit","reporter","results","exitCode","summarize","visibleTargets","Array","from","filter","hidden","length","NoTargetFoundError"],"mappings":"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"}
@@ -151,8 +151,8 @@ async function watchAction(options, command) {
151
151
  const deltaGraph = {
152
152
  targets
153
153
  };
154
- const summary = await scheduler.run(root, deltaGraph, true);
155
- displaySummary(summary, logger.reporters);
154
+ const deltaSummary = await scheduler.run(root, deltaGraph, true);
155
+ displaySummary(deltaSummary, logger.reporters);
156
156
  });
157
157
  }
158
158
  function displaySummary(summary, reporters) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/run/watchAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfosAsync, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { LogReporter } from \"@lage-run/reporters\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\nimport { watch } from \"./watcher.js\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger, { LogLevel } from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function watchAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n\n // Configure logger\n const logger = createLogger();\n const reporter = new LogReporter({\n logLevel: LogLevel[options.logLevel],\n });\n logger.addReporter(reporter);\n\n // Build Target Graph\n const root = getWorkspaceManagerRoot(process.cwd())!;\n const packageInfos = await getPackageInfosAsync(root);\n\n const { tasks, taskArgs } = filterArgsForTasks(command.args);\n\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: options.dependencies,\n dependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n ignore: options.ignore.concat(config.ignore),\n pipeline: config.pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n since: options.since,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n // Make sure we do not attempt writeRemoteCache in watch mode\n config.cacheOptions.writeRemoteCache = false;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n const maxWorkersPerTaskMap = getMaxWorkersPerTaskFromOptions(options.maxWorkersPerTask);\n\n const { hasher } = await createCache({\n root,\n logger,\n cacheOptions: config.cacheOptions,\n cliArgs: taskArgs,\n skipLocalCache: options.skipLocalCache,\n });\n\n const scheduler = new SimpleScheduler({\n logger,\n concurrency,\n continueOnError: true,\n workerData: {\n root,\n taskArgs,\n skipLocalCache: options.skipLocalCache,\n cacheOptions: config.cacheOptions,\n runners: {\n ...getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n },\n },\n shouldCache: options.cache,\n shouldResetCache: options.resetCache,\n maxWorkersPerTask: new Map([...getMaxWorkersPerTask(filteredPipeline, concurrency), ...maxWorkersPerTaskMap]),\n hasher,\n workerIdleMemoryLimit: config.workerIdleMemoryLimit, // in bytes\n });\n\n // Initial run\n const summary = await scheduler.run(root, targetGraph);\n displaySummary(summary, logger.reporters);\n\n logger.info(\"Running scheduler in watch mode\");\n\n // Disables cache for subsequent runs\n // TODO: support updating hasher + write-only local cacheProvider for subsequent runs\n for (const targetRun of scheduler.targetRuns.values()) {\n targetRun.options.shouldCache = false;\n }\n\n // When initial run is done, disable fetching of caches on all targets, keep writing to the cache\n const watcher = await watch(root, packageInfos);\n watcher.on(\"change\", async (packageName) => {\n reporter.resetLogEntries();\n const targets = new Map<string, Target>();\n for (const target of targetGraph.targets.values()) {\n if (target.packageName === packageName) {\n targets.set(target.id, target);\n }\n }\n\n const deltaGraph = { targets };\n\n const summary = await scheduler.run(root, deltaGraph, true);\n displaySummary(summary, logger.reporters);\n });\n}\n\nfunction displaySummary(summary: SchedulerRunSummary, reporters: Reporter[]) {\n for (const reporter of reporters) {\n reporter.summarize(summary);\n reporter.cleanup?.();\n }\n}\n"],"names":["watchAction","options","command","cwd","process","config","getConfig","concurrency","getConcurrency","logger","createLogger","reporter","LogReporter","logLevel","LogLevel","addReporter","root","getWorkspaceManagerRoot","packageInfos","getPackageInfosAsync","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","writeRemoteCache","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","workerData","runners","getBuiltInRunners","nodeArg","npmCmd","npmClient","shouldCache","cache","shouldResetCache","resetCache","Map","getMaxWorkersPerTask","workerIdleMemoryLimit","summary","run","displaySummary","reporters","info","targetRun","targetRuns","watcher","watch","on","packageName","resetLogEntries","target","set","id","deltaGraph","summarize","cleanup"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/run/watchAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfosAsync, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { LogReporter } from \"@lage-run/reporters\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\nimport { watch } from \"./watcher.js\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger, { LogLevel } from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function watchAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n\n // Configure logger\n const logger = createLogger();\n const reporter = new LogReporter({\n logLevel: LogLevel[options.logLevel],\n });\n logger.addReporter(reporter);\n\n // Build Target Graph\n const root = getWorkspaceManagerRoot(process.cwd())!;\n const packageInfos = await getPackageInfosAsync(root);\n\n const { tasks, taskArgs } = filterArgsForTasks(command.args);\n\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: options.dependencies,\n dependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n ignore: options.ignore.concat(config.ignore),\n pipeline: config.pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n since: options.since,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n // Make sure we do not attempt writeRemoteCache in watch mode\n config.cacheOptions.writeRemoteCache = false;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n const maxWorkersPerTaskMap = getMaxWorkersPerTaskFromOptions(options.maxWorkersPerTask);\n\n const { hasher } = await createCache({\n root,\n logger,\n cacheOptions: config.cacheOptions,\n cliArgs: taskArgs,\n skipLocalCache: options.skipLocalCache,\n });\n\n const scheduler = new SimpleScheduler({\n logger,\n concurrency,\n continueOnError: true,\n workerData: {\n root,\n taskArgs,\n skipLocalCache: options.skipLocalCache,\n cacheOptions: config.cacheOptions,\n runners: {\n ...getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n },\n },\n shouldCache: options.cache,\n shouldResetCache: options.resetCache,\n maxWorkersPerTask: new Map([...getMaxWorkersPerTask(filteredPipeline, concurrency), ...maxWorkersPerTaskMap]),\n hasher,\n workerIdleMemoryLimit: config.workerIdleMemoryLimit, // in bytes\n });\n\n // Initial run\n const summary = await scheduler.run(root, targetGraph);\n displaySummary(summary, logger.reporters);\n\n logger.info(\"Running scheduler in watch mode\");\n\n // Disables cache for subsequent runs\n // TODO: support updating hasher + write-only local cacheProvider for subsequent runs\n for (const targetRun of scheduler.targetRuns.values()) {\n targetRun.options.shouldCache = false;\n }\n\n // When initial run is done, disable fetching of caches on all targets, keep writing to the cache\n const watcher = await watch(root, packageInfos);\n watcher.on(\"change\", async (packageName) => {\n reporter.resetLogEntries();\n const targets = new Map<string, Target>();\n for (const target of targetGraph.targets.values()) {\n if (target.packageName === packageName) {\n targets.set(target.id, target);\n }\n }\n\n const deltaGraph = { targets };\n\n const deltaSummary = await scheduler.run(root, deltaGraph, true);\n displaySummary(deltaSummary, logger.reporters);\n });\n}\n\nfunction displaySummary(summary: SchedulerRunSummary, reporters: Reporter[]) {\n for (const reporter of reporters) {\n reporter.summarize(summary);\n reporter.cleanup?.();\n }\n}\n"],"names":["watchAction","options","command","cwd","process","config","getConfig","concurrency","getConcurrency","logger","createLogger","reporter","LogReporter","logLevel","LogLevel","addReporter","root","getWorkspaceManagerRoot","packageInfos","getPackageInfosAsync","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","writeRemoteCache","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","workerData","runners","getBuiltInRunners","nodeArg","npmCmd","npmClient","shouldCache","cache","shouldResetCache","resetCache","Map","getMaxWorkersPerTask","workerIdleMemoryLimit","summary","run","displaySummary","reporters","info","targetRun","targetRuns","watcher","watch","on","packageName","resetLogEntries","target","set","id","deltaGraph","deltaSummary","summarize","cleanup"],"mappings":"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"}
@@ -14,6 +14,7 @@ const _lageService = require("./lageService.js");
14
14
  const _rpc = require("@lage-run/rpc");
15
15
  const _parseServerOption = require("../parseServerOption.js");
16
16
  const _config = require("@lage-run/config");
17
+ const _workspacetools = require("workspace-tools");
17
18
  function _interop_require_default(obj) {
18
19
  return obj && obj.__esModule ? obj : {
19
20
  default: obj
@@ -23,16 +24,20 @@ async function serverAction(options) {
23
24
  const { server = "localhost:5332", timeout = 1, tasks } = options;
24
25
  const { host, port } = (0, _parseServerOption.parseServerOption)(server);
25
26
  const cwd = process.cwd();
27
+ const root = (0, _workspacetools.getWorkspaceManagerRoot)(cwd) ?? cwd;
26
28
  const config = await (0, _config.getConfig)(cwd);
27
29
  const logger = (0, _logger.default)();
28
30
  options.logLevel = options.logLevel ?? "info";
29
31
  options.logFile = options.logFile ?? "node_modules/.cache/lage/server.log";
30
32
  options.reporter = options.reporter ?? "verboseFileLog";
31
- await (0, _initializeReporters.initializeReporters)(logger, options, config.reporters);
33
+ await (0, _initializeReporters.initializeReporters)(logger, options, {
34
+ customReporters: config.reporters,
35
+ root
36
+ });
32
37
  logger.info(`Starting server on http://${host}:${port}`);
33
38
  const abortController = new AbortController();
34
39
  const lageService = await (0, _lageService.createLageService)({
35
- cwd: process.cwd(),
40
+ cwd,
36
41
  serverControls: {
37
42
  abortController,
38
43
  countdownToShutdown: ()=>resetTimer(logger, timeout, abortController, lageServer),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/server/action.ts"],"sourcesContent":["import createLogger, { type Logger } from \"@lage-run/logger\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { createLageService } from \"./lageService.js\";\nimport { createServer } from \"@lage-run/rpc\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { getConfig } from \"@lage-run/config\";\n\ninterface WorkerOptions extends ReporterInitOptions {\n nodeArg?: string[];\n server?: string;\n timeout?: number;\n shutdown: boolean;\n tasks: string[];\n}\n\nexport async function serverAction(options: WorkerOptions): Promise<void> {\n const { server = \"localhost:5332\", timeout = 1, tasks } = options;\n\n const { host, port } = parseServerOption(server);\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.logFile = options.logFile ?? \"node_modules/.cache/lage/server.log\";\n options.reporter = options.reporter ?? \"verboseFileLog\";\n await initializeReporters(logger, options, config.reporters);\n\n logger.info(`Starting server on http://${host}:${port}`);\n\n const abortController = new AbortController();\n\n const lageService = await createLageService({\n cwd: process.cwd(),\n serverControls: {\n abortController,\n countdownToShutdown: () => resetTimer(logger, timeout, abortController, lageServer),\n clearCountdown: clearTimer,\n },\n logger,\n concurrency: options.concurrency,\n tasks,\n });\n const lageServer = await createServer(lageService, abortController);\n\n await lageServer.listen({ host, port });\n logger.info(`Server listening on http://${host}:${port}, timeout in ${timeout} seconds`);\n}\n\nlet timeoutHandle: NodeJS.Timeout | undefined;\nfunction resetTimer(logger: Logger, timeout: number, abortController: AbortController, server: any) {\n clearTimer();\n\n timeoutHandle = globalThis.setTimeout(() => {\n logger.info(`Server timed out after ${timeout} seconds`);\n abortController.abort();\n server.close();\n }, timeout * 1000);\n}\n\nfunction clearTimer() {\n if (timeoutHandle) {\n globalThis.clearTimeout(timeoutHandle);\n }\n}\n"],"names":["serverAction","options","server","timeout","tasks","host","port","parseServerOption","cwd","process","config","getConfig","logger","createLogger","logLevel","logFile","reporter","initializeReporters","reporters","info","abortController","AbortController","lageService","createLageService","serverControls","countdownToShutdown","resetTimer","lageServer","clearCountdown","clearTimer","concurrency","createServer","listen","timeoutHandle","globalThis","setTimeout","abort","close","clearTimeout"],"mappings":";;;;+BAgBsBA;;;eAAAA;;;+DAhBoB;qCAEN;6BACF;qBACL;mCACK;wBACR;;;;;;AAUnB,eAAeA,aAAaC,OAAsB;IACvD,MAAM,EAAEC,SAAS,gBAAgB,EAAEC,UAAU,CAAC,EAAEC,KAAK,EAAE,GAAGH;IAE1D,MAAM,EAAEI,IAAI,EAAEC,IAAI,EAAE,GAAGC,IAAAA,oCAAiB,EAACL;IACzC,MAAMM,MAAMC,QAAQD,GAAG;IACvB,MAAME,SAAS,MAAMC,IAAAA,iBAAS,EAACH;IAE/B,MAAMI,SAASC,IAAAA,eAAY;IAC3BZ,QAAQa,QAAQ,GAAGb,QAAQa,QAAQ,IAAI;IACvCb,QAAQc,OAAO,GAAGd,QAAQc,OAAO,IAAI;IACrCd,QAAQe,QAAQ,GAAGf,QAAQe,QAAQ,IAAI;IACvC,MAAMC,IAAAA,wCAAmB,EAACL,QAAQX,SAASS,OAAOQ,SAAS;IAE3DN,OAAOO,IAAI,CAAC,CAAC,0BAA0B,EAAEd,KAAK,CAAC,EAAEC,MAAM;IAEvD,MAAMc,kBAAkB,IAAIC;IAE5B,MAAMC,cAAc,MAAMC,IAAAA,8BAAiB,EAAC;QAC1Cf,KAAKC,QAAQD,GAAG;QAChBgB,gBAAgB;YACdJ;YACAK,qBAAqB,IAAMC,WAAWd,QAAQT,SAASiB,iBAAiBO;YACxEC,gBAAgBC;QAClB;QACAjB;QACAkB,aAAa7B,QAAQ6B,WAAW;QAChC1B;IACF;IACA,MAAMuB,aAAa,MAAMI,IAAAA,iBAAY,EAACT,aAAaF;IAEnD,MAAMO,WAAWK,MAAM,CAAC;QAAE3B;QAAMC;IAAK;IACrCM,OAAOO,IAAI,CAAC,CAAC,2BAA2B,EAAEd,KAAK,CAAC,EAAEC,KAAK,aAAa,EAAEH,QAAQ,QAAQ,CAAC;AACzF;AAEA,IAAI8B;AACJ,SAASP,WAAWd,MAAc,EAAET,OAAe,EAAEiB,eAAgC,EAAElB,MAAW;IAChG2B;IAEAI,gBAAgBC,WAAWC,UAAU,CAAC;QACpCvB,OAAOO,IAAI,CAAC,CAAC,uBAAuB,EAAEhB,QAAQ,QAAQ,CAAC;QACvDiB,gBAAgBgB,KAAK;QACrBlC,OAAOmC,KAAK;IACd,GAAGlC,UAAU;AACf;AAEA,SAAS0B;IACP,IAAII,eAAe;QACjBC,WAAWI,YAAY,CAACL;IAC1B;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/server/action.ts"],"sourcesContent":["import createLogger, { type Logger } from \"@lage-run/logger\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { createLageService } from \"./lageService.js\";\nimport { createServer } from \"@lage-run/rpc\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { getConfig } from \"@lage-run/config\";\nimport { getWorkspaceManagerRoot } from \"workspace-tools\";\n\ninterface WorkerOptions extends ReporterInitOptions {\n nodeArg?: string[];\n server?: string;\n timeout?: number;\n shutdown: boolean;\n tasks: string[];\n}\n\nexport async function serverAction(options: WorkerOptions): Promise<void> {\n const { server = \"localhost:5332\", timeout = 1, tasks } = options;\n\n const { host, port } = parseServerOption(server);\n const cwd = process.cwd();\n const root = getWorkspaceManagerRoot(cwd) ?? cwd;\n const config = await getConfig(cwd);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.logFile = options.logFile ?? \"node_modules/.cache/lage/server.log\";\n options.reporter = options.reporter ?? \"verboseFileLog\";\n await initializeReporters(logger, options, { customReporters: config.reporters, root });\n\n logger.info(`Starting server on http://${host}:${port}`);\n\n const abortController = new AbortController();\n\n const lageService = await createLageService({\n cwd,\n serverControls: {\n abortController,\n countdownToShutdown: () => resetTimer(logger, timeout, abortController, lageServer),\n clearCountdown: clearTimer,\n },\n logger,\n concurrency: options.concurrency,\n tasks,\n });\n const lageServer = await createServer(lageService, abortController);\n\n await lageServer.listen({ host, port });\n logger.info(`Server listening on http://${host}:${port}, timeout in ${timeout} seconds`);\n}\n\nlet timeoutHandle: NodeJS.Timeout | undefined;\nfunction resetTimer(logger: Logger, timeout: number, abortController: AbortController, server: any) {\n clearTimer();\n\n timeoutHandle = globalThis.setTimeout(() => {\n logger.info(`Server timed out after ${timeout} seconds`);\n abortController.abort();\n server.close();\n }, timeout * 1000);\n}\n\nfunction clearTimer() {\n if (timeoutHandle) {\n globalThis.clearTimeout(timeoutHandle);\n }\n}\n"],"names":["serverAction","options","server","timeout","tasks","host","port","parseServerOption","cwd","process","root","getWorkspaceManagerRoot","config","getConfig","logger","createLogger","logLevel","logFile","reporter","initializeReporters","customReporters","reporters","info","abortController","AbortController","lageService","createLageService","serverControls","countdownToShutdown","resetTimer","lageServer","clearCountdown","clearTimer","concurrency","createServer","listen","timeoutHandle","globalThis","setTimeout","abort","close","clearTimeout"],"mappings":";;;;+BAiBsBA;;;eAAAA;;;+DAjBoB;qCAEN;6BACF;qBACL;mCACK;wBACR;gCACc;;;;;;AAUjC,eAAeA,aAAaC,OAAsB;IACvD,MAAM,EAAEC,SAAS,gBAAgB,EAAEC,UAAU,CAAC,EAAEC,KAAK,EAAE,GAAGH;IAE1D,MAAM,EAAEI,IAAI,EAAEC,IAAI,EAAE,GAAGC,IAAAA,oCAAiB,EAACL;IACzC,MAAMM,MAAMC,QAAQD,GAAG;IACvB,MAAME,OAAOC,IAAAA,uCAAuB,EAACH,QAAQA;IAC7C,MAAMI,SAAS,MAAMC,IAAAA,iBAAS,EAACL;IAE/B,MAAMM,SAASC,IAAAA,eAAY;IAC3Bd,QAAQe,QAAQ,GAAGf,QAAQe,QAAQ,IAAI;IACvCf,QAAQgB,OAAO,GAAGhB,QAAQgB,OAAO,IAAI;IACrChB,QAAQiB,QAAQ,GAAGjB,QAAQiB,QAAQ,IAAI;IACvC,MAAMC,IAAAA,wCAAmB,EAACL,QAAQb,SAAS;QAAEmB,iBAAiBR,OAAOS,SAAS;QAAEX;IAAK;IAErFI,OAAOQ,IAAI,CAAC,CAAC,0BAA0B,EAAEjB,KAAK,CAAC,EAAEC,MAAM;IAEvD,MAAMiB,kBAAkB,IAAIC;IAE5B,MAAMC,cAAc,MAAMC,IAAAA,8BAAiB,EAAC;QAC1ClB;QACAmB,gBAAgB;YACdJ;YACAK,qBAAqB,IAAMC,WAAWf,QAAQX,SAASoB,iBAAiBO;YACxEC,gBAAgBC;QAClB;QACAlB;QACAmB,aAAahC,QAAQgC,WAAW;QAChC7B;IACF;IACA,MAAM0B,aAAa,MAAMI,IAAAA,iBAAY,EAACT,aAAaF;IAEnD,MAAMO,WAAWK,MAAM,CAAC;QAAE9B;QAAMC;IAAK;IACrCQ,OAAOQ,IAAI,CAAC,CAAC,2BAA2B,EAAEjB,KAAK,CAAC,EAAEC,KAAK,aAAa,EAAEH,QAAQ,QAAQ,CAAC;AACzF;AAEA,IAAIiC;AACJ,SAASP,WAAWf,MAAc,EAAEX,OAAe,EAAEoB,eAAgC,EAAErB,MAAW;IAChG8B;IAEAI,gBAAgBC,WAAWC,UAAU,CAAC;QACpCxB,OAAOQ,IAAI,CAAC,CAAC,uBAAuB,EAAEnB,QAAQ,QAAQ,CAAC;QACvDoB,gBAAgBgB,KAAK;QACrBrC,OAAOsC,KAAK;IACd,GAAGrC,UAAU;AACf;AAEA,SAAS6B;IACP,IAAII,eAAe;QACjBC,WAAWI,YAAY,CAACL;IAC1B;AACF"}
@@ -40,7 +40,11 @@ function getFilteredPackages(options) {
40
40
  });
41
41
  } else if (hasSince) {
42
42
  try {
43
- changedPackages = (0, _workspacetools.getChangedPackages)(root, since, sinceIgnoreGlobs);
43
+ changedPackages = (0, _workspacetools.getChangedPackages)({
44
+ cwd: root,
45
+ target: since,
46
+ ignoreGlobs: sinceIgnoreGlobs
47
+ });
44
48
  } catch (e) {
45
49
  logger.warn(`An error in the git command has caused this scope run to include every package\n${e}`);
46
50
  // if getChangedPackages throws, we will assume all have changed (using changedPackage = undefined)
@@ -55,7 +59,12 @@ function getFilteredPackages(options) {
55
59
  });
56
60
  // If the defined repo-wide changes are detected the get all packages and append to the filtered packages.
57
61
  // This alo ensures that the modified packages are always run first.
58
- if ((0, _hasRepoChanged.hasRepoChanged)(since, root, repoWideChanges, logger)) {
62
+ if ((0, _hasRepoChanged.hasRepoChanged)({
63
+ since,
64
+ root,
65
+ environmentGlob: repoWideChanges,
66
+ logger
67
+ })) {
59
68
  logger.verbose(`Repo-wide changes detected, running all packages. The following changed packages and their deps (if specified) will be run first: ${filteredPackages.join(",")}`);
60
69
  filteredPackages = [
61
70
  ...new Set(filteredPackages.concat(Object.keys(packageInfos)))
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/filter/getFilteredPackages.ts"],"sourcesContent":["import type { PackageInfos } from \"workspace-tools\";\nimport { getScopedPackages, getChangedPackages, getTransitiveDependents, getTransitiveDependencies } from \"workspace-tools\";\n\nimport type { Logger } from \"@lage-run/logger\";\nimport { hasRepoChanged } from \"./hasRepoChanged.js\";\n\nexport function getFilteredPackages(options: {\n root: string;\n packageInfos: PackageInfos;\n logger: Logger;\n scope: string[] | undefined;\n since: string | undefined;\n sinceIgnoreGlobs: string[] | undefined;\n repoWideChanges: string[];\n includeDependents: boolean;\n includeDependencies: boolean;\n}): string[] {\n const { scope, since, sinceIgnoreGlobs, repoWideChanges, includeDependents, includeDependencies, logger, packageInfos, root } = options;\n\n // If scoped is defined, get scoped packages\n const hasScopes = Array.isArray(scope) && scope.length > 0;\n let scopedPackages: string[] | undefined = undefined;\n let filteredPackages: string[] | undefined = undefined;\n let changedPackages: string[] | undefined = undefined;\n const hasSince = typeof since !== \"undefined\";\n\n // If scope is defined, get scoped packages and return\n if (hasScopes) {\n scopedPackages = getScopedPackages(scope!, packageInfos);\n // return filteredPackages;\n return filterPackages({\n logger,\n packageInfos,\n scopedPackages,\n changedPackages,\n includeDependencies,\n includeDependents,\n });\n }\n // If since is defined, get changed packages.\n else if (hasSince) {\n try {\n changedPackages = getChangedPackages(root, since, sinceIgnoreGlobs);\n } catch (e) {\n logger.warn(`An error in the git command has caused this scope run to include every package\\n${e}`);\n // if getChangedPackages throws, we will assume all have changed (using changedPackage = undefined)\n }\n filteredPackages = filterPackages({\n logger,\n packageInfos,\n scopedPackages,\n changedPackages,\n includeDependencies,\n includeDependents,\n });\n\n // If the defined repo-wide changes are detected the get all packages and append to the filtered packages.\n // This alo ensures that the modified packages are always run first.\n if (hasRepoChanged(since, root, repoWideChanges, logger)) {\n logger.verbose(\n `Repo-wide changes detected, running all packages. The following changed packages and their deps (if specified) will be run first: ${filteredPackages.join(\n \",\"\n )}`\n );\n filteredPackages = [...new Set(filteredPackages.concat(Object.keys(packageInfos)))];\n }\n return filteredPackages;\n } else {\n // If neither scope or since is defined, return all packages\n return Object.keys(packageInfos);\n }\n}\n\nexport function filterPackages(options: {\n logger: Logger;\n packageInfos: PackageInfos;\n includeDependents: boolean;\n includeDependencies: boolean;\n scopedPackages: string[] | undefined;\n changedPackages: string[] | undefined;\n}): string[] {\n const { scopedPackages, changedPackages, packageInfos, includeDependents, includeDependencies, logger } = options;\n\n let filtered: string[] = [];\n\n // If scope is defined, use the transitive providers of the since packages up to the scope\n if (typeof scopedPackages !== \"undefined\" && typeof changedPackages !== \"undefined\") {\n // If both scoped and since are specified, we have to merge two lists:\n // 1. changed packages that ARE themselves the scoped packages\n // 2. changed package consumers (package dependents) that are within the scoped subgraph\n filtered = changedPackages\n .filter((pkg) => scopedPackages.includes(pkg))\n .concat(getTransitiveDependents(changedPackages, packageInfos, scopedPackages));\n\n logger.verbose(`filterPackages changed within scope: ${filtered.join(\",\")}`);\n } else if (typeof changedPackages !== \"undefined\") {\n filtered = [...changedPackages];\n logger.verbose(`filterPackages changed: ${changedPackages.join(\",\")}`);\n } else if (typeof scopedPackages !== \"undefined\") {\n filtered = [...scopedPackages];\n logger.verbose(`filterPackages scope: ${scopedPackages.join(\",\")}`);\n } else {\n filtered = Object.keys(packageInfos);\n }\n\n // adds dependents (consumers) of all filtered package thus far\n if (includeDependents) {\n logger.verbose(`filterPackages running with dependents`);\n filtered = filtered.concat(getTransitiveDependents(filtered, packageInfos));\n }\n\n // adds dependencies of all filtered package thus far\n if (includeDependencies) {\n logger.verbose(`filterPackages running with dependencies`);\n filtered = filtered.concat(getTransitiveDependencies(filtered, packageInfos));\n }\n\n const unique = new Set(filtered);\n\n return [...unique];\n}\n"],"names":["filterPackages","getFilteredPackages","options","scope","since","sinceIgnoreGlobs","repoWideChanges","includeDependents","includeDependencies","logger","packageInfos","root","hasScopes","Array","isArray","length","scopedPackages","undefined","filteredPackages","changedPackages","hasSince","getScopedPackages","getChangedPackages","e","warn","hasRepoChanged","verbose","join","Set","concat","Object","keys","filtered","filter","pkg","includes","getTransitiveDependents","getTransitiveDependencies","unique"],"mappings":";;;;;;;;;;;QAyEgBA;eAAAA;;QAnEAC;eAAAA;;;gCAL0F;gCAG3E;AAExB,SAASA,oBAAoBC,OAUnC;IACC,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEC,gBAAgB,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,mBAAmB,EAAEC,MAAM,EAAEC,YAAY,EAAEC,IAAI,EAAE,GAAGT;IAEhI,4CAA4C;IAC5C,MAAMU,YAAYC,MAAMC,OAAO,CAACX,UAAUA,MAAMY,MAAM,GAAG;IACzD,IAAIC,iBAAuCC;IAC3C,IAAIC,mBAAyCD;IAC7C,IAAIE,kBAAwCF;IAC5C,MAAMG,WAAW,OAAOhB,UAAU;IAElC,sDAAsD;IACtD,IAAIQ,WAAW;QACbI,iBAAiBK,IAAAA,iCAAiB,EAAClB,OAAQO;QAC3C,2BAA2B;QAC3B,OAAOV,eAAe;YACpBS;YACAC;YACAM;YACAG;YACAX;YACAD;QACF;IACF,OAEK,IAAIa,UAAU;QACjB,IAAI;YACFD,kBAAkBG,IAAAA,kCAAkB,EAACX,MAAMP,OAAOC;QACpD,EAAE,OAAOkB,GAAG;YACVd,OAAOe,IAAI,CAAC,CAAC,gFAAgF,EAAED,GAAG;QAClG,mGAAmG;QACrG;QACAL,mBAAmBlB,eAAe;YAChCS;YACAC;YACAM;YACAG;YACAX;YACAD;QACF;QAEA,0GAA0G;QAC1G,oEAAoE;QACpE,IAAIkB,IAAAA,8BAAc,EAACrB,OAAOO,MAAML,iBAAiBG,SAAS;YACxDA,OAAOiB,OAAO,CACZ,CAAC,kIAAkI,EAAER,iBAAiBS,IAAI,CACxJ,MACC;YAELT,mBAAmB;mBAAI,IAAIU,IAAIV,iBAAiBW,MAAM,CAACC,OAAOC,IAAI,CAACrB;aAAgB;QACrF;QACA,OAAOQ;IACT,OAAO;QACL,4DAA4D;QAC5D,OAAOY,OAAOC,IAAI,CAACrB;IACrB;AACF;AAEO,SAASV,eAAeE,OAO9B;IACC,MAAM,EAAEc,cAAc,EAAEG,eAAe,EAAET,YAAY,EAAEH,iBAAiB,EAAEC,mBAAmB,EAAEC,MAAM,EAAE,GAAGP;IAE1G,IAAI8B,WAAqB,EAAE;IAE3B,0FAA0F;IAC1F,IAAI,OAAOhB,mBAAmB,eAAe,OAAOG,oBAAoB,aAAa;QACnF,sEAAsE;QACtE,8DAA8D;QAC9D,wFAAwF;QACxFa,WAAWb,gBACRc,MAAM,CAAC,CAACC,MAAQlB,eAAemB,QAAQ,CAACD,MACxCL,MAAM,CAACO,IAAAA,uCAAuB,EAACjB,iBAAiBT,cAAcM;QAEjEP,OAAOiB,OAAO,CAAC,CAAC,qCAAqC,EAAEM,SAASL,IAAI,CAAC,MAAM;IAC7E,OAAO,IAAI,OAAOR,oBAAoB,aAAa;QACjDa,WAAW;eAAIb;SAAgB;QAC/BV,OAAOiB,OAAO,CAAC,CAAC,wBAAwB,EAAEP,gBAAgBQ,IAAI,CAAC,MAAM;IACvE,OAAO,IAAI,OAAOX,mBAAmB,aAAa;QAChDgB,WAAW;eAAIhB;SAAe;QAC9BP,OAAOiB,OAAO,CAAC,CAAC,sBAAsB,EAAEV,eAAeW,IAAI,CAAC,MAAM;IACpE,OAAO;QACLK,WAAWF,OAAOC,IAAI,CAACrB;IACzB;IAEA,+DAA+D;IAC/D,IAAIH,mBAAmB;QACrBE,OAAOiB,OAAO,CAAC,CAAC,sCAAsC,CAAC;QACvDM,WAAWA,SAASH,MAAM,CAACO,IAAAA,uCAAuB,EAACJ,UAAUtB;IAC/D;IAEA,qDAAqD;IACrD,IAAIF,qBAAqB;QACvBC,OAAOiB,OAAO,CAAC,CAAC,wCAAwC,CAAC;QACzDM,WAAWA,SAASH,MAAM,CAACQ,IAAAA,yCAAyB,EAACL,UAAUtB;IACjE;IAEA,MAAM4B,SAAS,IAAIV,IAAII;IAEvB,OAAO;WAAIM;KAAO;AACpB"}
1
+ {"version":3,"sources":["../../src/filter/getFilteredPackages.ts"],"sourcesContent":["import type { PackageInfos } from \"workspace-tools\";\nimport { getScopedPackages, getChangedPackages, getTransitiveDependents, getTransitiveDependencies } from \"workspace-tools\";\n\nimport type { Logger } from \"@lage-run/logger\";\nimport { hasRepoChanged } from \"./hasRepoChanged.js\";\n\nexport function getFilteredPackages(options: {\n root: string;\n packageInfos: PackageInfos;\n logger: Logger;\n scope: string[] | undefined;\n since: string | undefined;\n sinceIgnoreGlobs: string[] | undefined;\n repoWideChanges: string[];\n includeDependents: boolean;\n includeDependencies: boolean;\n}): string[] {\n const { scope, since, sinceIgnoreGlobs, repoWideChanges, includeDependents, includeDependencies, logger, packageInfos, root } = options;\n\n // If scoped is defined, get scoped packages\n const hasScopes = Array.isArray(scope) && scope.length > 0;\n let scopedPackages: string[] | undefined = undefined;\n let filteredPackages: string[] | undefined = undefined;\n let changedPackages: string[] | undefined = undefined;\n const hasSince = typeof since !== \"undefined\";\n\n // If scope is defined, get scoped packages and return\n if (hasScopes) {\n scopedPackages = getScopedPackages(scope!, packageInfos);\n // return filteredPackages;\n return filterPackages({\n logger,\n packageInfos,\n scopedPackages,\n changedPackages,\n includeDependencies,\n includeDependents,\n });\n }\n // If since is defined, get changed packages.\n else if (hasSince) {\n try {\n changedPackages = getChangedPackages({\n cwd: root,\n target: since,\n ignoreGlobs: sinceIgnoreGlobs,\n });\n } catch (e) {\n logger.warn(`An error in the git command has caused this scope run to include every package\\n${e}`);\n // if getChangedPackages throws, we will assume all have changed (using changedPackage = undefined)\n }\n filteredPackages = filterPackages({\n logger,\n packageInfos,\n scopedPackages,\n changedPackages,\n includeDependencies,\n includeDependents,\n });\n\n // If the defined repo-wide changes are detected the get all packages and append to the filtered packages.\n // This alo ensures that the modified packages are always run first.\n if (hasRepoChanged({ since, root, environmentGlob: repoWideChanges, logger })) {\n logger.verbose(\n `Repo-wide changes detected, running all packages. The following changed packages and their deps (if specified) will be run first: ${filteredPackages.join(\n \",\"\n )}`\n );\n filteredPackages = [...new Set(filteredPackages.concat(Object.keys(packageInfos)))];\n }\n return filteredPackages;\n } else {\n // If neither scope or since is defined, return all packages\n return Object.keys(packageInfos);\n }\n}\n\nexport function filterPackages(options: {\n logger: Logger;\n packageInfos: PackageInfos;\n includeDependents: boolean;\n includeDependencies: boolean;\n scopedPackages: string[] | undefined;\n changedPackages: string[] | undefined;\n}): string[] {\n const { scopedPackages, changedPackages, packageInfos, includeDependents, includeDependencies, logger } = options;\n\n let filtered: string[] = [];\n\n // If scope is defined, use the transitive providers of the since packages up to the scope\n if (typeof scopedPackages !== \"undefined\" && typeof changedPackages !== \"undefined\") {\n // If both scoped and since are specified, we have to merge two lists:\n // 1. changed packages that ARE themselves the scoped packages\n // 2. changed package consumers (package dependents) that are within the scoped subgraph\n filtered = changedPackages\n .filter((pkg) => scopedPackages.includes(pkg))\n .concat(getTransitiveDependents(changedPackages, packageInfos, scopedPackages));\n\n logger.verbose(`filterPackages changed within scope: ${filtered.join(\",\")}`);\n } else if (typeof changedPackages !== \"undefined\") {\n filtered = [...changedPackages];\n logger.verbose(`filterPackages changed: ${changedPackages.join(\",\")}`);\n } else if (typeof scopedPackages !== \"undefined\") {\n filtered = [...scopedPackages];\n logger.verbose(`filterPackages scope: ${scopedPackages.join(\",\")}`);\n } else {\n filtered = Object.keys(packageInfos);\n }\n\n // adds dependents (consumers) of all filtered package thus far\n if (includeDependents) {\n logger.verbose(`filterPackages running with dependents`);\n filtered = filtered.concat(getTransitiveDependents(filtered, packageInfos));\n }\n\n // adds dependencies of all filtered package thus far\n if (includeDependencies) {\n logger.verbose(`filterPackages running with dependencies`);\n filtered = filtered.concat(getTransitiveDependencies(filtered, packageInfos));\n }\n\n const unique = new Set(filtered);\n\n return [...unique];\n}\n"],"names":["filterPackages","getFilteredPackages","options","scope","since","sinceIgnoreGlobs","repoWideChanges","includeDependents","includeDependencies","logger","packageInfos","root","hasScopes","Array","isArray","length","scopedPackages","undefined","filteredPackages","changedPackages","hasSince","getScopedPackages","getChangedPackages","cwd","target","ignoreGlobs","e","warn","hasRepoChanged","environmentGlob","verbose","join","Set","concat","Object","keys","filtered","filter","pkg","includes","getTransitiveDependents","getTransitiveDependencies","unique"],"mappings":"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"}
@@ -1,2 +1,14 @@
1
1
  import type { Logger } from "@lage-run/logger";
2
- export declare function hasRepoChanged(since: string, root: string, environmentGlob: string[], logger: Logger): boolean;
2
+ /**
3
+ * Check whether any `environmentGlob` files have changed since the `--since` ref.
4
+ * If `environmentGlob` is empty, it returns false.
5
+ */
6
+ export declare function hasRepoChanged(params: {
7
+ /** `--since` CLI arg */
8
+ since: string;
9
+ /** Absolute path to monorepo root */
10
+ root: string;
11
+ /** `environmentGlob` from cache config */
12
+ environmentGlob: string[];
13
+ logger: Logger;
14
+ }): boolean;
@@ -51,22 +51,24 @@ function _interop_require_wildcard(obj, nodeInterop) {
51
51
  }
52
52
  return newObj;
53
53
  }
54
- function hasRepoChanged(since, root, environmentGlob, logger) {
54
+ function hasRepoChanged(params) {
55
+ const { since, root, environmentGlob, logger } = params;
56
+ if (!environmentGlob.length) {
57
+ // Following old logic: if no environmentGlob, it hasn't changed
58
+ return false;
59
+ }
55
60
  try {
56
- const changedFiles = (0, _workspacetools.getBranchChanges)(since, root);
57
- const envFiles = _fastglob.sync(environmentGlob, {
61
+ const changedFiles = (0, _workspacetools.getBranchChanges)({
62
+ branch: since,
58
63
  cwd: root
59
64
  });
60
- let repoWideChanged = false;
61
- if (changedFiles) {
62
- for (const change of changedFiles){
63
- if (envFiles.includes(change)) {
64
- repoWideChanged = true;
65
- break;
66
- }
67
- }
65
+ if (!changedFiles.length) {
66
+ return false;
68
67
  }
69
- return repoWideChanged;
68
+ const envFiles = _fastglob.sync(environmentGlob, {
69
+ cwd: root
70
+ });
71
+ return envFiles.some((envFile)=>changedFiles.includes(envFile));
70
72
  } catch (e) {
71
73
  // if this fails, let's assume repo has changed
72
74
  logger.warn(`An error in the git command has caused this to consider the repo has changed\n${e}`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/filter/hasRepoChanged.ts"],"sourcesContent":["import { getBranchChanges } from \"workspace-tools\";\nimport * as fg from \"fast-glob\";\nimport type { Logger } from \"@lage-run/logger\";\n\nexport function hasRepoChanged(since: string, root: string, environmentGlob: string[], logger: Logger): boolean {\n try {\n const changedFiles = getBranchChanges(since, root);\n const envFiles = fg.sync(environmentGlob, { cwd: root });\n let repoWideChanged = false;\n\n if (changedFiles) {\n for (const change of changedFiles) {\n if (envFiles.includes(change)) {\n repoWideChanged = true;\n break;\n }\n }\n }\n\n return repoWideChanged;\n } catch (e) {\n // if this fails, let's assume repo has changed\n logger.warn(`An error in the git command has caused this to consider the repo has changed\\n${e}`);\n return true;\n }\n}\n"],"names":["hasRepoChanged","since","root","environmentGlob","logger","changedFiles","getBranchChanges","envFiles","fg","sync","cwd","repoWideChanged","change","includes","e","warn"],"mappings":";;;;+BAIgBA;;;eAAAA;;;gCAJiB;kEACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGb,SAASA,eAAeC,KAAa,EAAEC,IAAY,EAAEC,eAAyB,EAAEC,MAAc;IACnG,IAAI;QACF,MAAMC,eAAeC,IAAAA,gCAAgB,EAACL,OAAOC;QAC7C,MAAMK,WAAWC,UAAGC,IAAI,CAACN,iBAAiB;YAAEO,KAAKR;QAAK;QACtD,IAAIS,kBAAkB;QAEtB,IAAIN,cAAc;YAChB,KAAK,MAAMO,UAAUP,aAAc;gBACjC,IAAIE,SAASM,QAAQ,CAACD,SAAS;oBAC7BD,kBAAkB;oBAClB;gBACF;YACF;QACF;QAEA,OAAOA;IACT,EAAE,OAAOG,GAAG;QACV,+CAA+C;QAC/CV,OAAOW,IAAI,CAAC,CAAC,8EAA8E,EAAED,GAAG;QAChG,OAAO;IACT;AACF"}
1
+ {"version":3,"sources":["../../src/filter/hasRepoChanged.ts"],"sourcesContent":["import { getBranchChanges } from \"workspace-tools\";\nimport * as fg from \"fast-glob\";\nimport type { Logger } from \"@lage-run/logger\";\n\n/**\n * Check whether any `environmentGlob` files have changed since the `--since` ref.\n * If `environmentGlob` is empty, it returns false.\n */\nexport function hasRepoChanged(params: {\n /** `--since` CLI arg */\n since: string;\n /** Absolute path to monorepo root */\n root: string;\n /** `environmentGlob` from cache config */\n environmentGlob: string[];\n logger: Logger;\n}): boolean {\n const { since, root, environmentGlob, logger } = params;\n\n if (!environmentGlob.length) {\n // Following old logic: if no environmentGlob, it hasn't changed\n return false;\n }\n\n try {\n const changedFiles = getBranchChanges({\n branch: since,\n cwd: root,\n });\n if (!changedFiles.length) {\n return false;\n }\n\n const envFiles = fg.sync(environmentGlob, { cwd: root });\n\n return envFiles.some((envFile) => changedFiles.includes(envFile));\n } catch (e) {\n // if this fails, let's assume repo has changed\n logger.warn(`An error in the git command has caused this to consider the repo has changed\\n${e}`);\n return true;\n }\n}\n"],"names":["hasRepoChanged","params","since","root","environmentGlob","logger","length","changedFiles","getBranchChanges","branch","cwd","envFiles","fg","sync","some","envFile","includes","e","warn"],"mappings":";;;;+BAQgBA;;;eAAAA;;;gCARiB;kEACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOb,SAASA,eAAeC,MAQ9B;IACC,MAAM,EAAEC,KAAK,EAAEC,IAAI,EAAEC,eAAe,EAAEC,MAAM,EAAE,GAAGJ;IAEjD,IAAI,CAACG,gBAAgBE,MAAM,EAAE;QAC3B,gEAAgE;QAChE,OAAO;IACT;IAEA,IAAI;QACF,MAAMC,eAAeC,IAAAA,gCAAgB,EAAC;YACpCC,QAAQP;YACRQ,KAAKP;QACP;QACA,IAAI,CAACI,aAAaD,MAAM,EAAE;YACxB,OAAO;QACT;QAEA,MAAMK,WAAWC,UAAGC,IAAI,CAACT,iBAAiB;YAAEM,KAAKP;QAAK;QAEtD,OAAOQ,SAASG,IAAI,CAAC,CAACC,UAAYR,aAAaS,QAAQ,CAACD;IAC1D,EAAE,OAAOE,GAAG;QACV,+CAA+C;QAC/CZ,OAAOa,IAAI,CAAC,CAAC,8EAA8E,EAAED,GAAG;QAChG,OAAO;IACT;AACF"}
package/lib/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
- export type { CacheOptions, ConfigFileOptions, ConfigOptions, LoggerOptions, PipelineDefinition, Priority } from "@lage-run/config";
1
+ export type { CacheOptions, ConfigFileOptions, ConfigOptions, LoggerOptions, PipelineDefinition } from "@lage-run/config";
2
+ export type { Reporter, LogLevel, LogEntry, LogStructuredData } from "@lage-run/logger";
2
3
  export type { NpmScriptRunnerOptions, NpmScriptTargetOptions, TargetRunnerPickerOptions, TargetRunOptions, TargetRunResult, WorkerRunnerFunction, WorkerRunnerFunctionOptions, WorkerRunnerOptions, WorkerTargetOptions, } from "@lage-run/runners";
3
- export type { Target, TargetConfig } from "@lage-run/target-graph";
4
+ export type { Priority, Target, TargetConfig } from "@lage-run/target-graph";
5
+ export type { ReporterInitOptions } from "./types/ReporterInitOptions.js";
@@ -0,0 +1 @@
1
+ export type { InfoResult } from "./commands/info/action.js";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -13,7 +13,7 @@ async function optimizeTargetGraph(graph, runnerPicker, createBackCompatGraph) {
13
13
  const targetMinimizedNodes = await (0, _targetgraph.removeNodes)([
14
14
  ...graph.targets.values()
15
15
  ], async (target)=>{
16
- if (target.type === "noop") {
16
+ if (target.type === _targetgraph.builtInTargetTypes.noop) {
17
17
  return true;
18
18
  }
19
19
  if (target.id === (0, _targetgraph.getStartTargetId)()) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/optimizeTargetGraph.ts"],"sourcesContent":["import type { TargetRunnerPicker } from \"@lage-run/runners\";\nimport { type TargetGraph, removeNodes, transitiveReduction, getStartTargetId, type Target } from \"@lage-run/target-graph\";\n\nexport async function optimizeTargetGraph(\n graph: TargetGraph,\n runnerPicker: TargetRunnerPicker,\n createBackCompatGraph: boolean\n): Promise<Target[]> {\n const targetMinimizedNodes = await removeNodes([...graph.targets.values()], async (target) => {\n if (target.type === \"noop\") {\n return true;\n }\n\n if (target.id === getStartTargetId()) {\n return createBackCompatGraph;\n }\n\n const runner = await runnerPicker.pick(target);\n if (await runner.shouldRun(target)) {\n return false;\n }\n\n return true;\n });\n\n if (createBackCompatGraph) {\n return targetMinimizedNodes;\n }\n\n const reduced = transitiveReduction(targetMinimizedNodes);\n\n // Update the dependents of nodes based on the new set of dependencies\n // first build up a dependency map for quick lookup\n const dependencyMap = new Map<string, Set<string>>();\n for (const node of reduced) {\n for (const depId of node.dependencies) {\n if (!dependencyMap.has(depId)) {\n dependencyMap.set(depId, new Set<string>());\n }\n dependencyMap.get(depId)!.add(node.id);\n }\n }\n\n // update the dependents of each node\n for (const node of reduced) {\n const dependents = new Set<string>();\n if (dependencyMap.has(node.id)) {\n dependencyMap.get(node.id)!.forEach((dependentId) => dependents.add(dependentId));\n }\n\n node.dependents = Array.from(dependents);\n }\n\n return reduced;\n}\n"],"names":["optimizeTargetGraph","graph","runnerPicker","createBackCompatGraph","targetMinimizedNodes","removeNodes","targets","values","target","type","id","getStartTargetId","runner","pick","shouldRun","reduced","transitiveReduction","dependencyMap","Map","node","depId","dependencies","has","set","Set","get","add","dependents","forEach","dependentId","Array","from"],"mappings":";;;;+BAGsBA;;;eAAAA;;;6BAF4E;AAE3F,eAAeA,oBACpBC,KAAkB,EAClBC,YAAgC,EAChCC,qBAA8B;IAE9B,MAAMC,uBAAuB,MAAMC,IAAAA,wBAAW,EAAC;WAAIJ,MAAMK,OAAO,CAACC,MAAM;KAAG,EAAE,OAAOC;QACjF,IAAIA,OAAOC,IAAI,KAAK,QAAQ;YAC1B,OAAO;QACT;QAEA,IAAID,OAAOE,EAAE,KAAKC,IAAAA,6BAAgB,KAAI;YACpC,OAAOR;QACT;QAEA,MAAMS,SAAS,MAAMV,aAAaW,IAAI,CAACL;QACvC,IAAI,MAAMI,OAAOE,SAAS,CAACN,SAAS;YAClC,OAAO;QACT;QAEA,OAAO;IACT;IAEA,IAAIL,uBAAuB;QACzB,OAAOC;IACT;IAEA,MAAMW,UAAUC,IAAAA,gCAAmB,EAACZ;IAEpC,sEAAsE;IACtE,mDAAmD;IACnD,MAAMa,gBAAgB,IAAIC;IAC1B,KAAK,MAAMC,QAAQJ,QAAS;QAC1B,KAAK,MAAMK,SAASD,KAAKE,YAAY,CAAE;YACrC,IAAI,CAACJ,cAAcK,GAAG,CAACF,QAAQ;gBAC7BH,cAAcM,GAAG,CAACH,OAAO,IAAII;YAC/B;YACAP,cAAcQ,GAAG,CAACL,OAAQM,GAAG,CAACP,KAAKT,EAAE;QACvC;IACF;IAEA,qCAAqC;IACrC,KAAK,MAAMS,QAAQJ,QAAS;QAC1B,MAAMY,aAAa,IAAIH;QACvB,IAAIP,cAAcK,GAAG,CAACH,KAAKT,EAAE,GAAG;YAC9BO,cAAcQ,GAAG,CAACN,KAAKT,EAAE,EAAGkB,OAAO,CAAC,CAACC,cAAgBF,WAAWD,GAAG,CAACG;QACtE;QAEAV,KAAKQ,UAAU,GAAGG,MAAMC,IAAI,CAACJ;IAC/B;IAEA,OAAOZ;AACT"}
1
+ {"version":3,"sources":["../src/optimizeTargetGraph.ts"],"sourcesContent":["import type { TargetRunnerPicker } from \"@lage-run/runners\";\nimport {\n type TargetGraph,\n removeNodes,\n transitiveReduction,\n getStartTargetId,\n type Target,\n builtInTargetTypes,\n} from \"@lage-run/target-graph\";\n\nexport async function optimizeTargetGraph(\n graph: TargetGraph,\n runnerPicker: TargetRunnerPicker,\n createBackCompatGraph: boolean\n): Promise<Target[]> {\n const targetMinimizedNodes = await removeNodes([...graph.targets.values()], async (target) => {\n if (target.type === builtInTargetTypes.noop) {\n return true;\n }\n\n if (target.id === getStartTargetId()) {\n return createBackCompatGraph;\n }\n\n const runner = await runnerPicker.pick(target);\n if (await runner.shouldRun(target)) {\n return false;\n }\n\n return true;\n });\n\n if (createBackCompatGraph) {\n return targetMinimizedNodes;\n }\n\n const reduced = transitiveReduction(targetMinimizedNodes);\n\n // Update the dependents of nodes based on the new set of dependencies\n // first build up a dependency map for quick lookup\n const dependencyMap = new Map<string, Set<string>>();\n for (const node of reduced) {\n for (const depId of node.dependencies) {\n if (!dependencyMap.has(depId)) {\n dependencyMap.set(depId, new Set<string>());\n }\n dependencyMap.get(depId)!.add(node.id);\n }\n }\n\n // update the dependents of each node\n for (const node of reduced) {\n const dependents = new Set<string>();\n if (dependencyMap.has(node.id)) {\n dependencyMap.get(node.id)!.forEach((dependentId) => dependents.add(dependentId));\n }\n\n node.dependents = Array.from(dependents);\n }\n\n return reduced;\n}\n"],"names":["optimizeTargetGraph","graph","runnerPicker","createBackCompatGraph","targetMinimizedNodes","removeNodes","targets","values","target","type","builtInTargetTypes","noop","id","getStartTargetId","runner","pick","shouldRun","reduced","transitiveReduction","dependencyMap","Map","node","depId","dependencies","has","set","Set","get","add","dependents","forEach","dependentId","Array","from"],"mappings":";;;;+BAUsBA;;;eAAAA;;;6BAFf;AAEA,eAAeA,oBACpBC,KAAkB,EAClBC,YAAgC,EAChCC,qBAA8B;IAE9B,MAAMC,uBAAuB,MAAMC,IAAAA,wBAAW,EAAC;WAAIJ,MAAMK,OAAO,CAACC,MAAM;KAAG,EAAE,OAAOC;QACjF,IAAIA,OAAOC,IAAI,KAAKC,+BAAkB,CAACC,IAAI,EAAE;YAC3C,OAAO;QACT;QAEA,IAAIH,OAAOI,EAAE,KAAKC,IAAAA,6BAAgB,KAAI;YACpC,OAAOV;QACT;QAEA,MAAMW,SAAS,MAAMZ,aAAaa,IAAI,CAACP;QACvC,IAAI,MAAMM,OAAOE,SAAS,CAACR,SAAS;YAClC,OAAO;QACT;QAEA,OAAO;IACT;IAEA,IAAIL,uBAAuB;QACzB,OAAOC;IACT;IAEA,MAAMa,UAAUC,IAAAA,gCAAmB,EAACd;IAEpC,sEAAsE;IACtE,mDAAmD;IACnD,MAAMe,gBAAgB,IAAIC;IAC1B,KAAK,MAAMC,QAAQJ,QAAS;QAC1B,KAAK,MAAMK,SAASD,KAAKE,YAAY,CAAE;YACrC,IAAI,CAACJ,cAAcK,GAAG,CAACF,QAAQ;gBAC7BH,cAAcM,GAAG,CAACH,OAAO,IAAII;YAC/B;YACAP,cAAcQ,GAAG,CAACL,OAAQM,GAAG,CAACP,KAAKT,EAAE;QACvC;IACF;IAEA,qCAAqC;IACrC,KAAK,MAAMS,QAAQJ,QAAS;QAC1B,MAAMY,aAAa,IAAIH;QACvB,IAAIP,cAAcK,GAAG,CAACH,KAAKT,EAAE,GAAG;YAC9BO,cAAcQ,GAAG,CAACN,KAAKT,EAAE,EAAGkB,OAAO,CAAC,CAACC,cAAgBF,WAAWD,GAAG,CAACG;QACtE;QAEAV,KAAKQ,UAAU,GAAGG,MAAMC,IAAI,CAACJ;IAC/B;IAEA,OAAOZ;AACT"}
@@ -7,6 +7,10 @@ export type ReporterName = BuiltInReporterName | string;
7
7
  export declare const builtInReporterNames: string[];
8
8
  /** Built-in reporter names that should be listed in doc output */
9
9
  export declare const logBuiltInReporterNames: string[];
10
+ /**
11
+ * Options for initializing reporters.
12
+ * This is also passed to the constructor of a custom reporter class.
13
+ */
10
14
  export interface ReporterInitOptions {
11
15
  reporter: ReporterName[] | ReporterName | undefined;
12
16
  progress: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/ReporterInitOptions.ts"],"sourcesContent":["import type { LogLevel } from \"@lage-run/logger\";\n\n/** All the built-in reporter names */\nexport type BuiltInReporterName =\n | \"default\"\n | \"profile\"\n | \"json\"\n | \"azureDevops\"\n | \"adoLog\"\n | \"githubActions\"\n | \"gha\"\n | \"npmLog\"\n | \"old\"\n | \"verboseFileLog\"\n | \"vfl\"\n | \"fancy\";\n/** Built-in or custom reporter name */\nexport type ReporterName = BuiltInReporterName | string;\n\n/** Whether each built-in reporter name should be listed in doc output */\nconst shouldListBuiltInReporters: Record<BuiltInReporterName, boolean> = {\n json: true,\n azureDevops: true,\n npmLog: true,\n verboseFileLog: true,\n vfl: true,\n adoLog: true,\n githubActions: true,\n gha: true,\n fancy: true,\n default: true,\n // Not encouraged\n old: false,\n // Intended to be set via --profile\n profile: false,\n};\n\n/** All the built-in reporter names */\nexport const builtInReporterNames: string[] = Object.keys(shouldListBuiltInReporters);\n\n/** Built-in reporter names that should be listed in doc output */\nexport const logBuiltInReporterNames: string[] = builtInReporterNames.filter(\n (name) => shouldListBuiltInReporters[name as BuiltInReporterName]\n);\n\nexport interface ReporterInitOptions {\n reporter: ReporterName[] | ReporterName | undefined;\n progress: boolean;\n verbose: boolean;\n grouped: boolean;\n concurrency: number;\n logLevel: keyof typeof LogLevel;\n profile?: boolean | string;\n logFile?: string;\n indented?: boolean;\n}\n"],"names":["builtInReporterNames","logBuiltInReporterNames","shouldListBuiltInReporters","json","azureDevops","npmLog","verboseFileLog","vfl","adoLog","githubActions","gha","fancy","default","old","profile","Object","keys","filter","name"],"mappings":";;;;;;;;;;;QAsCaA;eAAAA;;QAGAC;eAAAA;;;AAtBb,uEAAuE,GACvE,MAAMC,6BAAmE;IACvEC,MAAM;IACNC,aAAa;IACbC,QAAQ;IACRC,gBAAgB;IAChBC,KAAK;IACLC,QAAQ;IACRC,eAAe;IACfC,KAAK;IACLC,OAAO;IACPC,SAAS;IACT,iBAAiB;IACjBC,KAAK;IACL,mCAAmC;IACnCC,SAAS;AACX;AAGO,MAAMd,uBAAiCe,OAAOC,IAAI,CAACd;AAGnD,MAAMD,0BAAoCD,qBAAqBiB,MAAM,CAC1E,CAACC,OAAShB,0BAA0B,CAACgB,KAA4B"}
1
+ {"version":3,"sources":["../../src/types/ReporterInitOptions.ts"],"sourcesContent":["import type { LogLevel } from \"@lage-run/logger\";\n\n/** All the built-in reporter names */\nexport type BuiltInReporterName =\n | \"default\"\n | \"profile\"\n | \"json\"\n | \"azureDevops\"\n | \"adoLog\"\n | \"githubActions\"\n | \"gha\"\n | \"npmLog\"\n | \"old\"\n | \"verboseFileLog\"\n | \"vfl\"\n | \"fancy\";\n/** Built-in or custom reporter name */\nexport type ReporterName = BuiltInReporterName | string;\n\n/** Whether each built-in reporter name should be listed in doc output */\nconst shouldListBuiltInReporters: Record<BuiltInReporterName, boolean> = {\n json: true,\n azureDevops: true,\n npmLog: true,\n verboseFileLog: true,\n vfl: true,\n adoLog: true,\n githubActions: true,\n gha: true,\n fancy: true,\n default: true,\n // Not encouraged\n old: false,\n // Intended to be set via --profile\n profile: false,\n};\n\n/** All the built-in reporter names */\nexport const builtInReporterNames: string[] = Object.keys(shouldListBuiltInReporters);\n\n/** Built-in reporter names that should be listed in doc output */\nexport const logBuiltInReporterNames: string[] = builtInReporterNames.filter(\n (name) => shouldListBuiltInReporters[name as BuiltInReporterName]\n);\n\n/**\n * Options for initializing reporters.\n * This is also passed to the constructor of a custom reporter class.\n */\nexport interface ReporterInitOptions {\n reporter: ReporterName[] | ReporterName | undefined;\n progress: boolean;\n verbose: boolean;\n grouped: boolean;\n concurrency: number;\n logLevel: keyof typeof LogLevel;\n profile?: boolean | string;\n logFile?: string;\n indented?: boolean;\n}\n"],"names":["builtInReporterNames","logBuiltInReporterNames","shouldListBuiltInReporters","json","azureDevops","npmLog","verboseFileLog","vfl","adoLog","githubActions","gha","fancy","default","old","profile","Object","keys","filter","name"],"mappings":";;;;;;;;;;;QAsCaA;eAAAA;;QAGAC;eAAAA;;;AAtBb,uEAAuE,GACvE,MAAMC,6BAAmE;IACvEC,MAAM;IACNC,aAAa;IACbC,QAAQ;IACRC,gBAAgB;IAChBC,KAAK;IACLC,QAAQ;IACRC,eAAe;IACfC,KAAK;IACLC,OAAO;IACPC,SAAS;IACT,iBAAiB;IACjBC,KAAK;IACL,mCAAmC;IACnCC,SAAS;AACX;AAGO,MAAMd,uBAAiCe,OAAOC,IAAI,CAACd;AAGnD,MAAMD,0BAAoCD,qBAAqBiB,MAAM,CAC1E,CAACC,OAAShB,0BAA0B,CAACgB,KAA4B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lage-run/cli",
3
- "version": "0.34.0",
3
+ "version": "0.34.1",
4
4
  "description": "Command Line Interface for Lage",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,18 +22,18 @@
22
22
  "lint": "monorepo-scripts lint"
23
23
  },
24
24
  "dependencies": {
25
- "@lage-run/cache": "^1.4.7",
26
- "@lage-run/config": "^0.9.0",
27
- "@lage-run/format-hrtime": "^0.1.8",
25
+ "@lage-run/cache": "^1.4.8",
26
+ "@lage-run/config": "^0.9.1",
27
+ "@lage-run/format-hrtime": "^0.1.9",
28
28
  "@lage-run/globby": "^13.0.1",
29
- "@lage-run/hasher": "^1.9.4",
29
+ "@lage-run/hasher": "^1.9.5",
30
30
  "@lage-run/logger": "^1.3.3",
31
- "@lage-run/reporters": "^1.4.1",
31
+ "@lage-run/reporters": "^1.5.0",
32
32
  "@lage-run/rpc": "^1.4.3",
33
- "@lage-run/runners": "^1.3.1",
34
- "@lage-run/scheduler": "^1.5.19",
35
- "@lage-run/scheduler-types": "^0.3.30",
36
- "@lage-run/target-graph": "^0.13.0",
33
+ "@lage-run/runners": "^1.4.0",
34
+ "@lage-run/scheduler": "^1.5.20",
35
+ "@lage-run/scheduler-types": "^0.3.31",
36
+ "@lage-run/target-graph": "^0.14.0",
37
37
  "@lage-run/worker-threads-pool": "^0.9.3",
38
38
  "chokidar": "^3.6.0",
39
39
  "commander": "^9.5.0",
@@ -1 +0,0 @@
1
- export declare const isRunningFromCI: boolean;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "isRunningFromCI", {
6
- enumerable: true,
7
- get: function() {
8
- return isRunningFromCI;
9
- }
10
- });
11
- const isRunningFromCI = process.env.NODE_ENV !== "test" && (!!process.env.CI || !!process.env.TF_BUILD);
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/cache/isRunningFromCI.ts"],"sourcesContent":["export const isRunningFromCI: boolean = process.env.NODE_ENV !== \"test\" && (!!process.env.CI || !!process.env.TF_BUILD);\n"],"names":["isRunningFromCI","process","env","NODE_ENV","CI","TF_BUILD"],"mappings":";;;;+BAAaA;;;eAAAA;;;AAAN,MAAMA,kBAA2BC,QAAQC,GAAG,CAACC,QAAQ,KAAK,UAAW,CAAA,CAAC,CAACF,QAAQC,GAAG,CAACE,EAAE,IAAI,CAAC,CAACH,QAAQC,GAAG,CAACG,QAAQ,AAAD"}
@@ -1 +0,0 @@
1
- export declare const isRunningFromCI: boolean;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "isRunningFromCI", {
6
- enumerable: true,
7
- get: function() {
8
- return isRunningFromCI;
9
- }
10
- });
11
- const isRunningFromCI = process.env.NODE_ENV !== "test" && (!!process.env.CI || !!process.env.TF_BUILD);
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/isRunningFromCI.ts"],"sourcesContent":["export const isRunningFromCI: boolean = process.env.NODE_ENV !== \"test\" && (!!process.env.CI || !!process.env.TF_BUILD);\n"],"names":["isRunningFromCI","process","env","NODE_ENV","CI","TF_BUILD"],"mappings":";;;;+BAAaA;;;eAAAA;;;AAAN,MAAMA,kBAA2BC,QAAQC,GAAG,CAACC,QAAQ,KAAK,UAAW,CAAA,CAAC,CAACF,QAAQC,GAAG,CAACE,EAAE,IAAI,CAAC,CAACH,QAAQC,GAAG,CAACG,QAAQ,AAAD"}