@lage-run/cli 0.25.2 → 0.25.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.
package/CHANGELOG.json CHANGED
@@ -2,7 +2,34 @@
2
2
  "name": "@lage-run/cli",
3
3
  "entries": [
4
4
  {
5
- "date": "Fri, 07 Feb 2025 02:50:47 GMT",
5
+ "date": "Sun, 09 Feb 2025 23:17:43 GMT",
6
+ "version": "0.25.4",
7
+ "tag": "@lage-run/cli_v0.25.4",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "kchau@microsoft.com",
12
+ "package": "@lage-run/cli",
13
+ "commit": "0c4208fff4f1d0f2c6345180254f2f4b7c283538",
14
+ "comment": "tracks the transitive inputs rather just one level deep"
15
+ },
16
+ {
17
+ "author": "kchau@microsoft.com",
18
+ "package": "@lage-run/cli",
19
+ "commit": "0c4208fff4f1d0f2c6345180254f2f4b7c283538",
20
+ "comment": "simulate transitives by doing our own hashing"
21
+ },
22
+ {
23
+ "author": "beachball",
24
+ "package": "@lage-run/cli",
25
+ "comment": "Bump @lage-run/rpc to v1.2.5",
26
+ "commit": "not available"
27
+ }
28
+ ]
29
+ }
30
+ },
31
+ {
32
+ "date": "Fri, 07 Feb 2025 02:50:58 GMT",
6
33
  "version": "0.25.2",
7
34
  "tag": "@lage-run/cli_v0.25.2",
8
35
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,22 @@
1
1
  # Change Log - @lage-run/cli
2
2
 
3
- <!-- This log was last generated on Fri, 07 Feb 2025 02:50:47 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Sun, 09 Feb 2025 23:17:43 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.25.4
8
+
9
+ Sun, 09 Feb 2025 23:17:43 GMT
10
+
11
+ ### Patches
12
+
13
+ - tracks the transitive inputs rather just one level deep (kchau@microsoft.com)
14
+ - simulate transitives by doing our own hashing (kchau@microsoft.com)
15
+ - Bump @lage-run/rpc to v1.2.5
16
+
7
17
  ## 0.25.2
8
18
 
9
- Fri, 07 Feb 2025 02:50:47 GMT
19
+ Fri, 07 Feb 2025 02:50:58 GMT
10
20
 
11
21
  ### Patches
12
22
 
@@ -122,7 +122,10 @@ async function executeRemotely(options, command) {
122
122
  process.stderr.write(response.stderr);
123
123
  process.exitCode = response.exitCode;
124
124
  // we will simulate file access even if exit code may be non-zero
125
- await (0, _simulateFileAccess.simulateFileAccess)(logger, response.inputs, response.outputs);
125
+ await (0, _simulateFileAccess.simulateFileAccess)(logger, [
126
+ ...response.inputs,
127
+ ...response.globalInputs
128
+ ], response.outputs);
126
129
  } else {
127
130
  process.exitCode = 1;
128
131
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/exec/executeRemotely.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport createLogger from \"@lage-run/logger\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { LageClient } from \"@lage-run/rpc\";\nimport { ConnectError, createClient } from \"@lage-run/rpc\";\nimport { filterArgsForTasks } from \"../run/filterArgsForTasks.js\";\nimport { simulateFileAccess } from \"./simulateFileAccess.js\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { getWorkspaceRoot } from \"workspace-tools\";\nimport type { Command } from \"commander\";\nimport { launchServerInBackground } from \"../launchServerInBackground.js\";\n\ninterface ExecRemotelyOptions extends ReporterInitOptions {\n cwd?: string;\n server?: string | boolean;\n timeout?: number;\n tasks: string[];\n nodeArg?: string;\n}\n\nasync function tryCreateClient(host: string, port: number) {\n const client = createClient({\n baseUrl: `http://${host}:${port}`,\n httpVersion: \"2\",\n });\n\n try {\n const success = await client.ping({});\n if (success.pong) {\n return client;\n }\n } catch (e) {\n if (e instanceof ConnectError) {\n return undefined;\n }\n\n throw e;\n }\n\n return undefined;\n}\n\nasync function tryCreateClientWithRetries(host: string, port: number, logger: Logger) {\n let client: ReturnType<typeof createClient> | undefined;\n\n const start = Date.now();\n while (Date.now() - start < 5 * 1000) {\n try {\n client = await tryCreateClient(host, port);\n\n if (client) {\n return client;\n }\n } catch (e) {\n if (e instanceof ConnectError) {\n logger.error(\"Error connecting to server\", e);\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n\n return undefined;\n}\n\nasync function executeOnServer(args: string[], client: LageClient, logger: Logger) {\n const task = args.length === 1 ? args[0] : args[1];\n const packageName = args.length > 1 ? args[0] : undefined;\n\n if (!task) {\n throw new Error(\"No task provided\");\n }\n\n const { taskArgs } = filterArgsForTasks(args ?? []);\n\n try {\n const response = await client.runTarget({\n packageName,\n task,\n taskArgs,\n });\n logger.info(`Task ${response.packageName} ${response.task} exited with code ${response.exitCode}`);\n return response;\n } catch (error) {\n if (error instanceof ConnectError) {\n logger.error(\"Error connecting to server\", { error });\n } else {\n logger.error(\"Error running task\", { error });\n }\n }\n}\n\nexport async function executeRemotely(options: ExecRemotelyOptions, command: Command) {\n // launch a 'lage-server.js' process, detached if it is not already running\n // send the command to the server process\n const { server, tasks, nodeArg } = options;\n const timeout = options.timeout ?? 5 * 60;\n\n const { host, port } = parseServerOption(server);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.reporter = options.reporter ?? \"json\";\n initializeReporters(logger, options);\n\n const root = getWorkspaceRoot(options.cwd ?? process.cwd())!;\n\n let client = await tryCreateClient(host, port);\n const args = command.args;\n\n logger.info(`Command args ${command.args.join(\" \")}`);\n\n if (!client) {\n await launchServerInBackground({\n host,\n port,\n tasks,\n args,\n timeout,\n logger,\n root,\n nodeArg,\n });\n\n logger.info(\"Creating a client to connect to the background services\");\n client = await tryCreateClientWithRetries(host, port, logger);\n\n if (!client) {\n throw new Error(\"Server could not be started\");\n }\n }\n\n logger.info(`Executing on server http://${host}:${port}`);\n const response = await executeOnServer(args, client, logger);\n\n if (response) {\n process.stdout.write(response.stdout);\n process.stderr.write(response.stderr);\n process.exitCode = response.exitCode;\n\n // we will simulate file access even if exit code may be non-zero\n await simulateFileAccess(logger, response.inputs, response.outputs);\n } else {\n process.exitCode = 1;\n }\n\n logger.info(\"Task execution finished\");\n}\n"],"names":["executeRemotely","tryCreateClient","host","port","client","createClient","baseUrl","httpVersion","success","ping","pong","e","ConnectError","undefined","tryCreateClientWithRetries","logger","start","Date","now","error","Promise","resolve","setTimeout","executeOnServer","args","task","length","packageName","Error","taskArgs","filterArgsForTasks","response","runTarget","info","exitCode","options","command","server","tasks","nodeArg","timeout","parseServerOption","createLogger","logLevel","reporter","initializeReporters","root","getWorkspaceRoot","cwd","process","join","launchServerInBackground","stdout","write","stderr","simulateFileAccess","inputs","outputs"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/exec/executeRemotely.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport createLogger from \"@lage-run/logger\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { LageClient } from \"@lage-run/rpc\";\nimport { ConnectError, createClient } from \"@lage-run/rpc\";\nimport { filterArgsForTasks } from \"../run/filterArgsForTasks.js\";\nimport { simulateFileAccess } from \"./simulateFileAccess.js\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { getWorkspaceRoot } from \"workspace-tools\";\nimport type { Command } from \"commander\";\nimport { launchServerInBackground } from \"../launchServerInBackground.js\";\n\ninterface ExecRemotelyOptions extends ReporterInitOptions {\n cwd?: string;\n server?: string | boolean;\n timeout?: number;\n tasks: string[];\n nodeArg?: string;\n}\n\nasync function tryCreateClient(host: string, port: number) {\n const client = createClient({\n baseUrl: `http://${host}:${port}`,\n httpVersion: \"2\",\n });\n\n try {\n const success = await client.ping({});\n if (success.pong) {\n return client;\n }\n } catch (e) {\n if (e instanceof ConnectError) {\n return undefined;\n }\n\n throw e;\n }\n\n return undefined;\n}\n\nasync function tryCreateClientWithRetries(host: string, port: number, logger: Logger) {\n let client: ReturnType<typeof createClient> | undefined;\n\n const start = Date.now();\n while (Date.now() - start < 5 * 1000) {\n try {\n client = await tryCreateClient(host, port);\n\n if (client) {\n return client;\n }\n } catch (e) {\n if (e instanceof ConnectError) {\n logger.error(\"Error connecting to server\", e);\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n\n return undefined;\n}\n\nasync function executeOnServer(args: string[], client: LageClient, logger: Logger) {\n const task = args.length === 1 ? args[0] : args[1];\n const packageName = args.length > 1 ? args[0] : undefined;\n\n if (!task) {\n throw new Error(\"No task provided\");\n }\n\n const { taskArgs } = filterArgsForTasks(args ?? []);\n\n try {\n const response = await client.runTarget({\n packageName,\n task,\n taskArgs,\n });\n logger.info(`Task ${response.packageName} ${response.task} exited with code ${response.exitCode}`);\n return response;\n } catch (error) {\n if (error instanceof ConnectError) {\n logger.error(\"Error connecting to server\", { error });\n } else {\n logger.error(\"Error running task\", { error });\n }\n }\n}\n\nexport async function executeRemotely(options: ExecRemotelyOptions, command: Command) {\n // launch a 'lage-server.js' process, detached if it is not already running\n // send the command to the server process\n const { server, tasks, nodeArg } = options;\n const timeout = options.timeout ?? 5 * 60;\n\n const { host, port } = parseServerOption(server);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.reporter = options.reporter ?? \"json\";\n initializeReporters(logger, options);\n\n const root = getWorkspaceRoot(options.cwd ?? process.cwd())!;\n\n let client = await tryCreateClient(host, port);\n const args = command.args;\n\n logger.info(`Command args ${command.args.join(\" \")}`);\n\n if (!client) {\n await launchServerInBackground({\n host,\n port,\n tasks,\n args,\n timeout,\n logger,\n root,\n nodeArg,\n });\n\n logger.info(\"Creating a client to connect to the background services\");\n client = await tryCreateClientWithRetries(host, port, logger);\n\n if (!client) {\n throw new Error(\"Server could not be started\");\n }\n }\n\n logger.info(`Executing on server http://${host}:${port}`);\n const response = await executeOnServer(args, client, logger);\n\n if (response) {\n process.stdout.write(response.stdout);\n process.stderr.write(response.stderr);\n process.exitCode = response.exitCode;\n\n // we will simulate file access even if exit code may be non-zero\n await simulateFileAccess(logger, [...response.inputs, ...response.globalInputs], response.outputs);\n } else {\n process.exitCode = 1;\n }\n\n logger.info(\"Task execution finished\");\n}\n"],"names":["executeRemotely","tryCreateClient","host","port","client","createClient","baseUrl","httpVersion","success","ping","pong","e","ConnectError","undefined","tryCreateClientWithRetries","logger","start","Date","now","error","Promise","resolve","setTimeout","executeOnServer","args","task","length","packageName","Error","taskArgs","filterArgsForTasks","response","runTarget","info","exitCode","options","command","server","tasks","nodeArg","timeout","parseServerOption","createLogger","logLevel","reporter","initializeReporters","root","getWorkspaceRoot","cwd","process","join","launchServerInBackground","stdout","write","stderr","simulateFileAccess","inputs","globalInputs","outputs"],"mappings":"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"}
@@ -23,13 +23,21 @@ async function simulateFileAccess(logger, inputs, outputs) {
23
23
  // probe input files
24
24
  let fd;
25
25
  for (const input of inputs){
26
- fd = _fs.default.openSync(_path.default.join(root, input), "r");
27
- _fs.default.closeSync(fd);
26
+ try {
27
+ fd = _fs.default.openSync(_path.default.join(root, input), "r");
28
+ _fs.default.closeSync(fd);
29
+ } catch (e) {
30
+ // ignore
31
+ }
28
32
  inputDirectories.add(_path.default.dirname(input));
29
33
  }
30
34
  for (const directory of inputDirectories){
31
- fd = _fs.default.openSync(_path.default.join(root, directory), "r");
32
- _fs.default.closeSync(fd);
35
+ try {
36
+ fd = _fs.default.openSync(_path.default.join(root, directory), "r");
37
+ _fs.default.closeSync(fd);
38
+ } catch (e) {
39
+ // ignore
40
+ }
33
41
  }
34
42
  // touch output files
35
43
  const time = new Date();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/exec/simulateFileAccess.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getWorkspaceRoot } from \"workspace-tools\";\n\nexport async function simulateFileAccess(logger: Logger, inputs: string[], outputs: string[]) {\n const root = getWorkspaceRoot(process.cwd())!;\n logger.silly(\"Now probing and touching inputs and outputs\");\n\n const inputDirectories = new Set<string>();\n\n // probe input files\n let fd: number;\n for (const input of inputs) {\n fd = fs.openSync(path.join(root, input), \"r\");\n fs.closeSync(fd);\n\n inputDirectories.add(path.dirname(input));\n }\n\n for (const directory of inputDirectories) {\n fd = fs.openSync(path.join(root, directory), \"r\");\n fs.closeSync(fd);\n }\n\n // touch output files\n const time = new Date();\n const outputDirectories = new Set<string>();\n for (const output of outputs) {\n outputDirectories.add(path.dirname(output));\n\n try {\n fs.utimesSync(path.join(root, output), time, time);\n } catch (e) {\n // ignore\n }\n }\n\n for (const directory of outputDirectories) {\n try {\n fs.utimesSync(path.join(root, directory), time, time);\n } catch (e) {\n // ignore\n }\n }\n}\n"],"names":["simulateFileAccess","logger","inputs","outputs","root","getWorkspaceRoot","process","cwd","silly","inputDirectories","Set","fd","input","fs","openSync","path","join","closeSync","add","dirname","directory","time","Date","outputDirectories","output","utimesSync","e"],"mappings":";;;;+BAKsBA;;;eAAAA;;;6DAJL;2DACF;gCACkB;;;;;;AAE1B,eAAeA,mBAAmBC,MAAc,EAAEC,MAAgB,EAAEC,OAAiB;IAC1F,MAAMC,OAAOC,IAAAA,gCAAgB,EAACC,QAAQC,GAAG;IACzCN,OAAOO,KAAK,CAAC;IAEb,MAAMC,mBAAmB,IAAIC;IAE7B,oBAAoB;IACpB,IAAIC;IACJ,KAAK,MAAMC,SAASV,OAAQ;QAC1BS,KAAKE,WAAE,CAACC,QAAQ,CAACC,aAAI,CAACC,IAAI,CAACZ,MAAMQ,QAAQ;QACzCC,WAAE,CAACI,SAAS,CAACN;QAEbF,iBAAiBS,GAAG,CAACH,aAAI,CAACI,OAAO,CAACP;IACpC;IAEA,KAAK,MAAMQ,aAAaX,iBAAkB;QACxCE,KAAKE,WAAE,CAACC,QAAQ,CAACC,aAAI,CAACC,IAAI,CAACZ,MAAMgB,YAAY;QAC7CP,WAAE,CAACI,SAAS,CAACN;IACf;IAEA,qBAAqB;IACrB,MAAMU,OAAO,IAAIC;IACjB,MAAMC,oBAAoB,IAAIb;IAC9B,KAAK,MAAMc,UAAUrB,QAAS;QAC5BoB,kBAAkBL,GAAG,CAACH,aAAI,CAACI,OAAO,CAACK;QAEnC,IAAI;YACFX,WAAE,CAACY,UAAU,CAACV,aAAI,CAACC,IAAI,CAACZ,MAAMoB,SAASH,MAAMA;QAC/C,EAAE,OAAOK,GAAG;QACV,SAAS;QACX;IACF;IAEA,KAAK,MAAMN,aAAaG,kBAAmB;QACzC,IAAI;YACFV,WAAE,CAACY,UAAU,CAACV,aAAI,CAACC,IAAI,CAACZ,MAAMgB,YAAYC,MAAMA;QAClD,EAAE,OAAOK,GAAG;QACV,SAAS;QACX;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/exec/simulateFileAccess.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getWorkspaceRoot } from \"workspace-tools\";\n\nexport async function simulateFileAccess(logger: Logger, inputs: string[], outputs: string[]) {\n const root = getWorkspaceRoot(process.cwd())!;\n logger.silly(\"Now probing and touching inputs and outputs\");\n\n const inputDirectories = new Set<string>();\n\n // probe input files\n let fd: number;\n for (const input of inputs) {\n try {\n fd = fs.openSync(path.join(root, input), \"r\");\n fs.closeSync(fd);\n } catch (e) {\n // ignore\n }\n\n inputDirectories.add(path.dirname(input));\n }\n\n for (const directory of inputDirectories) {\n try {\n fd = fs.openSync(path.join(root, directory), \"r\");\n fs.closeSync(fd);\n } catch (e) {\n // ignore\n }\n }\n\n // touch output files\n const time = new Date();\n const outputDirectories = new Set<string>();\n for (const output of outputs) {\n outputDirectories.add(path.dirname(output));\n\n try {\n fs.utimesSync(path.join(root, output), time, time);\n } catch (e) {\n // ignore\n }\n }\n\n for (const directory of outputDirectories) {\n try {\n fs.utimesSync(path.join(root, directory), time, time);\n } catch (e) {\n // ignore\n }\n }\n}\n"],"names":["simulateFileAccess","logger","inputs","outputs","root","getWorkspaceRoot","process","cwd","silly","inputDirectories","Set","fd","input","fs","openSync","path","join","closeSync","e","add","dirname","directory","time","Date","outputDirectories","output","utimesSync"],"mappings":";;;;+BAKsBA;;;eAAAA;;;6DAJL;2DACF;gCACkB;;;;;;AAE1B,eAAeA,mBAAmBC,MAAc,EAAEC,MAAgB,EAAEC,OAAiB;IAC1F,MAAMC,OAAOC,IAAAA,gCAAgB,EAACC,QAAQC,GAAG;IACzCN,OAAOO,KAAK,CAAC;IAEb,MAAMC,mBAAmB,IAAIC;IAE7B,oBAAoB;IACpB,IAAIC;IACJ,KAAK,MAAMC,SAASV,OAAQ;QAC1B,IAAI;YACFS,KAAKE,WAAE,CAACC,QAAQ,CAACC,aAAI,CAACC,IAAI,CAACZ,MAAMQ,QAAQ;YACzCC,WAAE,CAACI,SAAS,CAACN;QACf,EAAE,OAAOO,GAAG;QACV,SAAS;QACX;QAEAT,iBAAiBU,GAAG,CAACJ,aAAI,CAACK,OAAO,CAACR;IACpC;IAEA,KAAK,MAAMS,aAAaZ,iBAAkB;QACxC,IAAI;YACFE,KAAKE,WAAE,CAACC,QAAQ,CAACC,aAAI,CAACC,IAAI,CAACZ,MAAMiB,YAAY;YAC7CR,WAAE,CAACI,SAAS,CAACN;QACf,EAAE,OAAOO,GAAG;QACV,SAAS;QACX;IACF;IAEA,qBAAqB;IACrB,MAAMI,OAAO,IAAIC;IACjB,MAAMC,oBAAoB,IAAId;IAC9B,KAAK,MAAMe,UAAUtB,QAAS;QAC5BqB,kBAAkBL,GAAG,CAACJ,aAAI,CAACK,OAAO,CAACK;QAEnC,IAAI;YACFZ,WAAE,CAACa,UAAU,CAACX,aAAI,CAACC,IAAI,CAACZ,MAAMqB,SAASH,MAAMA;QAC/C,EAAE,OAAOJ,GAAG;QACV,SAAS;QACX;IACF;IAEA,KAAK,MAAMG,aAAaG,kBAAmB;QACzC,IAAI;YACFX,WAAE,CAACa,UAAU,CAACX,aAAI,CAACC,IAAI,CAACZ,MAAMiB,YAAYC,MAAMA;QAClD,EAAE,OAAOJ,GAAG;QACV,SAAS;QACX;IACF;AACF"}
@@ -32,7 +32,7 @@ async function serverAction(options) {
32
32
  cwd: process.cwd(),
33
33
  serverControls: {
34
34
  abortController,
35
- countdownToShutdown: ()=>resetTimer(logger, timeout, abortController, server),
35
+ countdownToShutdown: ()=>resetTimer(logger, timeout, abortController, lageServer),
36
36
  clearCountdown: clearTimer
37
37
  },
38
38
  logger,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/server/action.ts"],"sourcesContent":["import createLogger, { type Logger } from \"@lage-run/logger\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { createLageService } from \"./lageService.js\";\nimport { createServer } from \"@lage-run/rpc\";\nimport { parseServerOption } from \"../parseServerOption.js\";\n\ninterface WorkerOptions extends ReporterInitOptions {\n nodeArg?: string[];\n server?: string;\n timeout?: number;\n shutdown: boolean;\n tasks: string[];\n}\n\nexport async function serverAction(options: WorkerOptions) {\n const { server = \"localhost:5332\", timeout = 1, tasks } = options;\n\n const { host, port } = parseServerOption(server);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.logFile = options.logFile ?? \"node_modules/.cache/lage/server.log\";\n options.reporter = options.reporter ?? \"verboseFileLog\";\n initializeReporters(logger, options);\n\n logger.info(`Starting server on http://${host}:${port}`);\n\n const abortController = new AbortController();\n\n const lageService = await createLageService({\n cwd: process.cwd(),\n serverControls: {\n abortController,\n countdownToShutdown: () => resetTimer(logger, timeout, abortController, server),\n clearCountdown: clearTimer,\n },\n logger,\n concurrency: options.concurrency,\n tasks,\n });\n const lageServer = await createServer(lageService, abortController);\n\n await lageServer.listen({ host, port });\n logger.info(`Server listening on http://${host}:${port}, timeout in ${timeout} seconds`);\n}\n\nlet timeoutHandle: NodeJS.Timeout | undefined;\nfunction resetTimer(logger: Logger, timeout: number, abortController: AbortController, server: any) {\n clearTimer();\n\n timeoutHandle = globalThis.setTimeout(() => {\n logger.info(`Server timed out after ${timeout} seconds`);\n abortController.abort();\n server.close();\n }, timeout * 1000);\n}\n\nfunction clearTimer() {\n if (timeoutHandle) {\n globalThis.clearTimeout(timeoutHandle);\n }\n}\n"],"names":["serverAction","options","server","timeout","tasks","host","port","parseServerOption","logger","createLogger","logLevel","logFile","reporter","initializeReporters","info","abortController","AbortController","lageService","createLageService","cwd","process","serverControls","countdownToShutdown","resetTimer","clearCountdown","clearTimer","concurrency","lageServer","createServer","listen","timeoutHandle","globalThis","setTimeout","abort","close","clearTimeout"],"mappings":";;;;+BAesBA;;;eAAAA;;;+DAfoB;qCAEN;6BACF;qBACL;mCACK;;;;;;AAU3B,eAAeA,aAAaC,OAAsB;IACvD,MAAM,EAAEC,SAAS,gBAAgB,EAAEC,UAAU,CAAC,EAAEC,KAAK,EAAE,GAAGH;IAE1D,MAAM,EAAEI,IAAI,EAAEC,IAAI,EAAE,GAAGC,IAAAA,oCAAiB,EAACL;IAEzC,MAAMM,SAASC,IAAAA,eAAY;IAC3BR,QAAQS,QAAQ,GAAGT,QAAQS,QAAQ,IAAI;IACvCT,QAAQU,OAAO,GAAGV,QAAQU,OAAO,IAAI;IACrCV,QAAQW,QAAQ,GAAGX,QAAQW,QAAQ,IAAI;IACvCC,IAAAA,wCAAmB,EAACL,QAAQP;IAE5BO,OAAOM,IAAI,CAAC,CAAC,0BAA0B,EAAET,KAAK,CAAC,EAAEC,MAAM;IAEvD,MAAMS,kBAAkB,IAAIC;IAE5B,MAAMC,cAAc,MAAMC,IAAAA,8BAAiB,EAAC;QAC1CC,KAAKC,QAAQD,GAAG;QAChBE,gBAAgB;YACdN;YACAO,qBAAqB,IAAMC,WAAWf,QAAQL,SAASY,iBAAiBb;YACxEsB,gBAAgBC;QAClB;QACAjB;QACAkB,aAAazB,QAAQyB,WAAW;QAChCtB;IACF;IACA,MAAMuB,aAAa,MAAMC,IAAAA,iBAAY,EAACX,aAAaF;IAEnD,MAAMY,WAAWE,MAAM,CAAC;QAAExB;QAAMC;IAAK;IACrCE,OAAOM,IAAI,CAAC,CAAC,2BAA2B,EAAET,KAAK,CAAC,EAAEC,KAAK,aAAa,EAAEH,QAAQ,QAAQ,CAAC;AACzF;AAEA,IAAI2B;AACJ,SAASP,WAAWf,MAAc,EAAEL,OAAe,EAAEY,eAAgC,EAAEb,MAAW;IAChGuB;IAEAK,gBAAgBC,WAAWC,UAAU,CAAC;QACpCxB,OAAOM,IAAI,CAAC,CAAC,uBAAuB,EAAEX,QAAQ,QAAQ,CAAC;QACvDY,gBAAgBkB,KAAK;QACrB/B,OAAOgC,KAAK;IACd,GAAG/B,UAAU;AACf;AAEA,SAASsB;IACP,IAAIK,eAAe;QACjBC,WAAWI,YAAY,CAACL;IAC1B;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/server/action.ts"],"sourcesContent":["import createLogger, { type Logger } from \"@lage-run/logger\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { createLageService } from \"./lageService.js\";\nimport { createServer } from \"@lage-run/rpc\";\nimport { parseServerOption } from \"../parseServerOption.js\";\n\ninterface WorkerOptions extends ReporterInitOptions {\n nodeArg?: string[];\n server?: string;\n timeout?: number;\n shutdown: boolean;\n tasks: string[];\n}\n\nexport async function serverAction(options: WorkerOptions) {\n const { server = \"localhost:5332\", timeout = 1, tasks } = options;\n\n const { host, port } = parseServerOption(server);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.logFile = options.logFile ?? \"node_modules/.cache/lage/server.log\";\n options.reporter = options.reporter ?? \"verboseFileLog\";\n initializeReporters(logger, options);\n\n logger.info(`Starting server on http://${host}:${port}`);\n\n const abortController = new AbortController();\n\n const lageService = await createLageService({\n cwd: process.cwd(),\n serverControls: {\n abortController,\n countdownToShutdown: () => resetTimer(logger, timeout, abortController, lageServer),\n clearCountdown: clearTimer,\n },\n logger,\n concurrency: options.concurrency,\n tasks,\n });\n const lageServer = await createServer(lageService, abortController);\n\n await lageServer.listen({ host, port });\n logger.info(`Server listening on http://${host}:${port}, timeout in ${timeout} seconds`);\n}\n\nlet timeoutHandle: NodeJS.Timeout | undefined;\nfunction resetTimer(logger: Logger, timeout: number, abortController: AbortController, server: any) {\n clearTimer();\n\n timeoutHandle = globalThis.setTimeout(() => {\n logger.info(`Server timed out after ${timeout} seconds`);\n abortController.abort();\n server.close();\n }, timeout * 1000);\n}\n\nfunction clearTimer() {\n if (timeoutHandle) {\n globalThis.clearTimeout(timeoutHandle);\n }\n}\n"],"names":["serverAction","options","server","timeout","tasks","host","port","parseServerOption","logger","createLogger","logLevel","logFile","reporter","initializeReporters","info","abortController","AbortController","lageService","createLageService","cwd","process","serverControls","countdownToShutdown","resetTimer","lageServer","clearCountdown","clearTimer","concurrency","createServer","listen","timeoutHandle","globalThis","setTimeout","abort","close","clearTimeout"],"mappings":";;;;+BAesBA;;;eAAAA;;;+DAfoB;qCAEN;6BACF;qBACL;mCACK;;;;;;AAU3B,eAAeA,aAAaC,OAAsB;IACvD,MAAM,EAAEC,SAAS,gBAAgB,EAAEC,UAAU,CAAC,EAAEC,KAAK,EAAE,GAAGH;IAE1D,MAAM,EAAEI,IAAI,EAAEC,IAAI,EAAE,GAAGC,IAAAA,oCAAiB,EAACL;IAEzC,MAAMM,SAASC,IAAAA,eAAY;IAC3BR,QAAQS,QAAQ,GAAGT,QAAQS,QAAQ,IAAI;IACvCT,QAAQU,OAAO,GAAGV,QAAQU,OAAO,IAAI;IACrCV,QAAQW,QAAQ,GAAGX,QAAQW,QAAQ,IAAI;IACvCC,IAAAA,wCAAmB,EAACL,QAAQP;IAE5BO,OAAOM,IAAI,CAAC,CAAC,0BAA0B,EAAET,KAAK,CAAC,EAAEC,MAAM;IAEvD,MAAMS,kBAAkB,IAAIC;IAE5B,MAAMC,cAAc,MAAMC,IAAAA,8BAAiB,EAAC;QAC1CC,KAAKC,QAAQD,GAAG;QAChBE,gBAAgB;YACdN;YACAO,qBAAqB,IAAMC,WAAWf,QAAQL,SAASY,iBAAiBS;YACxEC,gBAAgBC;QAClB;QACAlB;QACAmB,aAAa1B,QAAQ0B,WAAW;QAChCvB;IACF;IACA,MAAMoB,aAAa,MAAMI,IAAAA,iBAAY,EAACX,aAAaF;IAEnD,MAAMS,WAAWK,MAAM,CAAC;QAAExB;QAAMC;IAAK;IACrCE,OAAOM,IAAI,CAAC,CAAC,2BAA2B,EAAET,KAAK,CAAC,EAAEC,KAAK,aAAa,EAAEH,QAAQ,QAAQ,CAAC;AACzF;AAEA,IAAI2B;AACJ,SAASP,WAAWf,MAAc,EAAEL,OAAe,EAAEY,eAAgC,EAAEb,MAAW;IAChGwB;IAEAI,gBAAgBC,WAAWC,UAAU,CAAC;QACpCxB,OAAOM,IAAI,CAAC,CAAC,uBAAuB,EAAEX,QAAQ,QAAQ,CAAC;QACvDY,gBAAgBkB,KAAK;QACrB/B,OAAOgC,KAAK;IACd,GAAG/B,UAAU;AACf;AAEA,SAASuB;IACP,IAAII,eAAe;QACjBC,WAAWI,YAAY,CAACL;IAC1B;AACF"}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import type { Logger } from "@lage-run/logger";
3
- import type { ILageService } from "@lage-run/rpc";
3
+ import { type ILageService } from "@lage-run/rpc";
4
4
  interface ServiceControls {
5
5
  abortController: AbortController;
6
6
  countdownToShutdown: () => void;
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "createLageService", {
9
9
  }
10
10
  });
11
11
  const _config = require("@lage-run/config");
12
+ const _rpc = require("@lage-run/rpc");
12
13
  const _targetgraph = require("@lage-run/target-graph");
13
14
  const _workspacetools = require("workspace-tools");
14
15
  const _createTargetGraph = require("../run/createTargetGraph.js");
@@ -20,6 +21,13 @@ const _MemoryStream = require("./MemoryStream.js");
20
21
  const _runnerPickerOptions = require("../../runnerPickerOptions.js");
21
22
  const _filterPipelineDefinitions = require("../run/filterPipelineDefinitions.js");
22
23
  const _formathrtime = require("@lage-run/format-hrtime");
24
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
25
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
26
+ function _interop_require_default(obj) {
27
+ return obj && obj.__esModule ? obj : {
28
+ default: obj
29
+ };
30
+ }
23
31
  let initializedPromise;
24
32
  function formatBytes(bytes) {
25
33
  return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
@@ -34,6 +42,7 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
34
42
  logger.info(`Initializing with ${maxWorkers} workers, tasks: ${tasks.join(", ")}`);
35
43
  const { pipeline } = config;
36
44
  const packageInfos = (0, _workspacetools.getPackageInfos)(root);
45
+ logger.info("Initializing target graph");
37
46
  const targetGraph = await (0, _createTargetGraph.createTargetGraph)({
38
47
  logger,
39
48
  root,
@@ -49,17 +58,18 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
49
58
  packageInfos,
50
59
  priorities: config.priorities
51
60
  });
52
- const dependencyMap = (0, _workspacetools.createDependencyMap)(packageInfos, {
53
- withDevDependencies: true,
54
- withPeerDependencies: false
55
- });
56
- const packageTree = new _hasher.PackageTree({
61
+ const targetHasher = new _hasher.TargetHasher({
57
62
  root,
58
- packageInfos,
59
- includeUntracked: true
63
+ environmentGlob: config.cacheOptions?.environmentGlob ?? [],
64
+ logger,
65
+ cacheKey: config.cacheOptions?.cacheKey,
66
+ cliArgs: taskArgs
60
67
  });
61
- logger.info("Initializing Package Tree");
62
- await packageTree.initialize();
68
+ logger.info("Initializing hasher");
69
+ await targetHasher.initialize();
70
+ logger.info("Initializing dependency map");
71
+ const packageTree = targetHasher.packageTree;
72
+ const dependencyMap = targetHasher.dependencyMap;
63
73
  const filteredPipeline = (0, _filterPipelineDefinitions.filterPipelineDefinitions)(targetGraph.targets.values(), config.pipeline);
64
74
  logger.info("Initializing Pool");
65
75
  const pool = new _workerthreadspool.AggregatedPool({
@@ -94,6 +104,13 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
94
104
  logger.info("All workers are idle, shutting down after timeout");
95
105
  serverControls.countdownToShutdown();
96
106
  });
107
+ const globalInputs = config.cacheOptions?.environmentGlob ? (0, _globby.glob)(config.cacheOptions?.environmentGlob, {
108
+ cwd: root,
109
+ gitignore: true
110
+ }) : [
111
+ "lage.config.js"
112
+ ];
113
+ logger.info(`Environment glob inputs: \n${JSON.stringify(globalInputs)}\n-------`);
97
114
  logger.info("done initializing");
98
115
  return {
99
116
  config,
@@ -101,7 +118,9 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
101
118
  packageTree,
102
119
  dependencyMap,
103
120
  root,
104
- pool
121
+ pool,
122
+ globalInputs,
123
+ targetHasher
105
124
  };
106
125
  }
107
126
  /**
@@ -113,6 +132,9 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
113
132
  initializedPromise = createInitializedPromise(options);
114
133
  return initializedPromise;
115
134
  }
135
+ function getHashFilePath(target) {
136
+ return _path.default.join(`node_modules/.lage/hash_${target.task}`);
137
+ }
116
138
  async function createLageService({ cwd, serverControls, logger, concurrency, tasks }) {
117
139
  return {
118
140
  async ping () {
@@ -128,7 +150,7 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
128
150
  // THIS IS A BIG ASSUMPTION; TODO: memoize based on the parameters of the initialize() call
129
151
  // The first request sets up the nodeArg and taskArgs - we are assuming that all requests to run this target are coming from the same
130
152
  // `lage info` call
131
- const { config, targetGraph, dependencyMap, packageTree, root, pool } = await initialize({
153
+ const { config, targetGraph, dependencyMap, packageTree, root, pool, globalInputs, targetHasher } = await initialize({
132
154
  cwd,
133
155
  logger,
134
156
  nodeArg: request.nodeOptions,
@@ -147,6 +169,7 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
147
169
  exitCode: 1
148
170
  };
149
171
  }
172
+ logger.info(`Running target: ${request.packageName}#${request.task}`);
150
173
  const target = targetGraph.targets.get(id);
151
174
  const task = {
152
175
  target,
@@ -170,31 +193,31 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
170
193
  status: "queued",
171
194
  threadId: 0
172
195
  };
173
- const globalInputs = target.environmentGlob ? (0, _globby.glob)(target.environmentGlob, {
174
- cwd: root,
175
- gitignore: true
176
- }) : config.cacheOptions?.environmentGlob ? (0, _globby.glob)(config.cacheOptions?.environmentGlob, {
196
+ const targetGlobalInputs = target.environmentGlob ? (0, _globby.glob)(target.environmentGlob, {
177
197
  cwd: root,
178
198
  gitignore: true
179
- }) : [
180
- "lage.config.js"
181
- ];
182
- const inputsSet = new Set((0, _hasher.getInputFiles)(target, dependencyMap, packageTree) ?? []);
183
- for (const globalInput of globalInputs){
184
- inputsSet.add(globalInput);
185
- }
186
- for (const dependency of target.dependencies){
187
- if (dependency === (0, _targetgraph.getStartTargetId)()) {
199
+ }) : globalInputs;
200
+ let results;
201
+ const inputs = (0, _hasher.getInputFiles)(target, dependencyMap, packageTree);
202
+ for (const dep of target.dependencies){
203
+ if (dep === (0, _targetgraph.getStartTargetId)()) {
188
204
  continue;
189
205
  }
190
- const depTarget = targetGraph.targets.get(dependency);
191
- const depInputs = (0, _hasher.getInputFiles)(depTarget, dependencyMap, packageTree);
192
- if (depInputs) {
193
- depInputs.forEach((file)=>inputsSet.add(file));
206
+ const depTarget = targetGraph.targets.get(dep);
207
+ inputs.push(_path.default.join(_path.default.relative(root, depTarget.cwd), getHashFilePath(depTarget)).replace(/\\/g, "/"));
208
+ }
209
+ const targetHashFile = getHashFilePath(target);
210
+ const targetHashFullPath = _path.default.join(target.cwd, targetHashFile);
211
+ try {
212
+ if (!_fs.default.existsSync(_path.default.dirname(targetHashFullPath))) {
213
+ _fs.default.mkdirSync(_path.default.dirname(targetHashFullPath), {
214
+ recursive: true
215
+ });
194
216
  }
217
+ _fs.default.writeFileSync(targetHashFullPath, await targetHasher.hash(target));
218
+ } catch (e) {
219
+ throw new _rpc.ConnectError(`Error writing target hash file: ${targetHashFullPath}`, _rpc.Code.Internal);
195
220
  }
196
- const inputs = Array.from(inputsSet);
197
- let results;
198
221
  try {
199
222
  await pool.exec(task, 0, (worker, stdout, stderr)=>{
200
223
  logger.info(`[${worker.threadId}] ${request.packageName}#${request.task} start`);
@@ -217,6 +240,7 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
217
240
  pipedStderr.unpipe(writableStderr);
218
241
  });
219
242
  const outputs = (0, _getOutputFiles.getOutputFiles)(root, target, config.cacheOptions?.outputGlob, packageTree);
243
+ outputs.push(targetHashFile);
220
244
  results = {
221
245
  packageName: request.packageName,
222
246
  task: request.task,
@@ -225,10 +249,14 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
225
249
  outputs,
226
250
  stdout: writableStdout.toString(),
227
251
  stderr: writableStderr.toString(),
228
- id
252
+ id,
253
+ globalInputs: targetGlobalInputs
229
254
  };
230
255
  } catch (e) {
231
256
  const outputs = (0, _getOutputFiles.getOutputFiles)(root, target, config.cacheOptions?.outputGlob, packageTree);
257
+ outputs.push(targetHashFile);
258
+ targetRun.status = "failed";
259
+ targetRun.duration = (0, _formathrtime.hrtimeDiff)(targetRun.startTime, process.hrtime());
232
260
  results = {
233
261
  packageName: request.packageName,
234
262
  task: request.task,
@@ -237,10 +265,19 @@ async function createLageService({ cwd, serverControls, logger, concurrency, tas
237
265
  outputs,
238
266
  stdout: "",
239
267
  stderr: e instanceof Error ? e.toString() : "",
240
- id
268
+ id,
269
+ globalInputs: targetGlobalInputs
241
270
  };
242
271
  }
243
- logger.info(`${request.packageName}#${request.task} results: \n${JSON.stringify(results, null, 2)}\n------`, results);
272
+ logger.info(`${request.packageName}#${request.task} results: \n${JSON.stringify({
273
+ packageName: results.packageName,
274
+ task: results.task,
275
+ exitCode: results.exitCode,
276
+ inputs: results.inputs,
277
+ outputs: results.outputs,
278
+ id: results.id,
279
+ globalInputs: `(${target.environmentGlob ? "custom target env glob used" : "general global inputs used"}): ${results.globalInputs.length} files`
280
+ }, null, 2)}\n------`, results);
244
281
  return results;
245
282
  }
246
283
  };
@@ -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 type { ILageService } from \"@lage-run/rpc\";\nimport { getStartTargetId, getTargetId, 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, PackageTree } from \"@lage-run/hasher\";\nimport { createDependencyMap } from \"workspace-tools\";\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\";\n\ninterface LageServiceContext {\n config: ConfigOptions;\n targetGraph: TargetGraph;\n packageTree: PackageTree;\n dependencyMap: DependencyMap;\n root: string;\n pool: Pool;\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 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 dependencyMap = createDependencyMap(packageInfos, { withDevDependencies: true, withPeerDependencies: false });\n const packageTree = new PackageTree({\n root,\n packageInfos,\n includeUntracked: true,\n });\n\n logger.info(\"Initializing Package Tree\");\n await packageTree.initialize();\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 logger.info(\"done initializing\");\n return { config, targetGraph, packageTree, dependencyMap, root, pool };\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 } = 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 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 globalInputs = target.environmentGlob\n ? glob(target.environmentGlob, { cwd: root, gitignore: true })\n : config.cacheOptions?.environmentGlob\n ? glob(config.cacheOptions?.environmentGlob, { cwd: root, gitignore: true })\n : [\"lage.config.js\"];\n\n const inputsSet = new Set<string>(getInputFiles(target, dependencyMap, packageTree) ?? []);\n\n for (const globalInput of globalInputs) {\n inputsSet.add(globalInput);\n }\n\n for (const dependency of target.dependencies) {\n if (dependency === getStartTargetId()) {\n continue;\n }\n\n const depTarget = targetGraph.targets.get(dependency)!;\n const depInputs = getInputFiles(depTarget, dependencyMap, packageTree);\n if (depInputs) {\n depInputs.forEach((file) => inputsSet.add(file));\n }\n }\n\n const inputs = Array.from(inputsSet);\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 };\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\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 };\n } catch (e) {\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\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 };\n }\n\n logger.info(`${request.packageName}#${request.task} results: \\n${JSON.stringify(results, null, 2)}\\n------`, results);\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","dependencyMap","createDependencyMap","withDevDependencies","withPeerDependencies","packageTree","PackageTree","includeUntracked","initialize","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","globalInputs","environmentGlob","glob","gitignore","inputsSet","Set","getInputFiles","globalInput","add","dependency","getStartTargetId","depTarget","depInputs","forEach","file","inputs","Array","from","results","exec","worker","pipe","memoryUsage","rss","heapTotal","heapUsed","hrtimeDiff","formatDuration","hrToSeconds","unpipe","getOutputFiles","toString","e","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 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 outputs.push(targetHashFile);\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 outputs.push(targetHashFile);\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","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.25.2",
3
+ "version": "0.25.4",
4
4
  "description": "Command Line Interface for Lage",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,7 +28,7 @@
28
28
  "@lage-run/hasher": "^1.6.9",
29
29
  "@lage-run/logger": "^1.3.1",
30
30
  "@lage-run/reporters": "^1.2.19",
31
- "@lage-run/rpc": "^1.2.3",
31
+ "@lage-run/rpc": "^1.2.5",
32
32
  "@lage-run/runners": "^1.2.1",
33
33
  "@lage-run/scheduler": "^1.5.1",
34
34
  "@lage-run/scheduler-types": "^0.3.23",