@lage-run/cli 0.28.0 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.json CHANGED
@@ -2,7 +2,22 @@
2
2
  "name": "@lage-run/cli",
3
3
  "entries": [
4
4
  {
5
- "date": "Sat, 15 Feb 2025 20:04:09 GMT",
5
+ "date": "Fri, 07 Mar 2025 23:45:22 GMT",
6
+ "version": "0.28.1",
7
+ "tag": "@lage-run/cli_v0.28.1",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "kchau@microsoft.com",
12
+ "package": "@lage-run/cli",
13
+ "commit": "3e65d7f50cc95412a79bb8a689c65b8cb39dd9b9",
14
+ "comment": "fixes the lage-server to respect gitignored files for env globs"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Sat, 15 Feb 2025 20:04:19 GMT",
6
21
  "version": "0.28.0",
7
22
  "tag": "@lage-run/cli_v0.28.0",
8
23
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,20 @@
1
1
  # Change Log - @lage-run/cli
2
2
 
3
- <!-- This log was last generated on Sat, 15 Feb 2025 20:04:09 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Fri, 07 Mar 2025 23:45:22 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.28.1
8
+
9
+ Fri, 07 Mar 2025 23:45:22 GMT
10
+
11
+ ### Patches
12
+
13
+ - fixes the lage-server to respect gitignored files for env globs (kchau@microsoft.com)
14
+
7
15
  ## 0.28.0
8
16
 
9
- Sat, 15 Feb 2025 20:04:09 GMT
17
+ Sat, 15 Feb 2025 20:04:19 GMT
10
18
 
11
19
  ### Minor changes
12
20
 
@@ -105,8 +105,7 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
105
105
  serverControls.countdownToShutdown();
106
106
  });
107
107
  const globalInputs = config.cacheOptions?.environmentGlob ? (0, _globby.glob)(config.cacheOptions?.environmentGlob, {
108
- cwd: root,
109
- gitignore: true
108
+ cwd: root
110
109
  }) : [
111
110
  "lage.config.js"
112
111
  ];
@@ -194,8 +193,7 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
194
193
  threadId: 0
195
194
  };
196
195
  const targetGlobalInputs = target.environmentGlob ? (0, _globby.glob)(target.environmentGlob, {
197
- cwd: root,
198
- gitignore: true
196
+ cwd: root
199
197
  }) : globalInputs;
200
198
  let results;
201
199
  const inputs = (0, _hasher.getInputFiles)(target, dependencyMap, packageTree);
@@ -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 Target, type TargetGraph } from \"@lage-run/target-graph\";\nimport { type DependencyMap, getPackageInfos, getWorkspaceRoot } 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 { glob } from \"@lage-run/globby\";\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\";\n\ninterface LageServiceContext {\n config: ConfigOptions;\n targetGraph: TargetGraph;\n packageTree: PackageTree;\n dependencyMap: DependencyMap;\n root: string;\n pool: Pool;\n globalInputs: string[];\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 = getWorkspaceRoot(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 });\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 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 const globalInputs = config.cacheOptions?.environmentGlob\n ? glob(config.cacheOptions?.environmentGlob, { cwd: root, gitignore: true })\n : [\"lage.config.js\"];\n\n logger.info(`Environment glob inputs: \\n${JSON.stringify(globalInputs)}\\n-------`);\n\n logger.info(\"done initializing\");\n return { config, targetGraph, packageTree, dependencyMap, root, pool, globalInputs, 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\nfunction getHashFilePath(target: Target) {\n return path.join(`node_modules/.lage/hash_${target.task}`);\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, globalInputs, 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 const targetGlobalInputs = target.environmentGlob ? glob(target.environmentGlob, { cwd: root, gitignore: true }) : globalInputs;\n\n let results: {\n packageName?: string;\n task: string;\n exitCode: number;\n inputs: string[];\n outputs: string[];\n stdout: string;\n stderr: string;\n id: string;\n globalInputs: 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 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 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 exitCode: 0,\n inputs,\n outputs,\n stdout: writableStdout.toString(),\n stderr: writableStderr.toString(),\n id,\n globalInputs: targetGlobalInputs,\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 exitCode: 1,\n inputs,\n outputs,\n stdout: \"\",\n stderr: e instanceof Error ? e.toString() : \"\",\n id,\n globalInputs: targetGlobalInputs,\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 exitCode: results.exitCode,\n inputs: results.inputs,\n outputs: results.outputs,\n id: results.id,\n globalInputs: `(${target.environmentGlob ? \"custom target env glob used\" : \"general global inputs used\"}): ${\n results.globalInputs.length\n } files`,\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","getWorkspaceRoot","maxWorkers","getConcurrency","info","join","pipeline","packageInfos","getPackageInfos","targetGraph","createTargetGraph","dependencies","dependents","ignore","repoWideChanges","scope","undefined","since","outputs","cacheOptions","outputGlob","priorities","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","globalInputs","glob","gitignore","JSON","stringify","options","getHashFilePath","path","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","targetGlobalInputs","results","inputs","getInputFiles","dep","getStartTargetId","depTarget","push","relative","replace","targetHashFile","targetHashFullPath","fs","existsSync","dirname","mkdirSync","recursive","writeFileSync","hash","e","ConnectError","Code","Internal","exec","worker","pipe","memoryUsage","rss","heapTotal","heapUsed","hrtimeDiff","formatDuration","hrToSeconds","unpipe","getOutputFiles","targetHashFileRelativePath","toString","Error","length"],"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 Target, type TargetGraph } from \"@lage-run/target-graph\";\nimport { type DependencyMap, getPackageInfos, getWorkspaceRoot } 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 { glob } from \"@lage-run/globby\";\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\";\n\ninterface LageServiceContext {\n config: ConfigOptions;\n targetGraph: TargetGraph;\n packageTree: PackageTree;\n dependencyMap: DependencyMap;\n root: string;\n pool: Pool;\n globalInputs: string[];\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 = getWorkspaceRoot(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 });\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 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 const globalInputs = config.cacheOptions?.environmentGlob\n ? glob(config.cacheOptions?.environmentGlob, { cwd: root })\n : [\"lage.config.js\"];\n\n logger.info(`Environment glob inputs: \\n${JSON.stringify(globalInputs)}\\n-------`);\n\n logger.info(\"done initializing\");\n return { config, targetGraph, packageTree, dependencyMap, root, pool, globalInputs, 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\nfunction getHashFilePath(target: Target) {\n return path.join(`node_modules/.lage/hash_${target.task}`);\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, globalInputs, 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 const targetGlobalInputs = target.environmentGlob ? glob(target.environmentGlob, { cwd: root }) : globalInputs;\n\n let results: {\n packageName?: string;\n task: string;\n exitCode: number;\n inputs: string[];\n outputs: string[];\n stdout: string;\n stderr: string;\n id: string;\n globalInputs: 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 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 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 exitCode: 0,\n inputs,\n outputs,\n stdout: writableStdout.toString(),\n stderr: writableStderr.toString(),\n id,\n globalInputs: targetGlobalInputs,\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 exitCode: 1,\n inputs,\n outputs,\n stdout: \"\",\n stderr: e instanceof Error ? e.toString() : \"\",\n id,\n globalInputs: targetGlobalInputs,\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 exitCode: results.exitCode,\n inputs: results.inputs,\n outputs: results.outputs,\n id: results.id,\n globalInputs: `(${target.environmentGlob ? \"custom target env glob used\" : \"general global inputs used\"}): ${\n results.globalInputs.length\n } files`,\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","getWorkspaceRoot","maxWorkers","getConcurrency","info","join","pipeline","packageInfos","getPackageInfos","targetGraph","createTargetGraph","dependencies","dependents","ignore","repoWideChanges","scope","undefined","since","outputs","cacheOptions","outputGlob","priorities","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","globalInputs","glob","JSON","stringify","options","getHashFilePath","path","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","targetGlobalInputs","results","inputs","getInputFiles","dep","getStartTargetId","depTarget","push","relative","replace","targetHashFile","targetHashFullPath","fs","existsSync","dirname","mkdirSync","recursive","writeFileSync","hash","e","ConnectError","Code","Internal","exec","worker","pipe","memoryUsage","rss","heapTotal","heapUsed","hrtimeDiff","formatDuration","hrToSeconds","unpipe","getOutputFiles","targetHashFileRelativePath","toString","Error","length"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lage-run/cli",
3
- "version": "0.28.0",
3
+ "version": "0.28.1",
4
4
  "description": "Command Line Interface for Lage",
5
5
  "repository": {
6
6
  "type": "git",