@lage-run/cli 0.33.3 → 0.33.4

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.
@@ -43,6 +43,12 @@ async function createReporter(reporter, options, customReporters = {}) {
43
43
  grouped,
44
44
  logLevel: verbose ? _logger.LogLevel.verbose : logLevel
45
45
  });
46
+ case "githubActions":
47
+ case "gha":
48
+ return new _reporters.GithubActionsReporter({
49
+ grouped,
50
+ logLevel: verbose ? _logger.LogLevel.verbose : logLevel
51
+ });
46
52
  case "npmLog":
47
53
  case "old":
48
54
  return new _reporters.LogReporter({
@@ -80,7 +86,19 @@ async function createReporter(reporter, options, customReporters = {}) {
80
86
  throw new Error(`Failed to load custom reporter "${reporter}" from "${resolvedPath}": ${error}`);
81
87
  }
82
88
  }
83
- // Default reporter behavior
89
+ // Default reporter behavior - auto-detect CI environments
90
+ if (process.env.GITHUB_ACTIONS) {
91
+ return new _reporters.GithubActionsReporter({
92
+ grouped: true,
93
+ logLevel: verbose ? _logger.LogLevel.verbose : logLevel
94
+ });
95
+ }
96
+ if (process.env.TF_BUILD) {
97
+ return new _reporters.AdoReporter({
98
+ grouped: true,
99
+ logLevel: verbose ? _logger.LogLevel.verbose : logLevel
100
+ });
101
+ }
84
102
  if (progress && (0, _isinteractive.default)() && !(logLevel >= _logger.LogLevel.verbose || verbose || grouped)) {
85
103
  return new _reporters.BasicReporter({
86
104
  concurrency,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/createReporter.ts"],"sourcesContent":["import { LogLevel } from \"@lage-run/logger\";\nimport {\n JsonReporter,\n AdoReporter,\n LogReporter,\n ProgressReporter,\n BasicReporter,\n VerboseFileLogReporter,\n ChromeTraceEventsReporter,\n} from \"@lage-run/reporters\";\nimport type { BuiltInReporterName, ReporterInitOptions } from \"../types/ReporterInitOptions.js\";\nimport type { Reporter } from \"@lage-run/logger\";\nimport { findPackageRoot } from \"workspace-tools\";\nimport { readFileSync } from \"fs\";\nimport path from \"path\";\nimport { pathToFileURL } from \"url\";\nimport isInteractive from \"is-interactive\";\n\nexport async function createReporter(\n reporter: string,\n options: ReporterInitOptions,\n customReporters: Record<string, string> = {}\n): Promise<Reporter> {\n const { verbose, grouped, logLevel: logLevelName, concurrency, profile, progress, logFile, indented } = options;\n const logLevel = LogLevel[logLevelName];\n\n const root = findPackageRoot(__filename)!;\n const packageJson = JSON.parse(readFileSync(path.join(root, \"package.json\"), \"utf-8\"));\n const version = packageJson.version;\n\n switch (reporter as BuiltInReporterName) {\n case \"profile\":\n return new ChromeTraceEventsReporter({\n concurrency,\n outputFile: typeof profile === \"string\" ? profile : undefined,\n });\n case \"json\":\n return new JsonReporter({ logLevel, indented: indented ?? false });\n case \"azureDevops\":\n case \"adoLog\":\n return new AdoReporter({ grouped, logLevel: verbose ? LogLevel.verbose : logLevel });\n\n case \"npmLog\":\n case \"old\":\n return new LogReporter({ grouped, logLevel: verbose ? LogLevel.verbose : logLevel });\n\n case \"fancy\":\n return new ProgressReporter({ concurrency, version });\n\n case \"verboseFileLog\":\n case \"vfl\":\n return new VerboseFileLogReporter(logFile);\n }\n\n // Check if it's a custom reporter defined in config\n if (customReporters && customReporters[reporter]) {\n const reporterPath = customReporters[reporter];\n const resolvedPath = path.isAbsolute(reporterPath) ? reporterPath : path.resolve(process.cwd(), reporterPath);\n\n try {\n // Use dynamic import to load the custom reporter module\n // This works with both ESM (.mjs, .js with type: module) and CommonJS (.cjs, .js) files\n const reporterModule = await import(pathToFileURL(resolvedPath).href);\n\n // Try different export patterns\n const ReporterClass = reporterModule.default ?? reporterModule[reporter] ?? reporterModule;\n\n if (typeof ReporterClass === \"function\") {\n return new ReporterClass(options);\n } else if (typeof ReporterClass === \"object\" && ReporterClass !== null) {\n // If it's already an instance\n return ReporterClass;\n } else {\n throw new Error(`Custom reporter \"${reporter}\" at \"${resolvedPath}\" does not export a valid reporter class or instance.`);\n }\n } catch (error) {\n throw new Error(`Failed to load custom reporter \"${reporter}\" from \"${resolvedPath}\": ${error}`);\n }\n }\n\n // Default reporter behavior\n if (progress && isInteractive() && !(logLevel >= LogLevel.verbose || verbose || grouped)) {\n return new BasicReporter({ concurrency, version });\n }\n\n return new LogReporter({ grouped, logLevel: verbose ? LogLevel.verbose : logLevel });\n}\n"],"names":["createReporter","reporter","options","customReporters","verbose","grouped","logLevel","logLevelName","concurrency","profile","progress","logFile","indented","LogLevel","root","findPackageRoot","__filename","packageJson","JSON","parse","readFileSync","path","join","version","ChromeTraceEventsReporter","outputFile","undefined","JsonReporter","AdoReporter","LogReporter","ProgressReporter","VerboseFileLogReporter","reporterPath","resolvedPath","isAbsolute","resolve","process","cwd","reporterModule","pathToFileURL","href","ReporterClass","default","Error","error","isInteractive","BasicReporter"],"mappings":";;;;+BAkBsBA;;;eAAAA;;;wBAlBG;2BASlB;gCAGyB;oBACH;6DACZ;qBACa;sEACJ;;;;;;AAEnB,eAAeA,eACpBC,QAAgB,EAChBC,OAA4B,EAC5BC,kBAA0C,CAAC,CAAC;IAE5C,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,UAAUC,YAAY,EAAEC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAE,GAAGV;IACxG,MAAMI,WAAWO,gBAAQ,CAACN,aAAa;IAEvC,MAAMO,OAAOC,IAAAA,+BAAe,EAACC;IAC7B,MAAMC,cAAcC,KAAKC,KAAK,CAACC,IAAAA,gBAAY,EAACC,aAAI,CAACC,IAAI,CAACR,MAAM,iBAAiB;IAC7E,MAAMS,UAAUN,YAAYM,OAAO;IAEnC,OAAQtB;QACN,KAAK;YACH,OAAO,IAAIuB,oCAAyB,CAAC;gBACnChB;gBACAiB,YAAY,OAAOhB,YAAY,WAAWA,UAAUiB;YACtD;QACF,KAAK;YACH,OAAO,IAAIC,uBAAY,CAAC;gBAAErB;gBAAUM,UAAUA,YAAY;YAAM;QAClE,KAAK;QACL,KAAK;YACH,OAAO,IAAIgB,sBAAW,CAAC;gBAAEvB;gBAASC,UAAUF,UAAUS,gBAAQ,CAACT,OAAO,GAAGE;YAAS;QAEpF,KAAK;QACL,KAAK;YACH,OAAO,IAAIuB,sBAAW,CAAC;gBAAExB;gBAASC,UAAUF,UAAUS,gBAAQ,CAACT,OAAO,GAAGE;YAAS;QAEpF,KAAK;YACH,OAAO,IAAIwB,2BAAgB,CAAC;gBAAEtB;gBAAae;YAAQ;QAErD,KAAK;QACL,KAAK;YACH,OAAO,IAAIQ,iCAAsB,CAACpB;IACtC;IAEA,oDAAoD;IACpD,IAAIR,mBAAmBA,eAAe,CAACF,SAAS,EAAE;QAChD,MAAM+B,eAAe7B,eAAe,CAACF,SAAS;QAC9C,MAAMgC,eAAeZ,aAAI,CAACa,UAAU,CAACF,gBAAgBA,eAAeX,aAAI,CAACc,OAAO,CAACC,QAAQC,GAAG,IAAIL;QAEhG,IAAI;YACF,wDAAwD;YACxD,wFAAwF;YACxF,MAAMM,iBAAiB,MAAM,MAAM,CAACC,IAAAA,kBAAa,EAACN,cAAcO,IAAI;YAEpE,gCAAgC;YAChC,MAAMC,gBAAgBH,eAAeI,OAAO,IAAIJ,cAAc,CAACrC,SAAS,IAAIqC;YAE5E,IAAI,OAAOG,kBAAkB,YAAY;gBACvC,OAAO,IAAIA,cAAcvC;YAC3B,OAAO,IAAI,OAAOuC,kBAAkB,YAAYA,kBAAkB,MAAM;gBACtE,8BAA8B;gBAC9B,OAAOA;YACT,OAAO;gBACL,MAAM,IAAIE,MAAM,CAAC,iBAAiB,EAAE1C,SAAS,MAAM,EAAEgC,aAAa,qDAAqD,CAAC;YAC1H;QACF,EAAE,OAAOW,OAAO;YACd,MAAM,IAAID,MAAM,CAAC,gCAAgC,EAAE1C,SAAS,QAAQ,EAAEgC,aAAa,GAAG,EAAEW,OAAO;QACjG;IACF;IAEA,4BAA4B;IAC5B,IAAIlC,YAAYmC,IAAAA,sBAAa,OAAM,CAAEvC,CAAAA,YAAYO,gBAAQ,CAACT,OAAO,IAAIA,WAAWC,OAAM,GAAI;QACxF,OAAO,IAAIyC,wBAAa,CAAC;YAAEtC;YAAae;QAAQ;IAClD;IAEA,OAAO,IAAIM,sBAAW,CAAC;QAAExB;QAASC,UAAUF,UAAUS,gBAAQ,CAACT,OAAO,GAAGE;IAAS;AACpF"}
1
+ {"version":3,"sources":["../../src/commands/createReporter.ts"],"sourcesContent":["import { LogLevel } from \"@lage-run/logger\";\nimport {\n JsonReporter,\n AdoReporter,\n GithubActionsReporter,\n LogReporter,\n ProgressReporter,\n BasicReporter,\n VerboseFileLogReporter,\n ChromeTraceEventsReporter,\n} from \"@lage-run/reporters\";\nimport type { BuiltInReporterName, ReporterInitOptions } from \"../types/ReporterInitOptions.js\";\nimport type { Reporter } from \"@lage-run/logger\";\nimport { findPackageRoot } from \"workspace-tools\";\nimport { readFileSync } from \"fs\";\nimport path from \"path\";\nimport { pathToFileURL } from \"url\";\nimport isInteractive from \"is-interactive\";\n\nexport async function createReporter(\n reporter: string,\n options: ReporterInitOptions,\n customReporters: Record<string, string> = {}\n): Promise<Reporter> {\n const { verbose, grouped, logLevel: logLevelName, concurrency, profile, progress, logFile, indented } = options;\n const logLevel = LogLevel[logLevelName];\n\n const root = findPackageRoot(__filename)!;\n const packageJson = JSON.parse(readFileSync(path.join(root, \"package.json\"), \"utf-8\"));\n const version = packageJson.version;\n\n switch (reporter as BuiltInReporterName) {\n case \"profile\":\n return new ChromeTraceEventsReporter({\n concurrency,\n outputFile: typeof profile === \"string\" ? profile : undefined,\n });\n case \"json\":\n return new JsonReporter({ logLevel, indented: indented ?? false });\n case \"azureDevops\":\n case \"adoLog\":\n return new AdoReporter({ grouped, logLevel: verbose ? LogLevel.verbose : logLevel });\n\n case \"githubActions\":\n case \"gha\":\n return new GithubActionsReporter({ grouped, logLevel: verbose ? LogLevel.verbose : logLevel });\n\n case \"npmLog\":\n case \"old\":\n return new LogReporter({ grouped, logLevel: verbose ? LogLevel.verbose : logLevel });\n\n case \"fancy\":\n return new ProgressReporter({ concurrency, version });\n\n case \"verboseFileLog\":\n case \"vfl\":\n return new VerboseFileLogReporter(logFile);\n }\n\n // Check if it's a custom reporter defined in config\n if (customReporters && customReporters[reporter]) {\n const reporterPath = customReporters[reporter];\n const resolvedPath = path.isAbsolute(reporterPath) ? reporterPath : path.resolve(process.cwd(), reporterPath);\n\n try {\n // Use dynamic import to load the custom reporter module\n // This works with both ESM (.mjs, .js with type: module) and CommonJS (.cjs, .js) files\n const reporterModule = await import(pathToFileURL(resolvedPath).href);\n\n // Try different export patterns\n const ReporterClass = reporterModule.default ?? reporterModule[reporter] ?? reporterModule;\n\n if (typeof ReporterClass === \"function\") {\n return new ReporterClass(options);\n } else if (typeof ReporterClass === \"object\" && ReporterClass !== null) {\n // If it's already an instance\n return ReporterClass;\n } else {\n throw new Error(`Custom reporter \"${reporter}\" at \"${resolvedPath}\" does not export a valid reporter class or instance.`);\n }\n } catch (error) {\n throw new Error(`Failed to load custom reporter \"${reporter}\" from \"${resolvedPath}\": ${error}`);\n }\n }\n\n // Default reporter behavior - auto-detect CI environments\n if (process.env.GITHUB_ACTIONS) {\n return new GithubActionsReporter({ grouped: true, logLevel: verbose ? LogLevel.verbose : logLevel });\n }\n\n if (process.env.TF_BUILD) {\n return new AdoReporter({ grouped: true, logLevel: verbose ? LogLevel.verbose : logLevel });\n }\n\n if (progress && isInteractive() && !(logLevel >= LogLevel.verbose || verbose || grouped)) {\n return new BasicReporter({ concurrency, version });\n }\n\n return new LogReporter({ grouped, logLevel: verbose ? LogLevel.verbose : logLevel });\n}\n"],"names":["createReporter","reporter","options","customReporters","verbose","grouped","logLevel","logLevelName","concurrency","profile","progress","logFile","indented","LogLevel","root","findPackageRoot","__filename","packageJson","JSON","parse","readFileSync","path","join","version","ChromeTraceEventsReporter","outputFile","undefined","JsonReporter","AdoReporter","GithubActionsReporter","LogReporter","ProgressReporter","VerboseFileLogReporter","reporterPath","resolvedPath","isAbsolute","resolve","process","cwd","reporterModule","pathToFileURL","href","ReporterClass","default","Error","error","env","GITHUB_ACTIONS","TF_BUILD","isInteractive","BasicReporter"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type Logger } from "@lage-run/logger";
1
+ import type { Logger } from "@lage-run/logger";
2
2
  interface ExecuteInProcessOptions {
3
3
  cwd?: string;
4
4
  nodeArg?: string;
@@ -16,7 +16,7 @@ const _workspacetools = require("workspace-tools");
16
16
  const _filterArgsForTasks = require("../run/filterArgsForTasks.js");
17
17
  const _expandTargetDefinition = require("./expandTargetDefinition.js");
18
18
  const _runners = require("@lage-run/runners");
19
- const _runnerPickerOptions = require("../../runnerPickerOptions.js");
19
+ const _getBuiltInRunners = require("../../getBuiltInRunners.js");
20
20
  function _interop_require_default(obj) {
21
21
  return obj && obj.__esModule ? obj : {
22
22
  default: obj
@@ -28,10 +28,6 @@ function _interop_require_default(obj) {
28
28
  * 1. if cwd overridden in args, use it to read the package.json directly
29
29
  * 2. if cwd not overridden and root is not cwd, use the cwd to read the package.json directly
30
30
  * 3. if root is cwd, assume the task is global
31
- *
32
- * @param options
33
- * @param command
34
- * @returns
35
31
  */ function parsePackageInfoFromArgs(root, cwd, packageName, task) {
36
32
  if (packageName && task) {
37
33
  const packageInfos = (0, _workspacetools.getPackageInfos)(root);
@@ -103,7 +99,11 @@ async function executeInProcess({ cwd, args, nodeArg, logger }) {
103
99
  });
104
100
  const definition = (0, _expandTargetDefinition.expandTargetDefinition)(isGlobal ? undefined : info.name, task, pipeline, config.cacheOptions.outputGlob ?? []);
105
101
  const target = isGlobal ? factory.createGlobalTarget(task, definition) : factory.createPackageTarget(info.name, task, definition);
106
- const pickerOptions = (0, _runnerPickerOptions.runnerPickerOptions)(nodeArg, config.npmClient, taskArgs);
102
+ const pickerOptions = (0, _getBuiltInRunners.getBuiltInRunners)({
103
+ nodeArg,
104
+ npmCmd: config.npmClient,
105
+ taskArgs
106
+ });
107
107
  const runnerPicker = new _runners.TargetRunnerPicker(pickerOptions);
108
108
  const runner = await runnerPicker.pick(target);
109
109
  if (await runner.shouldRun(target)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/exec/executeInProcess.ts"],"sourcesContent":["import { getConfig } from \"@lage-run/config\";\nimport { TargetFactory } from \"@lage-run/target-graph\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { filterArgsForTasks } from \"../run/filterArgsForTasks.js\";\nimport { expandTargetDefinition } from \"./expandTargetDefinition.js\";\nimport { TargetRunnerPicker } from \"@lage-run/runners\";\nimport { type Logger } from \"@lage-run/logger\";\nimport { runnerPickerOptions } from \"../../runnerPickerOptions.js\";\n\ninterface ExecuteInProcessOptions {\n cwd?: string;\n nodeArg?: string;\n args?: string[];\n logger: Logger;\n}\n\n/**\n * Parses the package and task from the command as quickly as possible:\n *\n * 1. if cwd overridden in args, use it to read the package.json directly\n * 2. if cwd not overridden and root is not cwd, use the cwd to read the package.json directly\n * 3. if root is cwd, assume the task is global\n *\n * @param options\n * @param command\n * @returns\n */\nfunction parsePackageInfoFromArgs(root: string, cwd: string | undefined, packageName: string | undefined, task: string) {\n if (packageName && task) {\n const packageInfos = getPackageInfos(root);\n const info = packageInfos[packageName];\n return {\n info,\n task,\n isGlobal: false,\n };\n }\n\n if (cwd) {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n\n return {\n info: {\n ...packageJson,\n packageJsonPath,\n },\n task,\n isGlobal: false,\n };\n }\n\n if (root !== process.cwd()) {\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n return {\n info: {\n ...packageJson,\n packageJsonPath,\n },\n task,\n isGlobal: false,\n };\n }\n }\n\n const packageJsonPath = path.join(root, \"package.json\");\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n\n return {\n info: {\n ...packageJson,\n packageJsonPath,\n },\n task,\n isGlobal: true,\n };\n}\n\nexport async function executeInProcess({ cwd, args, nodeArg, logger }: ExecuteInProcessOptions): Promise<void> {\n const root = getWorkspaceManagerRoot(process.cwd())!;\n const config = await getConfig(root);\n const { pipeline } = config;\n\n const taskArg = args?.length === 1 ? args?.[0] : args?.[1];\n const packageName = (args?.length ?? 0 > 1) ? args?.[0] : undefined;\n\n if (!taskArg) {\n throw new Error(\"No task provided\");\n }\n\n const { info, task, isGlobal } = parsePackageInfoFromArgs(root, cwd, packageName, taskArg);\n\n const packageInfos = { [info.name]: info };\n\n const resolve = () => {\n return path.dirname(info.packageJsonPath).replace(/\\\\/g, \"/\");\n };\n\n const { taskArgs } = filterArgsForTasks(args ?? []);\n\n const factory = new TargetFactory({ root, resolve, packageInfos });\n\n const definition = expandTargetDefinition(isGlobal ? undefined : info.name, task, pipeline, config.cacheOptions.outputGlob ?? []);\n\n const target = isGlobal ? factory.createGlobalTarget(task, definition) : factory.createPackageTarget(info.name, task, definition);\n const pickerOptions = runnerPickerOptions(nodeArg, config.npmClient, taskArgs);\n\n const runnerPicker = new TargetRunnerPicker(pickerOptions);\n const runner = await runnerPicker.pick(target);\n\n if (await runner.shouldRun(target)) {\n logger.info(\"Running target\", { target });\n\n try {\n await runner.run({\n target,\n weight: 1,\n abortSignal: new AbortController().signal,\n });\n\n logger.info(\"Finished\", { target });\n } catch (result) {\n process.exitCode = 1;\n\n if (typeof result === \"object\" && result !== null && \"exitCode\" in result) {\n if (typeof result.exitCode === \"number\" && result.exitCode !== 0) {\n process.exitCode = result.exitCode;\n }\n }\n\n if (typeof result === \"object\" && result !== null && \"error\" in result) {\n logger.error(`Failed`, { target, error: result.error });\n return;\n }\n\n logger.error(`Failed`, { target, error: result });\n }\n }\n}\n"],"names":["executeInProcess","parsePackageInfoFromArgs","root","cwd","packageName","task","packageInfos","getPackageInfos","info","isGlobal","packageJsonPath","path","join","packageJson","JSON","parse","fs","readFileSync","process","existsSync","args","nodeArg","logger","getWorkspaceManagerRoot","config","getConfig","pipeline","taskArg","length","undefined","Error","name","resolve","dirname","replace","taskArgs","filterArgsForTasks","factory","TargetFactory","definition","expandTargetDefinition","cacheOptions","outputGlob","target","createGlobalTarget","createPackageTarget","pickerOptions","runnerPickerOptions","npmClient","runnerPicker","TargetRunnerPicker","runner","pick","shouldRun","run","weight","abortSignal","AbortController","signal","result","exitCode","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/exec/executeInProcess.ts"],"sourcesContent":["import { getConfig } from \"@lage-run/config\";\nimport { TargetFactory } from \"@lage-run/target-graph\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { filterArgsForTasks } from \"../run/filterArgsForTasks.js\";\nimport { expandTargetDefinition } from \"./expandTargetDefinition.js\";\nimport { TargetRunnerPicker } from \"@lage-run/runners\";\nimport type { Logger } from \"@lage-run/logger\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\n\ninterface ExecuteInProcessOptions {\n cwd?: string;\n nodeArg?: string;\n args?: string[];\n logger: Logger;\n}\n\n/**\n * Parses the package and task from the command as quickly as possible:\n *\n * 1. if cwd overridden in args, use it to read the package.json directly\n * 2. if cwd not overridden and root is not cwd, use the cwd to read the package.json directly\n * 3. if root is cwd, assume the task is global\n */\nfunction parsePackageInfoFromArgs(root: string, cwd: string | undefined, packageName: string | undefined, task: string) {\n if (packageName && task) {\n const packageInfos = getPackageInfos(root);\n const info = packageInfos[packageName];\n return {\n info,\n task,\n isGlobal: false,\n };\n }\n\n if (cwd) {\n const packageJsonPath = path.join(cwd, \"package.json\");\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n\n return {\n info: {\n ...packageJson,\n packageJsonPath,\n },\n task,\n isGlobal: false,\n };\n }\n\n if (root !== process.cwd()) {\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n return {\n info: {\n ...packageJson,\n packageJsonPath,\n },\n task,\n isGlobal: false,\n };\n }\n }\n\n const packageJsonPath = path.join(root, \"package.json\");\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n\n return {\n info: {\n ...packageJson,\n packageJsonPath,\n },\n task,\n isGlobal: true,\n };\n}\n\nexport async function executeInProcess({ cwd, args, nodeArg, logger }: ExecuteInProcessOptions): Promise<void> {\n const root = getWorkspaceManagerRoot(process.cwd())!;\n const config = await getConfig(root);\n const { pipeline } = config;\n\n const taskArg = args?.length === 1 ? args?.[0] : args?.[1];\n const packageName = (args?.length ?? 0 > 1) ? args?.[0] : undefined;\n\n if (!taskArg) {\n throw new Error(\"No task provided\");\n }\n\n const { info, task, isGlobal } = parsePackageInfoFromArgs(root, cwd, packageName, taskArg);\n\n const packageInfos = { [info.name]: info };\n\n const resolve = () => {\n return path.dirname(info.packageJsonPath).replace(/\\\\/g, \"/\");\n };\n\n const { taskArgs } = filterArgsForTasks(args ?? []);\n\n const factory = new TargetFactory({ root, resolve, packageInfos });\n\n const definition = expandTargetDefinition(isGlobal ? undefined : info.name, task, pipeline, config.cacheOptions.outputGlob ?? []);\n\n const target = isGlobal ? factory.createGlobalTarget(task, definition) : factory.createPackageTarget(info.name, task, definition);\n const pickerOptions = getBuiltInRunners({ nodeArg, npmCmd: config.npmClient, taskArgs });\n\n const runnerPicker = new TargetRunnerPicker(pickerOptions);\n const runner = await runnerPicker.pick(target);\n\n if (await runner.shouldRun(target)) {\n logger.info(\"Running target\", { target });\n\n try {\n await runner.run({\n target,\n weight: 1,\n abortSignal: new AbortController().signal,\n });\n\n logger.info(\"Finished\", { target });\n } catch (result) {\n process.exitCode = 1;\n\n if (typeof result === \"object\" && result !== null && \"exitCode\" in result) {\n if (typeof result.exitCode === \"number\" && result.exitCode !== 0) {\n process.exitCode = result.exitCode;\n }\n }\n\n if (typeof result === \"object\" && result !== null && \"error\" in result) {\n logger.error(`Failed`, { target, error: result.error });\n return;\n }\n\n logger.error(`Failed`, { target, error: result });\n }\n }\n}\n"],"names":["executeInProcess","parsePackageInfoFromArgs","root","cwd","packageName","task","packageInfos","getPackageInfos","info","isGlobal","packageJsonPath","path","join","packageJson","JSON","parse","fs","readFileSync","process","existsSync","args","nodeArg","logger","getWorkspaceManagerRoot","config","getConfig","pipeline","taskArg","length","undefined","Error","name","resolve","dirname","replace","taskArgs","filterArgsForTasks","factory","TargetFactory","definition","expandTargetDefinition","cacheOptions","outputGlob","target","createGlobalTarget","createPackageTarget","pickerOptions","getBuiltInRunners","npmCmd","npmClient","runnerPicker","TargetRunnerPicker","runner","pick","shouldRun","run","weight","abortSignal","AbortController","signal","result","exitCode","error"],"mappings":"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"}
@@ -29,7 +29,7 @@ const _targetgraph = require("@lage-run/target-graph");
29
29
  const _initializeReporters = require("../initializeReporters.js");
30
30
  const _runners = require("@lage-run/runners");
31
31
  const _getBinPaths = require("../../getBinPaths.js");
32
- const _runnerPickerOptions = require("../../runnerPickerOptions.js");
32
+ const _getBuiltInRunners = require("../../getBuiltInRunners.js");
33
33
  const _parseServerOption = require("../parseServerOption.js");
34
34
  const _optimizeTargetGraph = require("../../optimizeTargetGraph.js");
35
35
  const _globby = require("@lage-run/globby");
@@ -78,7 +78,11 @@ async function infoAction(options, command) {
78
78
  repoWideChanges: config.repoWideChanges,
79
79
  sinceIgnoreGlobs: options.ignore.concat(config.ignore)
80
80
  });
81
- const pickerOptions = (0, _runnerPickerOptions.runnerPickerOptions)(options.nodeArg, config.npmClient, taskArgs);
81
+ const pickerOptions = (0, _getBuiltInRunners.getBuiltInRunners)({
82
+ nodeArg: options.nodeArg,
83
+ npmCmd: config.npmClient,
84
+ taskArgs
85
+ });
82
86
  const runnerPicker = new _runners.TargetRunnerPicker(pickerOptions);
83
87
  // This is a temporary flag to allow backwards compatibility with the old lage graph format used by BuildXL (formerly known as Domino).
84
88
  // I initially worked on a commandline flag, but threading that through requires 3 different releases (lage, buildxl, ohome).
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/info/action.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"../run/createTargetGraph.js\";\nimport { filterArgsForTasks } from \"../run/filterArgsForTasks.js\";\nimport type { ConfigOptions } from \"@lage-run/config\";\nimport { getConfig } from \"@lage-run/config\";\nimport { type PackageInfos, getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { getFilteredPackages } from \"../../filter/getFilteredPackages.js\";\nimport createLogger from \"@lage-run/logger\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { parse } from \"shell-quote\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { type Target, getStartTargetId } from \"@lage-run/target-graph\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { TargetRunnerPicker } from \"@lage-run/runners\";\nimport { getBinPaths } from \"../../getBinPaths.js\";\nimport { runnerPickerOptions } from \"../../runnerPickerOptions.js\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { optimizeTargetGraph } from \"../../optimizeTargetGraph.js\";\nimport { glob } from \"@lage-run/globby\";\nimport { FileHasher, hashStrings } from \"@lage-run/hasher\";\nimport { getGlobalInputHashFilePath } from \"../targetHashFilePath.js\";\n\nexport interface InfoActionOptions extends ReporterInitOptions {\n dependencies: boolean;\n dependents: boolean;\n since: string;\n scope: string[];\n to: string[];\n cache: boolean;\n nodeArg: string;\n ignore: string[];\n server: string;\n outputFile?: string;\n optimizeGraph: boolean;\n}\n\nexport interface PackageTask {\n id: string;\n command: string[];\n dependencies: string[];\n workingDirectory: string;\n package: string;\n task: string;\n inputs?: string[];\n outputs?: string[];\n options?: Record<string, any>;\n weight?: number;\n}\n\n/**\n * The info command displays information about a target graph in a workspace.\n * The generated output can be read and used by other task runners, such as BuildXL.\n *\n * Expected format:\n * [\n * {\n * \"id\": \"bar##build\",\n * \"package\": \"bar\",\n * \"task\": \"build\",\n * \"command\": \"npm run build --blah\",\n * \"workingDirectory\": \"packages/bar\",\n * \"dependencies\": []\n * },\n * {\n * \"id\": \"foo##build\",\n * \"package\": \"foo\",\n * \"task\": \"build\",\n * \"command\": \"npm run build --blah\",\n * \"workingDirectory\": \"packages/foo\",\n * \"dependencies\": [\n * \"bar##build\"\n * ],\n * \"weight\": 3,\n * \"inputs\": [\"src//**/ /*.ts\"],\n * \"inputs\": [\"lib//**/ /*.js\", \"lib//**/ /*.d.ts]\"\n * \"options\": {\n * \"environment\": {\n * \"custom_env_var\": \"x\",\n * }\n * }\n * },\n * {\n * \"id\": \"foo##test\",\n * \"package\": \"foo\",\n * \"task\": \"test\",\n * \"command\": \"npm run test --blah\",\n * \"workingDirectory\": \"packages/foo\",\n * \"dependencies\": [\n * \"foo##build\"\n * ]\n * },\n * ...\n * ]\n */\nexport async function infoAction(options: InfoActionOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.reporter = options.reporter ?? \"json\";\n options.server = typeof options.server === \"boolean\" && options.server ? \"localhost:5332\" : options.server;\n await initializeReporters(logger, options, config.reporters);\n const root = getWorkspaceManagerRoot(cwd)!;\n\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 });\n\n const scope = getFilteredPackages({\n root,\n packageInfos,\n logger,\n includeDependencies: options.dependencies,\n includeDependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n since: options.since,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n repoWideChanges: config.repoWideChanges,\n sinceIgnoreGlobs: options.ignore.concat(config.ignore),\n });\n\n const pickerOptions = runnerPickerOptions(options.nodeArg, config.npmClient, taskArgs);\n\n const runnerPicker = new TargetRunnerPicker(pickerOptions);\n\n // This is a temporary flag to allow backwards compatibility with the old lage graph format used by BuildXL (formerly known as Domino).\n // I initially worked on a commandline flag, but threading that through requires 3 different releases (lage, buildxl, ohome).\n // This is a temp solution to be able to upgrade to Lage V2 without breaking the BuildXL integration. And allow us\n // to update to lage v2.\n // Unfortunately this is the only variable that we can use to not break any other customers\n const createBackwardsCompatGraph = process.env[\"DOMINO\"] === \"1\" || !options.optimizeGraph;\n\n const optimizedTargets = await optimizeTargetGraph(targetGraph, runnerPicker, createBackwardsCompatGraph);\n const binPaths = getBinPaths();\n const packageTasks = optimizedTargets.map((target) =>\n generatePackageTask(target, taskArgs, config, options, binPaths, packageInfos, tasks)\n );\n\n // In worker server mode, we need to actually speed up the BuildXL runs with presupplied global input hashes so that it doesn't try to read it over and over again\n // This is an important optimization for BuildXL for large amount of env glob matches in non-well-behaved monorepos\n // (e.g. repos that have files listed in env glob to avoid circular dependencies in package graph)\n if (shouldRunWorkersAsService(options)) {\n // For each target in the target graph, we need to create a global input hash file in this kind of location:\n // ${target.cwd}/.lage/global_inputs_hash\n // We will use glob for these files and use the FileHasher to generate these hashes.\n const fileHasher = new FileHasher({\n root,\n });\n\n const globHashCache = new Map<string, string>();\n const globHashWithCache = (patterns: string[], options: { cwd: string }) => {\n const key = patterns.join(\"###\");\n if (globHashCache.has(key)) {\n return globHashCache.get(key)!;\n }\n\n const files = glob(patterns, options);\n const hash = hashStrings(Object.values(fileHasher.hash(files.map((file) => path.join(root, file)))));\n\n globHashCache.set(key, hash);\n\n return hash;\n };\n\n const globalInputs = config.cacheOptions?.environmentGlob\n ? glob(config.cacheOptions?.environmentGlob, { cwd: root })\n : [\"lage.config.js\"];\n\n for (const target of optimizedTargets) {\n if (target.id === getStartTargetId()) {\n continue;\n }\n\n const targetGlobalInputsHash = target.environmentGlob\n ? globHashWithCache(target.environmentGlob, { cwd: root })\n : globHashWithCache(globalInputs, { cwd: root });\n\n const targetGlobalInputsHashFile = path.join(target.cwd, getGlobalInputHashFilePath(target));\n const targetGlobalInputsHashFileDir = path.dirname(targetGlobalInputsHashFile);\n\n // Make sure the directory exists\n if (!fs.existsSync(targetGlobalInputsHashFileDir)) {\n fs.mkdirSync(targetGlobalInputsHashFileDir, { recursive: true });\n }\n\n // Write the hash to the file\n fs.writeFileSync(targetGlobalInputsHashFile, targetGlobalInputsHash);\n }\n }\n\n const infoResult = {\n command: command.args,\n scope,\n packageTasks,\n };\n\n if (options.outputFile) {\n const parentFolder = path.dirname(options.outputFile);\n if (!fs.existsSync(parentFolder)) {\n await fs.promises.mkdir(parentFolder, { recursive: true });\n }\n const infoJson = JSON.stringify(infoResult, null, options.verbose ? 2 : undefined);\n await fs.promises.writeFile(options.outputFile, infoJson);\n logger.info(`Wrote info to file: ${options.outputFile}`);\n } else {\n logger.info(\"info\", infoResult);\n }\n}\n\nexport function generatePackageTask(\n target: Target,\n taskArgs: string[],\n config: ConfigOptions,\n options: InfoActionOptions,\n binPaths: { lage: string; \"lage-server\": string },\n packageInfos: PackageInfos,\n tasks: string[]\n): PackageTask {\n const command = generateCommand(target, taskArgs, config, options, binPaths, packageInfos, tasks);\n const workingDirectory = getWorkingDirectory(target);\n\n const packageTask: PackageTask = {\n id: target.id,\n command,\n dependencies: target.dependencies,\n workingDirectory,\n package: target.packageName ?? \"\",\n task: target.task,\n inputs: target.inputs,\n outputs: target.outputs,\n };\n\n if (target.weight && target.weight !== 1) {\n packageTask.weight = target.weight;\n }\n\n if (target.options && Object.keys(target.options).length != 0) {\n packageTask.options = target.options;\n }\n\n return packageTask;\n}\n\nfunction shouldRunWorkersAsService(options: InfoActionOptions) {\n return (typeof process.env.LAGE_WORKER_SERVER === \"string\" && process.env.LAGE_WORKER_SERVER !== \"false\") || !!options.server;\n}\n\nfunction generateCommand(\n target: Target,\n taskArgs: string[],\n config: ConfigOptions,\n options: InfoActionOptions,\n binPaths: { lage: string; \"lage-server\": string },\n packageInfos: PackageInfos,\n tasks: string[]\n) {\n if (target.type === \"npmScript\") {\n const script = target.packageName !== undefined ? packageInfos[target.packageName]?.scripts?.[target.task] : undefined;\n\n // If the script is a node script, and that it does not have any shell operators (&&, ||, etc)\n // then we can simply pass this along to info command rather than using npm client to run it.\n if (script && script.startsWith(\"node\")) {\n const parsed = parse(script);\n if (parsed.length > 0 && parsed.every((entry) => typeof entry === \"string\")) {\n return [...(parsed as string[]), ...taskArgs];\n }\n }\n\n const npmClient = config.npmClient ?? \"npm\";\n const command = [npmClient, ...getNpmArgs(target.task, taskArgs)];\n return command;\n } else if (target.type === \"worker\" && shouldRunWorkersAsService(options)) {\n const { host, port } = parseServerOption(options.server);\n const command = [binPaths[\"lage\"], \"exec\", \"--tasks\", ...tasks, \"--server\", `${host}:${port}`];\n if (options.concurrency) {\n command.push(\"--concurrency\", options.concurrency.toString());\n }\n\n if (target.packageName) {\n command.push(target.packageName);\n }\n\n if (target.task) {\n command.push(target.task);\n }\n\n command.push(...taskArgs);\n return command;\n } else if (target.type === \"worker\") {\n const command = [binPaths.lage, \"exec\"];\n command.push(target.packageName ?? \"\");\n command.push(target.task);\n command.push(...taskArgs);\n return command;\n }\n\n return [];\n}\n\nfunction getWorkingDirectory(target: Target) {\n const cwd = process.cwd();\n const workingDirectory = path.relative(getWorkspaceManagerRoot(cwd) ?? \"\", target.cwd).replace(/\\\\/g, \"/\");\n return workingDirectory;\n}\n\nfunction getNpmArgs(task: string, taskTargs: string[]) {\n const extraArgs = taskTargs != undefined && taskTargs.length > 0 ? [\"--\", ...taskTargs] : [];\n return [\"run\", task, ...extraArgs];\n}\n"],"names":["generatePackageTask","infoAction","options","command","cwd","process","config","getConfig","logger","createLogger","logLevel","reporter","server","initializeReporters","reporters","root","getWorkspaceManagerRoot","packageInfos","getPackageInfos","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","getFilteredPackages","includeDependencies","includeDependents","sinceIgnoreGlobs","pickerOptions","runnerPickerOptions","nodeArg","npmClient","runnerPicker","TargetRunnerPicker","createBackwardsCompatGraph","env","optimizeGraph","optimizedTargets","optimizeTargetGraph","binPaths","getBinPaths","packageTasks","map","target","shouldRunWorkersAsService","fileHasher","FileHasher","globHashCache","Map","globHashWithCache","patterns","key","join","has","get","files","glob","hash","hashStrings","Object","values","file","path","set","globalInputs","environmentGlob","id","getStartTargetId","targetGlobalInputsHash","targetGlobalInputsHashFile","getGlobalInputHashFilePath","targetGlobalInputsHashFileDir","dirname","fs","existsSync","mkdirSync","recursive","writeFileSync","infoResult","outputFile","parentFolder","promises","mkdir","infoJson","JSON","stringify","verbose","undefined","writeFile","info","generateCommand","workingDirectory","getWorkingDirectory","packageTask","package","packageName","task","inputs","weight","keys","length","LAGE_WORKER_SERVER","type","script","scripts","startsWith","parsed","parse","every","entry","getNpmArgs","host","port","parseServerOption","concurrency","push","toString","lage","relative","replace","taskTargs","extraArgs"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/info/action.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"../run/createTargetGraph.js\";\nimport { filterArgsForTasks } from \"../run/filterArgsForTasks.js\";\nimport type { ConfigOptions } from \"@lage-run/config\";\nimport { getConfig } from \"@lage-run/config\";\nimport { type PackageInfos, getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { getFilteredPackages } from \"../../filter/getFilteredPackages.js\";\nimport createLogger from \"@lage-run/logger\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { parse } from \"shell-quote\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { type Target, getStartTargetId } from \"@lage-run/target-graph\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { TargetRunnerPicker } from \"@lage-run/runners\";\nimport { getBinPaths } from \"../../getBinPaths.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { optimizeTargetGraph } from \"../../optimizeTargetGraph.js\";\nimport { glob } from \"@lage-run/globby\";\nimport { FileHasher, hashStrings } from \"@lage-run/hasher\";\nimport { getGlobalInputHashFilePath } from \"../targetHashFilePath.js\";\n\nexport interface InfoActionOptions extends ReporterInitOptions {\n dependencies: boolean;\n dependents: boolean;\n since: string;\n scope: string[];\n to: string[];\n cache: boolean;\n nodeArg: string;\n ignore: string[];\n server: string;\n outputFile?: string;\n optimizeGraph: boolean;\n}\n\nexport interface PackageTask {\n id: string;\n command: string[];\n dependencies: string[];\n workingDirectory: string;\n package: string;\n task: string;\n inputs?: string[];\n outputs?: string[];\n options?: Record<string, any>;\n weight?: number;\n}\n\n/**\n * The info command displays information about a target graph in a workspace.\n * The generated output can be read and used by other task runners, such as BuildXL.\n *\n * Expected format:\n * [\n * {\n * \"id\": \"bar##build\",\n * \"package\": \"bar\",\n * \"task\": \"build\",\n * \"command\": \"npm run build --blah\",\n * \"workingDirectory\": \"packages/bar\",\n * \"dependencies\": []\n * },\n * {\n * \"id\": \"foo##build\",\n * \"package\": \"foo\",\n * \"task\": \"build\",\n * \"command\": \"npm run build --blah\",\n * \"workingDirectory\": \"packages/foo\",\n * \"dependencies\": [\n * \"bar##build\"\n * ],\n * \"weight\": 3,\n * \"inputs\": [\"src//**/ /*.ts\"],\n * \"inputs\": [\"lib//**/ /*.js\", \"lib//**/ /*.d.ts]\"\n * \"options\": {\n * \"environment\": {\n * \"custom_env_var\": \"x\",\n * }\n * }\n * },\n * {\n * \"id\": \"foo##test\",\n * \"package\": \"foo\",\n * \"task\": \"test\",\n * \"command\": \"npm run test --blah\",\n * \"workingDirectory\": \"packages/foo\",\n * \"dependencies\": [\n * \"foo##build\"\n * ]\n * },\n * ...\n * ]\n */\nexport async function infoAction(options: InfoActionOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.reporter = options.reporter ?? \"json\";\n options.server = typeof options.server === \"boolean\" && options.server ? \"localhost:5332\" : options.server;\n await initializeReporters(logger, options, config.reporters);\n const root = getWorkspaceManagerRoot(cwd)!;\n\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 });\n\n const scope = getFilteredPackages({\n root,\n packageInfos,\n logger,\n includeDependencies: options.dependencies,\n includeDependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n since: options.since,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n repoWideChanges: config.repoWideChanges,\n sinceIgnoreGlobs: options.ignore.concat(config.ignore),\n });\n\n const pickerOptions = getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs });\n\n const runnerPicker = new TargetRunnerPicker(pickerOptions);\n\n // This is a temporary flag to allow backwards compatibility with the old lage graph format used by BuildXL (formerly known as Domino).\n // I initially worked on a commandline flag, but threading that through requires 3 different releases (lage, buildxl, ohome).\n // This is a temp solution to be able to upgrade to Lage V2 without breaking the BuildXL integration. And allow us\n // to update to lage v2.\n // Unfortunately this is the only variable that we can use to not break any other customers\n const createBackwardsCompatGraph = process.env[\"DOMINO\"] === \"1\" || !options.optimizeGraph;\n\n const optimizedTargets = await optimizeTargetGraph(targetGraph, runnerPicker, createBackwardsCompatGraph);\n const binPaths = getBinPaths();\n const packageTasks = optimizedTargets.map((target) =>\n generatePackageTask(target, taskArgs, config, options, binPaths, packageInfos, tasks)\n );\n\n // In worker server mode, we need to actually speed up the BuildXL runs with presupplied global input hashes so that it doesn't try to read it over and over again\n // This is an important optimization for BuildXL for large amount of env glob matches in non-well-behaved monorepos\n // (e.g. repos that have files listed in env glob to avoid circular dependencies in package graph)\n if (shouldRunWorkersAsService(options)) {\n // For each target in the target graph, we need to create a global input hash file in this kind of location:\n // ${target.cwd}/.lage/global_inputs_hash\n // We will use glob for these files and use the FileHasher to generate these hashes.\n const fileHasher = new FileHasher({\n root,\n });\n\n const globHashCache = new Map<string, string>();\n const globHashWithCache = (patterns: string[], options: { cwd: string }) => {\n const key = patterns.join(\"###\");\n if (globHashCache.has(key)) {\n return globHashCache.get(key)!;\n }\n\n const files = glob(patterns, options);\n const hash = hashStrings(Object.values(fileHasher.hash(files.map((file) => path.join(root, file)))));\n\n globHashCache.set(key, hash);\n\n return hash;\n };\n\n const globalInputs = config.cacheOptions?.environmentGlob\n ? glob(config.cacheOptions?.environmentGlob, { cwd: root })\n : [\"lage.config.js\"];\n\n for (const target of optimizedTargets) {\n if (target.id === getStartTargetId()) {\n continue;\n }\n\n const targetGlobalInputsHash = target.environmentGlob\n ? globHashWithCache(target.environmentGlob, { cwd: root })\n : globHashWithCache(globalInputs, { cwd: root });\n\n const targetGlobalInputsHashFile = path.join(target.cwd, getGlobalInputHashFilePath(target));\n const targetGlobalInputsHashFileDir = path.dirname(targetGlobalInputsHashFile);\n\n // Make sure the directory exists\n if (!fs.existsSync(targetGlobalInputsHashFileDir)) {\n fs.mkdirSync(targetGlobalInputsHashFileDir, { recursive: true });\n }\n\n // Write the hash to the file\n fs.writeFileSync(targetGlobalInputsHashFile, targetGlobalInputsHash);\n }\n }\n\n const infoResult = {\n command: command.args,\n scope,\n packageTasks,\n };\n\n if (options.outputFile) {\n const parentFolder = path.dirname(options.outputFile);\n if (!fs.existsSync(parentFolder)) {\n await fs.promises.mkdir(parentFolder, { recursive: true });\n }\n const infoJson = JSON.stringify(infoResult, null, options.verbose ? 2 : undefined);\n await fs.promises.writeFile(options.outputFile, infoJson);\n logger.info(`Wrote info to file: ${options.outputFile}`);\n } else {\n logger.info(\"info\", infoResult);\n }\n}\n\nexport function generatePackageTask(\n target: Target,\n taskArgs: string[],\n config: ConfigOptions,\n options: InfoActionOptions,\n binPaths: { lage: string; \"lage-server\": string },\n packageInfos: PackageInfos,\n tasks: string[]\n): PackageTask {\n const command = generateCommand(target, taskArgs, config, options, binPaths, packageInfos, tasks);\n const workingDirectory = getWorkingDirectory(target);\n\n const packageTask: PackageTask = {\n id: target.id,\n command,\n dependencies: target.dependencies,\n workingDirectory,\n package: target.packageName ?? \"\",\n task: target.task,\n inputs: target.inputs,\n outputs: target.outputs,\n };\n\n if (target.weight && target.weight !== 1) {\n packageTask.weight = target.weight;\n }\n\n if (target.options && Object.keys(target.options).length != 0) {\n packageTask.options = target.options;\n }\n\n return packageTask;\n}\n\nfunction shouldRunWorkersAsService(options: InfoActionOptions) {\n return (typeof process.env.LAGE_WORKER_SERVER === \"string\" && process.env.LAGE_WORKER_SERVER !== \"false\") || !!options.server;\n}\n\nfunction generateCommand(\n target: Target,\n taskArgs: string[],\n config: ConfigOptions,\n options: InfoActionOptions,\n binPaths: { lage: string; \"lage-server\": string },\n packageInfos: PackageInfos,\n tasks: string[]\n) {\n if (target.type === \"npmScript\") {\n const script = target.packageName !== undefined ? packageInfos[target.packageName]?.scripts?.[target.task] : undefined;\n\n // If the script is a node script, and that it does not have any shell operators (&&, ||, etc)\n // then we can simply pass this along to info command rather than using npm client to run it.\n if (script && script.startsWith(\"node\")) {\n const parsed = parse(script);\n if (parsed.length > 0 && parsed.every((entry) => typeof entry === \"string\")) {\n return [...(parsed as string[]), ...taskArgs];\n }\n }\n\n const npmClient = config.npmClient ?? \"npm\";\n const command = [npmClient, ...getNpmArgs(target.task, taskArgs)];\n return command;\n } else if (target.type === \"worker\" && shouldRunWorkersAsService(options)) {\n const { host, port } = parseServerOption(options.server);\n const command = [binPaths[\"lage\"], \"exec\", \"--tasks\", ...tasks, \"--server\", `${host}:${port}`];\n if (options.concurrency) {\n command.push(\"--concurrency\", options.concurrency.toString());\n }\n\n if (target.packageName) {\n command.push(target.packageName);\n }\n\n if (target.task) {\n command.push(target.task);\n }\n\n command.push(...taskArgs);\n return command;\n } else if (target.type === \"worker\") {\n const command = [binPaths.lage, \"exec\"];\n command.push(target.packageName ?? \"\");\n command.push(target.task);\n command.push(...taskArgs);\n return command;\n }\n\n return [];\n}\n\nfunction getWorkingDirectory(target: Target) {\n const cwd = process.cwd();\n const workingDirectory = path.relative(getWorkspaceManagerRoot(cwd) ?? \"\", target.cwd).replace(/\\\\/g, \"/\");\n return workingDirectory;\n}\n\nfunction getNpmArgs(task: string, taskTargs: string[]) {\n const extraArgs = taskTargs != undefined && taskTargs.length > 0 ? [\"--\", ...taskTargs] : [];\n return [\"run\", task, ...extraArgs];\n}\n"],"names":["generatePackageTask","infoAction","options","command","cwd","process","config","getConfig","logger","createLogger","logLevel","reporter","server","initializeReporters","reporters","root","getWorkspaceManagerRoot","packageInfos","getPackageInfos","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","getFilteredPackages","includeDependencies","includeDependents","sinceIgnoreGlobs","pickerOptions","getBuiltInRunners","nodeArg","npmCmd","npmClient","runnerPicker","TargetRunnerPicker","createBackwardsCompatGraph","env","optimizeGraph","optimizedTargets","optimizeTargetGraph","binPaths","getBinPaths","packageTasks","map","target","shouldRunWorkersAsService","fileHasher","FileHasher","globHashCache","Map","globHashWithCache","patterns","key","join","has","get","files","glob","hash","hashStrings","Object","values","file","path","set","globalInputs","environmentGlob","id","getStartTargetId","targetGlobalInputsHash","targetGlobalInputsHashFile","getGlobalInputHashFilePath","targetGlobalInputsHashFileDir","dirname","fs","existsSync","mkdirSync","recursive","writeFileSync","infoResult","outputFile","parentFolder","promises","mkdir","infoJson","JSON","stringify","verbose","undefined","writeFile","info","generateCommand","workingDirectory","getWorkingDirectory","packageTask","package","packageName","task","inputs","weight","keys","length","LAGE_WORKER_SERVER","type","script","scripts","startsWith","parsed","parse","every","entry","getNpmArgs","host","port","parseServerOption","concurrency","push","toString","lage","relative","replace","taskTargs","extraArgs"],"mappings":"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"}
@@ -18,7 +18,7 @@ const _scheduler = require("@lage-run/scheduler");
18
18
  const _logger = /*#__PURE__*/ _interop_require_default(require("@lage-run/logger"));
19
19
  const _errors = require("../../types/errors.js");
20
20
  const _createCacheProvider = require("../../cache/createCacheProvider.js");
21
- const _runnerPickerOptions = require("../../runnerPickerOptions.js");
21
+ const _getBuiltInRunners = require("../../getBuiltInRunners.js");
22
22
  const _optimizeTargetGraph = require("../../optimizeTargetGraph.js");
23
23
  function _interop_require_default(obj) {
24
24
  return obj && obj.__esModule ? obj : {
@@ -80,7 +80,11 @@ async function runAction(options, command) {
80
80
  skipLocalCache: options.skipLocalCache,
81
81
  cacheOptions: config.cacheOptions,
82
82
  runners: {
83
- ...(0, _runnerPickerOptions.runnerPickerOptions)(options.nodeArg, config.npmClient, taskArgs),
83
+ ...(0, _getBuiltInRunners.getBuiltInRunners)({
84
+ nodeArg: options.nodeArg,
85
+ npmCmd: config.npmClient,
86
+ taskArgs
87
+ }),
84
88
  ...config.runners
85
89
  }
86
90
  },
@@ -102,7 +106,7 @@ async function runAction(options, command) {
102
106
  await scheduler.cleanup();
103
107
  displaySummaryAndExit(summary, logger.reporters);
104
108
  for (const reporter of reporters){
105
- await reporter.cleanup?.();
109
+ reporter.cleanup?.();
106
110
  }
107
111
  }
108
112
  function displaySummaryAndExit(summary, reporters) {
@@ -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 { runnerPickerOptions } from \"../../runnerPickerOptions.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 });\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 ...runnerPickerOptions(options.nodeArg, 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 await 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","validateTargetGraph","verbose","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","continue","shouldCache","cache","shouldResetCache","resetCache","workerData","runners","runnerPickerOptions","nodeArg","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 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 });\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","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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"}
@@ -18,7 +18,7 @@ const _scheduler = require("@lage-run/scheduler");
18
18
  const _watcher = require("./watcher.js");
19
19
  const _logger = /*#__PURE__*/ _interop_require_wildcard(require("@lage-run/logger"));
20
20
  const _createCacheProvider = require("../../cache/createCacheProvider.js");
21
- const _runnerPickerOptions = require("../../runnerPickerOptions.js");
21
+ const _getBuiltInRunners = require("../../getBuiltInRunners.js");
22
22
  function _getRequireWildcardCache(nodeInterop) {
23
23
  if (typeof WeakMap !== "function") return null;
24
24
  var cacheBabelInterop = new WeakMap();
@@ -111,7 +111,11 @@ async function watchAction(options, command) {
111
111
  skipLocalCache: options.skipLocalCache,
112
112
  cacheOptions: config.cacheOptions,
113
113
  runners: {
114
- ...(0, _runnerPickerOptions.runnerPickerOptions)(options.nodeArg, config.npmClient, taskArgs),
114
+ ...(0, _getBuiltInRunners.getBuiltInRunners)({
115
+ nodeArg: options.nodeArg,
116
+ npmCmd: config.npmClient,
117
+ taskArgs
118
+ }),
115
119
  ...config.runners
116
120
  }
117
121
  },
@@ -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 { runnerPickerOptions } from \"../../runnerPickerOptions.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 });\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 ...runnerPickerOptions(options.nodeArg, 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","writeRemoteCache","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","workerData","runners","runnerPickerOptions","nodeArg","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 });\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","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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"}
@@ -17,7 +17,7 @@ const _workerthreadspool = require("@lage-run/worker-threads-pool");
17
17
  const _hasher = require("@lage-run/hasher");
18
18
  const _getOutputFiles = require("./getOutputFiles.js");
19
19
  const _MemoryStream = require("./MemoryStream.js");
20
- const _runnerPickerOptions = require("../../runnerPickerOptions.js");
20
+ const _getBuiltInRunners = require("../../getBuiltInRunners.js");
21
21
  const _filterPipelineDefinitions = require("../run/filterPipelineDefinitions.js");
22
22
  const _formathrtime = require("@lage-run/format-hrtime");
23
23
  const _path = /*#__PURE__*/ _interop_require_default(require("path"));
@@ -86,7 +86,11 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
86
86
  stderr: true,
87
87
  workerData: {
88
88
  runners: {
89
- ...(0, _runnerPickerOptions.runnerPickerOptions)(nodeArg, config.npmClient, taskArgs),
89
+ ...(0, _getBuiltInRunners.getBuiltInRunners)({
90
+ nodeArg,
91
+ npmCmd: config.npmClient,
92
+ taskArgs
93
+ }),
90
94
  ...config.runners,
91
95
  shouldCache: false,
92
96
  shouldResetCache: false
@@ -149,7 +153,11 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
149
153
  concurrency,
150
154
  tasks
151
155
  });
152
- const runners = (0, _runnerPickerOptions.runnerPickerOptions)(request.nodeOptions, config.npmClient, request.taskArgs);
156
+ const runners = (0, _getBuiltInRunners.getBuiltInRunners)({
157
+ nodeArg: request.nodeOptions,
158
+ npmCmd: config.npmClient,
159
+ taskArgs: request.taskArgs
160
+ });
153
161
  const id = (0, _targetgraph.getTargetId)(request.packageName, request.task);
154
162
  if (!targetGraph.targets.has(id)) {
155
163
  logger.info(`Target not found: ${request.packageName}#${request.task}`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/server/lageService.ts"],"sourcesContent":["import { type ConfigOptions, getConfig, getConcurrency, getMaxWorkersPerTask } from \"@lage-run/config\";\nimport type { Logger } from \"@lage-run/logger\";\nimport { ConnectError, Code, type ILageService } from \"@lage-run/rpc\";\nimport { getStartTargetId, getTargetId, type TargetGraph } from \"@lage-run/target-graph\";\nimport { type DependencyMap, getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { createTargetGraph } from \"../run/createTargetGraph.js\";\nimport { type Readable } from \"stream\";\nimport { type Pool, AggregatedPool } from \"@lage-run/worker-threads-pool\";\nimport { getInputFiles, type PackageTree, TargetHasher } from \"@lage-run/hasher\";\nimport { getOutputFiles } from \"./getOutputFiles.js\";\nimport { MemoryStream } from \"./MemoryStream.js\";\nimport { runnerPickerOptions } from \"../../runnerPickerOptions.js\";\nimport { filterPipelineDefinitions } from \"../run/filterPipelineDefinitions.js\";\nimport type { TargetRun } from \"@lage-run/scheduler-types\";\nimport { formatDuration, hrToSeconds, hrtimeDiff } from \"@lage-run/format-hrtime\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getGlobalInputHashFilePath, getHashFilePath } from \"../targetHashFilePath.js\";\n\ninterface LageServiceContext {\n config: ConfigOptions;\n targetGraph: TargetGraph;\n packageTree: PackageTree;\n dependencyMap: DependencyMap;\n root: string;\n pool: Pool;\n targetHasher: TargetHasher;\n}\n\nlet initializedPromise: Promise<LageServiceContext> | undefined;\ninterface ServiceControls {\n abortController: AbortController;\n countdownToShutdown: () => void;\n clearCountdown: () => void;\n}\ninterface InitializeOptions {\n cwd: string;\n logger: Logger;\n serverControls: ServiceControls;\n concurrency?: number;\n nodeArg?: string;\n taskArgs: string[];\n tasks: string[];\n}\n\nfunction formatBytes(bytes: number) {\n return `${(bytes / 1024 / 1024).toFixed(2)} MB`;\n}\n\nasync function createInitializedPromise({ cwd, logger, serverControls, nodeArg, taskArgs, concurrency, tasks }: InitializeOptions) {\n if (initializedPromise) {\n return initializedPromise;\n }\n\n const config = await getConfig(cwd);\n const root = getWorkspaceManagerRoot(cwd)!;\n const maxWorkers = getConcurrency(concurrency, config.concurrency);\n\n logger.info(`Initializing with ${maxWorkers} workers, tasks: ${tasks.join(\", \")}`);\n\n const { pipeline } = config;\n\n const packageInfos = getPackageInfos(root);\n\n logger.info(\"Initializing target graph\");\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: false,\n dependents: false,\n ignore: [],\n pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: undefined,\n since: undefined,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n });\n\n const targetHasher = new TargetHasher({\n root,\n environmentGlob: config.cacheOptions?.environmentGlob ?? [],\n logger,\n cacheKey: config.cacheOptions?.cacheKey,\n cliArgs: taskArgs,\n });\n\n logger.info(\"Initializing hasher\");\n await targetHasher.initialize();\n\n logger.info(\"Initializing dependency map\");\n\n const packageTree = targetHasher.packageTree!;\n const dependencyMap = targetHasher.dependencyMap;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n logger.info(\"Initializing Pool\");\n const pool = new AggregatedPool({\n logger,\n maxWorkersByGroup: new Map([...getMaxWorkersPerTask(filteredPipeline, maxWorkers)]),\n groupBy: ({ target }) => target.task,\n maxWorkers,\n script: require.resolve(\"./singleTargetWorker.js\"),\n workerOptions: {\n stdout: true,\n stderr: true,\n workerData: {\n runners: {\n ...runnerPickerOptions(nodeArg, config.npmClient, taskArgs),\n ...config.runners,\n shouldCache: false,\n shouldResetCache: false,\n },\n },\n },\n workerIdleMemoryLimit: config.workerIdleMemoryLimit,\n });\n\n serverControls.abortController.signal.addEventListener(\"abort\", () => {\n void pool?.close();\n });\n\n pool?.on(\"freedWorker\", () => {\n logger.silly(`Max Worker Memory Usage: ${formatBytes(pool?.stats().maxWorkerMemoryUsage)}`);\n });\n\n pool?.on(\"idle\", () => {\n logger.info(\"All workers are idle, shutting down after timeout\");\n serverControls.countdownToShutdown();\n });\n\n logger.info(\"done initializing\");\n return { config, targetGraph, packageTree, dependencyMap, root, pool, targetHasher };\n}\n\n/**\n * Initializes the lageService: the extra \"initializePromise\" ensures only one initialization is done at a time across threads\n * @param cwd\n * @param logger\n * @returns\n */\nasync function initialize(options: InitializeOptions): Promise<LageServiceContext> {\n initializedPromise = createInitializedPromise(options);\n return initializedPromise;\n}\n\ninterface CreateLageServiceOptions {\n cwd: string;\n serverControls: ServiceControls;\n logger: Logger;\n concurrency?: number;\n tasks: string[];\n}\n\nexport async function createLageService({\n cwd,\n serverControls,\n logger,\n concurrency,\n tasks,\n}: CreateLageServiceOptions): Promise<ILageService> {\n return {\n async ping() {\n return { pong: true };\n },\n\n async runTarget(request) {\n if (global.gc) {\n global.gc();\n }\n\n serverControls.clearCountdown();\n\n // THIS IS A BIG ASSUMPTION; TODO: memoize based on the parameters of the initialize() call\n // The first request sets up the nodeArg and taskArgs - we are assuming that all requests to run this target are coming from the same\n // `lage info` call\n const { config, targetGraph, dependencyMap, packageTree, root, pool, targetHasher } = await initialize({\n cwd,\n logger,\n nodeArg: request.nodeOptions,\n taskArgs: request.taskArgs,\n serverControls,\n concurrency,\n tasks,\n });\n\n const runners = runnerPickerOptions(request.nodeOptions, config.npmClient, request.taskArgs);\n\n const id = getTargetId(request.packageName, request.task);\n\n if (!targetGraph.targets.has(id)) {\n logger.info(`Target not found: ${request.packageName}#${request.task}`);\n return {\n packageName: request.packageName,\n task: request.task,\n exitCode: 1,\n };\n }\n\n logger.info(`Running target: ${request.packageName}#${request.task}`);\n\n const target = targetGraph.targets.get(id)!;\n const task = {\n target,\n runners,\n };\n\n const writableStdout = new MemoryStream();\n const writableStderr = new MemoryStream();\n let pipedStdout: Readable;\n let pipedStderr: Readable;\n\n const targetRun: TargetRun = {\n queueTime: process.hrtime(),\n target,\n duration: [0, 0],\n startTime: [0, 0],\n status: \"queued\",\n threadId: 0,\n };\n\n let results: {\n packageName?: string;\n task: string;\n cwd: string;\n exitCode: number;\n inputs: string[];\n outputs: string[];\n stdout: string;\n stderr: string;\n id: string;\n globalInputHashFile: string;\n };\n\n const inputs = getInputFiles(target, dependencyMap, packageTree);\n\n for (const dep of target.dependencies) {\n if (dep === getStartTargetId()) {\n continue;\n }\n\n const depTarget = targetGraph.targets.get(dep)!;\n inputs.push(path.join(path.relative(root, depTarget.cwd), getHashFilePath(depTarget)).replace(/\\\\/g, \"/\"));\n }\n\n // Write the target hash to a file for its dependants to use\n const targetHashFile = getHashFilePath(target);\n const targetHashFullPath = path.join(target.cwd, targetHashFile);\n\n try {\n if (!fs.existsSync(path.dirname(targetHashFullPath))) {\n fs.mkdirSync(path.dirname(targetHashFullPath), { recursive: true });\n }\n\n fs.writeFileSync(targetHashFullPath, await targetHasher.hash(target));\n } catch (e) {\n throw new ConnectError(`Error writing target hash file: ${targetHashFullPath}`, Code.Internal);\n }\n\n const targetGlobalInputHashRelativePath = getGlobalInputHashFilePath(target);\n\n try {\n await pool.exec(\n task,\n 0,\n (worker, stdout, stderr) => {\n logger.info(`[${worker.threadId}] ${request.packageName}#${request.task} start`);\n\n pipedStdout = stdout;\n pipedStderr = stderr;\n\n stdout.pipe(writableStdout);\n stderr.pipe(writableStderr);\n\n targetRun.threadId = worker.threadId;\n targetRun.status = \"running\";\n targetRun.startTime = process.hrtime();\n },\n (worker) => {\n logger.info(`Max Worker Memory Usage: ${formatBytes(pool.stats().maxWorkerMemoryUsage)}`);\n\n // logger.info the main process memory usage\n const memoryUsage = process.memoryUsage();\n logger.info(\n `Main Process Memory Usage: RSS: ${formatBytes(memoryUsage.rss)} Heap Total: ${formatBytes(\n memoryUsage.heapTotal\n )} Heap Used: ${formatBytes(memoryUsage.heapUsed)}`\n );\n\n targetRun.status = \"success\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n logger.info(\n `[${worker.threadId}] ${request.packageName}#${request.task} end: ${formatDuration(hrToSeconds(targetRun.duration))}`\n );\n pipedStdout.unpipe(writableStdout);\n pipedStderr.unpipe(writableStderr);\n }\n );\n\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 0,\n inputs,\n outputs,\n stdout: writableStdout.toString(),\n stderr: writableStderr.toString(),\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n } catch (e) {\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n targetRun.status = \"failed\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 1,\n inputs,\n outputs,\n stdout: \"\",\n stderr: e instanceof Error ? e.toString() : \"\",\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n }\n\n logger.info(\n `${request.packageName}#${request.task} results: \\n${JSON.stringify(\n {\n packageName: results.packageName,\n task: results.task,\n cwd: results.cwd,\n exitCode: results.exitCode,\n inputs: results.inputs,\n outputs: results.outputs,\n id: results.id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n },\n null,\n 2\n )}\\n------`,\n results\n );\n\n return results;\n },\n };\n}\n"],"names":["createLageService","initializedPromise","formatBytes","bytes","toFixed","createInitializedPromise","cwd","logger","serverControls","nodeArg","taskArgs","concurrency","tasks","config","getConfig","root","getWorkspaceManagerRoot","maxWorkers","getConcurrency","info","join","pipeline","packageInfos","getPackageInfos","targetGraph","createTargetGraph","dependencies","dependents","ignore","repoWideChanges","scope","undefined","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","targetHasher","TargetHasher","environmentGlob","cacheKey","cliArgs","initialize","packageTree","dependencyMap","filteredPipeline","filterPipelineDefinitions","targets","values","pool","AggregatedPool","maxWorkersByGroup","Map","getMaxWorkersPerTask","groupBy","target","task","script","require","resolve","workerOptions","stdout","stderr","workerData","runners","runnerPickerOptions","npmClient","shouldCache","shouldResetCache","workerIdleMemoryLimit","abortController","signal","addEventListener","close","on","silly","stats","maxWorkerMemoryUsage","countdownToShutdown","options","ping","pong","runTarget","request","global","gc","clearCountdown","nodeOptions","id","getTargetId","packageName","has","exitCode","get","writableStdout","MemoryStream","writableStderr","pipedStdout","pipedStderr","targetRun","queueTime","process","hrtime","duration","startTime","status","threadId","results","inputs","getInputFiles","dep","getStartTargetId","depTarget","push","path","relative","getHashFilePath","replace","targetHashFile","targetHashFullPath","fs","existsSync","dirname","mkdirSync","recursive","writeFileSync","hash","e","ConnectError","Code","Internal","targetGlobalInputHashRelativePath","getGlobalInputHashFilePath","exec","worker","pipe","memoryUsage","rss","heapTotal","heapUsed","hrtimeDiff","formatDuration","hrToSeconds","unpipe","getOutputFiles","targetHashFileRelativePath","toString","globalInputHashFile","Error","JSON","stringify"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/server/lageService.ts"],"sourcesContent":["import { type ConfigOptions, getConfig, getConcurrency, getMaxWorkersPerTask } from \"@lage-run/config\";\nimport type { Logger } from \"@lage-run/logger\";\nimport { ConnectError, Code, type ILageService } from \"@lage-run/rpc\";\nimport { getStartTargetId, getTargetId, type TargetGraph } from \"@lage-run/target-graph\";\nimport { type DependencyMap, getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { createTargetGraph } from \"../run/createTargetGraph.js\";\nimport { type Readable } from \"stream\";\nimport { type Pool, AggregatedPool } from \"@lage-run/worker-threads-pool\";\nimport { getInputFiles, type PackageTree, TargetHasher } from \"@lage-run/hasher\";\nimport { getOutputFiles } from \"./getOutputFiles.js\";\nimport { MemoryStream } from \"./MemoryStream.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { filterPipelineDefinitions } from \"../run/filterPipelineDefinitions.js\";\nimport type { TargetRun } from \"@lage-run/scheduler-types\";\nimport { formatDuration, hrToSeconds, hrtimeDiff } from \"@lage-run/format-hrtime\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getGlobalInputHashFilePath, getHashFilePath } from \"../targetHashFilePath.js\";\n\ninterface LageServiceContext {\n config: ConfigOptions;\n targetGraph: TargetGraph;\n packageTree: PackageTree;\n dependencyMap: DependencyMap;\n root: string;\n pool: Pool;\n targetHasher: TargetHasher;\n}\n\nlet initializedPromise: Promise<LageServiceContext> | undefined;\ninterface ServiceControls {\n abortController: AbortController;\n countdownToShutdown: () => void;\n clearCountdown: () => void;\n}\ninterface InitializeOptions {\n cwd: string;\n logger: Logger;\n serverControls: ServiceControls;\n concurrency?: number;\n nodeArg?: string;\n taskArgs: string[];\n tasks: string[];\n}\n\nfunction formatBytes(bytes: number) {\n return `${(bytes / 1024 / 1024).toFixed(2)} MB`;\n}\n\nasync function createInitializedPromise({ cwd, logger, serverControls, nodeArg, taskArgs, concurrency, tasks }: InitializeOptions) {\n if (initializedPromise) {\n return initializedPromise;\n }\n\n const config = await getConfig(cwd);\n const root = getWorkspaceManagerRoot(cwd)!;\n const maxWorkers = getConcurrency(concurrency, config.concurrency);\n\n logger.info(`Initializing with ${maxWorkers} workers, tasks: ${tasks.join(\", \")}`);\n\n const { pipeline } = config;\n\n const packageInfos = getPackageInfos(root);\n\n logger.info(\"Initializing target graph\");\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: false,\n dependents: false,\n ignore: [],\n pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: undefined,\n since: undefined,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n });\n\n const targetHasher = new TargetHasher({\n root,\n environmentGlob: config.cacheOptions?.environmentGlob ?? [],\n logger,\n cacheKey: config.cacheOptions?.cacheKey,\n cliArgs: taskArgs,\n });\n\n logger.info(\"Initializing hasher\");\n await targetHasher.initialize();\n\n logger.info(\"Initializing dependency map\");\n\n const packageTree = targetHasher.packageTree!;\n const dependencyMap = targetHasher.dependencyMap;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n logger.info(\"Initializing Pool\");\n const pool = new AggregatedPool({\n logger,\n maxWorkersByGroup: new Map([...getMaxWorkersPerTask(filteredPipeline, maxWorkers)]),\n groupBy: ({ target }) => target.task,\n maxWorkers,\n script: require.resolve(\"./singleTargetWorker.js\"),\n workerOptions: {\n stdout: true,\n stderr: true,\n workerData: {\n runners: {\n ...getBuiltInRunners({ nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n shouldCache: false,\n shouldResetCache: false,\n },\n },\n },\n workerIdleMemoryLimit: config.workerIdleMemoryLimit,\n });\n\n serverControls.abortController.signal.addEventListener(\"abort\", () => {\n void pool?.close();\n });\n\n pool?.on(\"freedWorker\", () => {\n logger.silly(`Max Worker Memory Usage: ${formatBytes(pool?.stats().maxWorkerMemoryUsage)}`);\n });\n\n pool?.on(\"idle\", () => {\n logger.info(\"All workers are idle, shutting down after timeout\");\n serverControls.countdownToShutdown();\n });\n\n logger.info(\"done initializing\");\n return { config, targetGraph, packageTree, dependencyMap, root, pool, targetHasher };\n}\n\n/**\n * Initializes the lageService: the extra \"initializePromise\" ensures only one initialization is done at a time across threads\n * @param cwd\n * @param logger\n * @returns\n */\nasync function initialize(options: InitializeOptions): Promise<LageServiceContext> {\n initializedPromise = createInitializedPromise(options);\n return initializedPromise;\n}\n\ninterface CreateLageServiceOptions {\n cwd: string;\n serverControls: ServiceControls;\n logger: Logger;\n concurrency?: number;\n tasks: string[];\n}\n\nexport async function createLageService({\n cwd,\n serverControls,\n logger,\n concurrency,\n tasks,\n}: CreateLageServiceOptions): Promise<ILageService> {\n return {\n async ping() {\n return { pong: true };\n },\n\n async runTarget(request) {\n if (global.gc) {\n global.gc();\n }\n\n serverControls.clearCountdown();\n\n // THIS IS A BIG ASSUMPTION; TODO: memoize based on the parameters of the initialize() call\n // The first request sets up the nodeArg and taskArgs - we are assuming that all requests to run this target are coming from the same\n // `lage info` call\n const { config, targetGraph, dependencyMap, packageTree, root, pool, targetHasher } = await initialize({\n cwd,\n logger,\n nodeArg: request.nodeOptions,\n taskArgs: request.taskArgs,\n serverControls,\n concurrency,\n tasks,\n });\n\n const runners = getBuiltInRunners({ nodeArg: request.nodeOptions, npmCmd: config.npmClient, taskArgs: request.taskArgs });\n\n const id = getTargetId(request.packageName, request.task);\n\n if (!targetGraph.targets.has(id)) {\n logger.info(`Target not found: ${request.packageName}#${request.task}`);\n return {\n packageName: request.packageName,\n task: request.task,\n exitCode: 1,\n };\n }\n\n logger.info(`Running target: ${request.packageName}#${request.task}`);\n\n const target = targetGraph.targets.get(id)!;\n const task = {\n target,\n runners,\n };\n\n const writableStdout = new MemoryStream();\n const writableStderr = new MemoryStream();\n let pipedStdout: Readable;\n let pipedStderr: Readable;\n\n const targetRun: TargetRun = {\n queueTime: process.hrtime(),\n target,\n duration: [0, 0],\n startTime: [0, 0],\n status: \"queued\",\n threadId: 0,\n };\n\n let results: {\n packageName?: string;\n task: string;\n cwd: string;\n exitCode: number;\n inputs: string[];\n outputs: string[];\n stdout: string;\n stderr: string;\n id: string;\n globalInputHashFile: string;\n };\n\n const inputs = getInputFiles(target, dependencyMap, packageTree);\n\n for (const dep of target.dependencies) {\n if (dep === getStartTargetId()) {\n continue;\n }\n\n const depTarget = targetGraph.targets.get(dep)!;\n inputs.push(path.join(path.relative(root, depTarget.cwd), getHashFilePath(depTarget)).replace(/\\\\/g, \"/\"));\n }\n\n // Write the target hash to a file for its dependants to use\n const targetHashFile = getHashFilePath(target);\n const targetHashFullPath = path.join(target.cwd, targetHashFile);\n\n try {\n if (!fs.existsSync(path.dirname(targetHashFullPath))) {\n fs.mkdirSync(path.dirname(targetHashFullPath), { recursive: true });\n }\n\n fs.writeFileSync(targetHashFullPath, await targetHasher.hash(target));\n } catch (e) {\n throw new ConnectError(`Error writing target hash file: ${targetHashFullPath}`, Code.Internal);\n }\n\n const targetGlobalInputHashRelativePath = getGlobalInputHashFilePath(target);\n\n try {\n await pool.exec(\n task,\n 0,\n (worker, stdout, stderr) => {\n logger.info(`[${worker.threadId}] ${request.packageName}#${request.task} start`);\n\n pipedStdout = stdout;\n pipedStderr = stderr;\n\n stdout.pipe(writableStdout);\n stderr.pipe(writableStderr);\n\n targetRun.threadId = worker.threadId;\n targetRun.status = \"running\";\n targetRun.startTime = process.hrtime();\n },\n (worker) => {\n logger.info(`Max Worker Memory Usage: ${formatBytes(pool.stats().maxWorkerMemoryUsage)}`);\n\n // logger.info the main process memory usage\n const memoryUsage = process.memoryUsage();\n logger.info(\n `Main Process Memory Usage: RSS: ${formatBytes(memoryUsage.rss)} Heap Total: ${formatBytes(\n memoryUsage.heapTotal\n )} Heap Used: ${formatBytes(memoryUsage.heapUsed)}`\n );\n\n targetRun.status = \"success\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n logger.info(\n `[${worker.threadId}] ${request.packageName}#${request.task} end: ${formatDuration(hrToSeconds(targetRun.duration))}`\n );\n pipedStdout.unpipe(writableStdout);\n pipedStderr.unpipe(writableStderr);\n }\n );\n\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 0,\n inputs,\n outputs,\n stdout: writableStdout.toString(),\n stderr: writableStderr.toString(),\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n } catch (e) {\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n targetRun.status = \"failed\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 1,\n inputs,\n outputs,\n stdout: \"\",\n stderr: e instanceof Error ? e.toString() : \"\",\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n }\n\n logger.info(\n `${request.packageName}#${request.task} results: \\n${JSON.stringify(\n {\n packageName: results.packageName,\n task: results.task,\n cwd: results.cwd,\n exitCode: results.exitCode,\n inputs: results.inputs,\n outputs: results.outputs,\n id: results.id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n },\n null,\n 2\n )}\\n------`,\n results\n );\n\n return results;\n },\n };\n}\n"],"names":["createLageService","initializedPromise","formatBytes","bytes","toFixed","createInitializedPromise","cwd","logger","serverControls","nodeArg","taskArgs","concurrency","tasks","config","getConfig","root","getWorkspaceManagerRoot","maxWorkers","getConcurrency","info","join","pipeline","packageInfos","getPackageInfos","targetGraph","createTargetGraph","dependencies","dependents","ignore","repoWideChanges","scope","undefined","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","targetHasher","TargetHasher","environmentGlob","cacheKey","cliArgs","initialize","packageTree","dependencyMap","filteredPipeline","filterPipelineDefinitions","targets","values","pool","AggregatedPool","maxWorkersByGroup","Map","getMaxWorkersPerTask","groupBy","target","task","script","require","resolve","workerOptions","stdout","stderr","workerData","runners","getBuiltInRunners","npmCmd","npmClient","shouldCache","shouldResetCache","workerIdleMemoryLimit","abortController","signal","addEventListener","close","on","silly","stats","maxWorkerMemoryUsage","countdownToShutdown","options","ping","pong","runTarget","request","global","gc","clearCountdown","nodeOptions","id","getTargetId","packageName","has","exitCode","get","writableStdout","MemoryStream","writableStderr","pipedStdout","pipedStderr","targetRun","queueTime","process","hrtime","duration","startTime","status","threadId","results","inputs","getInputFiles","dep","getStartTargetId","depTarget","push","path","relative","getHashFilePath","replace","targetHashFile","targetHashFullPath","fs","existsSync","dirname","mkdirSync","recursive","writeFileSync","hash","e","ConnectError","Code","Internal","targetGlobalInputHashRelativePath","getGlobalInputHashFilePath","exec","worker","pipe","memoryUsage","rss","heapTotal","heapUsed","hrtimeDiff","formatDuration","hrToSeconds","unpipe","getOutputFiles","targetHashFileRelativePath","toString","globalInputHashFile","Error","JSON","stringify"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { TargetRunnerPickerOptions } from "@lage-run/runners";
2
+ export declare function getBuiltInRunners(params: {
3
+ nodeArg: string | undefined;
4
+ npmCmd: string;
5
+ taskArgs: string[];
6
+ }): TargetRunnerPickerOptions;
@@ -2,18 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "runnerPickerOptions", {
5
+ Object.defineProperty(exports, "getBuiltInRunners", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return runnerPickerOptions;
8
+ return getBuiltInRunners;
9
9
  }
10
10
  });
11
- function runnerPickerOptions(nodeArg, npmCmd, taskArgs) {
11
+ function getBuiltInRunners(params) {
12
+ const { nodeArg, npmCmd, taskArgs } = params;
12
13
  return {
13
14
  npmScript: {
14
15
  script: require.resolve("./runners/NpmScriptRunner.js"),
15
16
  options: {
16
- nodeArg,
17
+ nodeOptions: nodeArg,
17
18
  taskArgs,
18
19
  npmCmd
19
20
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/getBuiltInRunners.ts"],"sourcesContent":["import type { NpmScriptRunnerOptions, TargetRunnerPickerOptions, WorkerRunnerOptions } from \"@lage-run/runners\";\n\nexport function getBuiltInRunners(params: { nodeArg: string | undefined; npmCmd: string; taskArgs: string[] }): TargetRunnerPickerOptions {\n const { nodeArg, npmCmd, taskArgs } = params;\n return {\n npmScript: {\n script: require.resolve(\"./runners/NpmScriptRunner.js\"),\n options: {\n nodeOptions: nodeArg,\n taskArgs,\n npmCmd,\n } satisfies NpmScriptRunnerOptions,\n },\n worker: {\n script: require.resolve(\"./runners/WorkerRunner.js\"),\n options: {\n taskArgs,\n } satisfies WorkerRunnerOptions,\n },\n noop: {\n script: require.resolve(\"./runners/NoOpRunner.js\"),\n options: {},\n },\n };\n}\n"],"names":["getBuiltInRunners","params","nodeArg","npmCmd","taskArgs","npmScript","script","require","resolve","options","nodeOptions","worker","noop"],"mappings":";;;;+BAEgBA;;;eAAAA;;;AAAT,SAASA,kBAAkBC,MAA2E;IAC3G,MAAM,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,EAAE,GAAGH;IACtC,OAAO;QACLI,WAAW;YACTC,QAAQC,QAAQC,OAAO,CAAC;YACxBC,SAAS;gBACPC,aAAaR;gBACbE;gBACAD;YACF;QACF;QACAQ,QAAQ;YACNL,QAAQC,QAAQC,OAAO,CAAC;YACxBC,SAAS;gBACPL;YACF;QACF;QACAQ,MAAM;YACJN,QAAQC,QAAQC,OAAO,CAAC;YACxBC,SAAS,CAAC;QACZ;IACF;AACF"}
package/lib/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export type { CacheOptions, ConfigOptions, ConfigFileOptions, Priority, PipelineDefinition, LoggerOptions } from "@lage-run/config";
2
- export type { TargetRunnerPickerOptions } from "@lage-run/runners";
1
+ export type { CacheOptions, ConfigFileOptions, ConfigOptions, LoggerOptions, PipelineDefinition, Priority } from "@lage-run/config";
2
+ export type { NpmScriptRunnerOptions, NpmScriptTargetOptions, TargetRunnerPickerOptions, TargetRunOptions, TargetRunResult, WorkerRunnerFunction, WorkerRunnerFunctionOptions, WorkerRunnerOptions, WorkerTargetOptions, } from "@lage-run/runners";
3
3
  export type { Target, TargetConfig } from "@lage-run/target-graph";
@@ -1,6 +1,6 @@
1
1
  import type { LogLevel } from "@lage-run/logger";
2
2
  /** All the built-in reporter names */
3
- export type BuiltInReporterName = "default" | "profile" | "json" | "azureDevops" | "adoLog" | "npmLog" | "old" | "verboseFileLog" | "vfl" | "fancy";
3
+ export type BuiltInReporterName = "default" | "profile" | "json" | "azureDevops" | "adoLog" | "githubActions" | "gha" | "npmLog" | "old" | "verboseFileLog" | "vfl" | "fancy";
4
4
  /** Built-in or custom reporter name */
5
5
  export type ReporterName = BuiltInReporterName | string;
6
6
  /** All the built-in reporter names */
@@ -23,6 +23,8 @@ _export(exports, {
23
23
  verboseFileLog: true,
24
24
  vfl: true,
25
25
  adoLog: true,
26
+ githubActions: true,
27
+ gha: true,
26
28
  fancy: true,
27
29
  default: true,
28
30
  // Not encouraged
@@ -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 | \"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 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","fancy","default","old","profile","Object","keys","filter","name"],"mappings":";;;;;;;;;;;QAkCaA;eAAAA;;QAGAC;eAAAA;;;AApBb,uEAAuE,GACvE,MAAMC,6BAAmE;IACvEC,MAAM;IACNC,aAAa;IACbC,QAAQ;IACRC,gBAAgB;IAChBC,KAAK;IACLC,QAAQ;IACRC,OAAO;IACPC,SAAS;IACT,iBAAiB;IACjBC,KAAK;IACL,mCAAmC;IACnCC,SAAS;AACX;AAGO,MAAMZ,uBAAiCa,OAAOC,IAAI,CAACZ;AAGnD,MAAMD,0BAAoCD,qBAAqBe,MAAM,CAC1E,CAACC,OAASd,0BAA0B,CAACc,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\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.33.3",
3
+ "version": "0.33.4",
4
4
  "description": "Command Line Interface for Lage",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,16 +22,16 @@
22
22
  "lint": "monorepo-scripts lint"
23
23
  },
24
24
  "dependencies": {
25
- "@lage-run/cache": "^1.4.5",
26
- "@lage-run/config": "^0.7.3",
25
+ "@lage-run/cache": "^1.4.6",
26
+ "@lage-run/config": "^0.8.0",
27
27
  "@lage-run/format-hrtime": "^0.1.8",
28
28
  "@lage-run/globby": "^13.0.1",
29
29
  "@lage-run/hasher": "^1.9.3",
30
30
  "@lage-run/logger": "^1.3.3",
31
- "@lage-run/reporters": "^1.3.8",
31
+ "@lage-run/reporters": "^1.4.0",
32
32
  "@lage-run/rpc": "^1.4.3",
33
- "@lage-run/runners": "^1.2.7",
34
- "@lage-run/scheduler": "^1.5.17",
33
+ "@lage-run/runners": "^1.3.0",
34
+ "@lage-run/scheduler": "^1.5.18",
35
35
  "@lage-run/scheduler-types": "^0.3.29",
36
36
  "@lage-run/target-graph": "^0.12.3",
37
37
  "@lage-run/worker-threads-pool": "^0.9.3",
@@ -1,2 +0,0 @@
1
- import type { TargetRunnerPickerOptions } from "@lage-run/runners";
2
- export declare function runnerPickerOptions(nodeArg: string | undefined, npmCmd: string, taskArgs: string[]): TargetRunnerPickerOptions;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runnerPickerOptions.ts"],"sourcesContent":["import type { TargetRunnerPickerOptions } from \"@lage-run/runners\";\n\nexport function runnerPickerOptions(nodeArg: string | undefined, npmCmd: string, taskArgs: string[]): TargetRunnerPickerOptions {\n return {\n npmScript: {\n script: require.resolve(\"./runners/NpmScriptRunner.js\"),\n options: {\n nodeArg,\n taskArgs,\n npmCmd,\n },\n },\n worker: {\n script: require.resolve(\"./runners/WorkerRunner.js\"),\n options: {\n taskArgs,\n },\n },\n noop: {\n script: require.resolve(\"./runners/NoOpRunner.js\"),\n options: {},\n },\n };\n}\n"],"names":["runnerPickerOptions","nodeArg","npmCmd","taskArgs","npmScript","script","require","resolve","options","worker","noop"],"mappings":";;;;+BAEgBA;;;eAAAA;;;AAAT,SAASA,oBAAoBC,OAA2B,EAAEC,MAAc,EAAEC,QAAkB;IACjG,OAAO;QACLC,WAAW;YACTC,QAAQC,QAAQC,OAAO,CAAC;YACxBC,SAAS;gBACPP;gBACAE;gBACAD;YACF;QACF;QACAO,QAAQ;YACNJ,QAAQC,QAAQC,OAAO,CAAC;YACxBC,SAAS;gBACPL;YACF;QACF;QACAO,MAAM;YACJL,QAAQC,QAAQC,OAAO,CAAC;YACxBC,SAAS,CAAC;QACZ;IACF;AACF"}