@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 +28 -1
- package/CHANGELOG.md +12 -2
- package/lib/commands/exec/executeRemotely.js +4 -1
- package/lib/commands/exec/executeRemotely.js.map +1 -1
- package/lib/commands/exec/simulateFileAccess.js +12 -4
- package/lib/commands/exec/simulateFileAccess.js.map +1 -1
- package/lib/commands/server/action.js +1 -1
- package/lib/commands/server/action.js.map +1 -1
- package/lib/commands/server/lageService.d.ts +1 -1
- package/lib/commands/server/lageService.js +70 -33
- package/lib/commands/server/lageService.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,34 @@
|
|
|
2
2
|
"name": "@lage-run/cli",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "
|
|
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
|
|
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:
|
|
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,
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
|
|
32
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
53
|
-
withDevDependencies: true,
|
|
54
|
-
withPeerDependencies: false
|
|
55
|
-
});
|
|
56
|
-
const packageTree = new _hasher.PackageTree({
|
|
61
|
+
const targetHasher = new _hasher.TargetHasher({
|
|
57
62
|
root,
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
environmentGlob: config.cacheOptions?.environmentGlob ?? [],
|
|
64
|
+
logger,
|
|
65
|
+
cacheKey: config.cacheOptions?.cacheKey,
|
|
66
|
+
cliArgs: taskArgs
|
|
60
67
|
});
|
|
61
|
-
logger.info("Initializing
|
|
62
|
-
await
|
|
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
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
|
|
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(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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(
|
|
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.
|
|
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.
|
|
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",
|