@lage-run/cli 0.34.1 → 0.35.0
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/lib/commands/exec/executeRemotely.js +1 -1
- package/lib/commands/exec/executeRemotely.js.map +1 -1
- package/lib/commands/exec/simulateFileAccess.d.ts +1 -1
- package/lib/commands/exec/simulateFileAccess.js +1 -1
- package/lib/commands/exec/simulateFileAccess.js.map +1 -1
- package/lib/commands/launchServerInBackground.js +1 -1
- package/lib/commands/launchServerInBackground.js.map +1 -1
- package/lib/commands/run/createTargetGraph.js +2 -2
- package/lib/commands/run/createTargetGraph.js.map +1 -1
- package/lib/commands/run/index.js +2 -2
- package/lib/commands/run/index.js.map +1 -1
- package/lib/commands/run/watchAction.js +6 -4
- package/lib/commands/run/watchAction.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/getOutputFiles.js +2 -1
- package/lib/commands/server/getOutputFiles.js.map +1 -1
- package/lib/commands/server/lageService.d.ts +1 -1
- package/lib/commands/server/lageService.js +2 -1
- package/lib/commands/server/lageService.js.map +1 -1
- package/lib/commands/server/singleTargetWorker.js +17 -19
- package/lib/commands/server/singleTargetWorker.js.map +1 -1
- package/package.json +13 -13
|
@@ -130,7 +130,7 @@ async function executeRemotely(options, command) {
|
|
|
130
130
|
process.exitCode = response.exitCode;
|
|
131
131
|
// we will simulate file access even if exit code may be non-zero
|
|
132
132
|
const relativeGlobalInputsForTarget = _path.default.relative(root, _path.default.join(response.cwd, response.globalInputHashFile));
|
|
133
|
-
|
|
133
|
+
(0, _simulateFileAccess.simulateFileAccess)(logger, root, [
|
|
134
134
|
...response.inputs,
|
|
135
135
|
relativeGlobalInputsForTarget
|
|
136
136
|
], response.outputs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/exec/executeRemotely.ts"],"sourcesContent":["import path from \"path\";\nimport 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 { getConfig } from \"@lage-run/config\";\nimport { getWorkspaceManagerRoot } 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): Promise<void> {\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 const cwd = options.cwd ?? process.cwd();\n const root = getWorkspaceManagerRoot(cwd) ?? cwd;\n const config = await getConfig(cwd);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.reporter = options.reporter ?? \"json\";\n await initializeReporters(logger, options, { customReporters: config.reporters, root });\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 const relativeGlobalInputsForTarget = path.relative(root, path.join(response.cwd, response.globalInputHashFile));\n
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/exec/executeRemotely.ts"],"sourcesContent":["import path from \"path\";\nimport 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 { getConfig } from \"@lage-run/config\";\nimport { getWorkspaceManagerRoot } 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): Promise<void> {\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 const cwd = options.cwd ?? process.cwd();\n const root = getWorkspaceManagerRoot(cwd) ?? cwd;\n const config = await getConfig(cwd);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.reporter = options.reporter ?? \"json\";\n await initializeReporters(logger, options, { customReporters: config.reporters, root });\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 const relativeGlobalInputsForTarget = path.relative(root, path.join(response.cwd, response.globalInputHashFile));\n simulateFileAccess(logger, root, [...response.inputs, relativeGlobalInputsForTarget], 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","cwd","process","root","getWorkspaceManagerRoot","config","getConfig","createLogger","logLevel","reporter","initializeReporters","customReporters","reporters","join","launchServerInBackground","stdout","write","stderr","relativeGlobalInputsForTarget","path","relative","globalInputHashFile","simulateFileAccess","inputs","outputs"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { Logger } from "@lage-run/logger";
|
|
2
|
-
export declare function simulateFileAccess(logger: Logger, root: string, inputs: string[], outputs: string[]):
|
|
2
|
+
export declare function simulateFileAccess(logger: Logger, root: string, inputs: string[], outputs: string[]): void;
|
|
@@ -15,7 +15,7 @@ function _interop_require_default(obj) {
|
|
|
15
15
|
default: obj
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
function simulateFileAccess(logger, root, inputs, outputs) {
|
|
19
19
|
logger.silly("Now probing and touching inputs and outputs");
|
|
20
20
|
// Helper to get all directory parts up to root
|
|
21
21
|
const getAllDirectoryParts = (filePath)=>{
|
|
@@ -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\";\n\nexport
|
|
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\";\n\nexport function simulateFileAccess(logger: Logger, root: string, inputs: string[], outputs: string[]): void {\n logger.silly(\"Now probing and touching inputs and outputs\");\n\n // Helper to get all directory parts up to root\n const getAllDirectoryParts = (filePath: string): string[] => {\n const parts: string[] = [];\n let dirPath = path.dirname(filePath);\n\n while (dirPath !== \".\" && dirPath !== \"\") {\n parts.push(dirPath);\n dirPath = path.dirname(dirPath);\n }\n\n return parts;\n };\n\n const inputDirectories = new Set<string>();\n\n // read input files\n let fd: number;\n const buffer: Buffer = Buffer.alloc(1);\n for (const input of inputs) {\n try {\n const inputPath = path.join(root, input);\n if (!fs.lstatSync(inputPath).isDirectory()) {\n fd = fs.openSync(inputPath, \"r\");\n // Simulate a file content read by reading 1 byte of the opened file handle\n fs.readSync(fd, buffer, 0, 1, 0);\n fs.closeSync(fd);\n } else {\n inputDirectories.add(input);\n }\n } catch (e) {\n // ignore\n }\n\n // Add all directory parts to the set\n getAllDirectoryParts(input).forEach((dir) => inputDirectories.add(dir));\n }\n\n for (const directory of inputDirectories) {\n try {\n // Simulate enumerating a directory\n fs.readdirSync(path.join(root, directory));\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 // Add all directory parts to the set\n getAllDirectoryParts(output).forEach((dir) => outputDirectories.add(dir));\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","root","inputs","outputs","silly","getAllDirectoryParts","filePath","parts","dirPath","path","dirname","push","inputDirectories","Set","fd","buffer","Buffer","alloc","input","inputPath","join","fs","lstatSync","isDirectory","openSync","readSync","closeSync","add","e","forEach","dir","directory","readdirSync","time","Date","outputDirectories","output","utimesSync"],"mappings":";;;;+BAIgBA;;;eAAAA;;;6DAHC;2DACF;;;;;;AAER,SAASA,mBAAmBC,MAAc,EAAEC,IAAY,EAAEC,MAAgB,EAAEC,OAAiB;IAClGH,OAAOI,KAAK,CAAC;IAEb,+CAA+C;IAC/C,MAAMC,uBAAuB,CAACC;QAC5B,MAAMC,QAAkB,EAAE;QAC1B,IAAIC,UAAUC,aAAI,CAACC,OAAO,CAACJ;QAE3B,MAAOE,YAAY,OAAOA,YAAY,GAAI;YACxCD,MAAMI,IAAI,CAACH;YACXA,UAAUC,aAAI,CAACC,OAAO,CAACF;QACzB;QAEA,OAAOD;IACT;IAEA,MAAMK,mBAAmB,IAAIC;IAE7B,mBAAmB;IACnB,IAAIC;IACJ,MAAMC,SAAiBC,OAAOC,KAAK,CAAC;IACpC,KAAK,MAAMC,SAAShB,OAAQ;QAC1B,IAAI;YACF,MAAMiB,YAAYV,aAAI,CAACW,IAAI,CAACnB,MAAMiB;YAClC,IAAI,CAACG,WAAE,CAACC,SAAS,CAACH,WAAWI,WAAW,IAAI;gBAC1CT,KAAKO,WAAE,CAACG,QAAQ,CAACL,WAAW;gBAC5B,2EAA2E;gBAC3EE,WAAE,CAACI,QAAQ,CAACX,IAAIC,QAAQ,GAAG,GAAG;gBAC9BM,WAAE,CAACK,SAAS,CAACZ;YACf,OAAO;gBACLF,iBAAiBe,GAAG,CAACT;YACvB;QACF,EAAE,OAAOU,GAAG;QACV,SAAS;QACX;QAEA,qCAAqC;QACrCvB,qBAAqBa,OAAOW,OAAO,CAAC,CAACC,MAAQlB,iBAAiBe,GAAG,CAACG;IACpE;IAEA,KAAK,MAAMC,aAAanB,iBAAkB;QACxC,IAAI;YACF,mCAAmC;YACnCS,WAAE,CAACW,WAAW,CAACvB,aAAI,CAACW,IAAI,CAACnB,MAAM8B;QACjC,EAAE,OAAOH,GAAG;QACV,SAAS;QACX;IACF;IAEA,qBAAqB;IACrB,MAAMK,OAAO,IAAIC;IACjB,MAAMC,oBAAoB,IAAItB;IAC9B,KAAK,MAAMuB,UAAUjC,QAAS;QAC5B,qCAAqC;QACrCE,qBAAqB+B,QAAQP,OAAO,CAAC,CAACC,MAAQK,kBAAkBR,GAAG,CAACG;QAEpE,IAAI;YACFT,WAAE,CAACgB,UAAU,CAAC5B,aAAI,CAACW,IAAI,CAACnB,MAAMmC,SAASH,MAAMA;QAC/C,EAAE,OAAOL,GAAG;QACV,SAAS;QACX;IACF;IAEA,KAAK,MAAMG,aAAaI,kBAAmB;QACzC,IAAI;YACFd,WAAE,CAACgB,UAAU,CAAC5B,aAAI,CAACW,IAAI,CAACnB,MAAM8B,YAAYE,MAAMA;QAClD,EAAE,OAAOL,GAAG;QACV,SAAS;QACX;IACF;AACF"}
|
|
@@ -67,7 +67,7 @@ async function launchServerInBackground({ logger, root, host, port, tasks, timeo
|
|
|
67
67
|
stdio: "ignore",
|
|
68
68
|
maxBuffer: 1024 * 1024 * 100
|
|
69
69
|
});
|
|
70
|
-
if (child
|
|
70
|
+
if (child.pid) {
|
|
71
71
|
_fs.default.writeFileSync(lockfilePath, child.pid.toString());
|
|
72
72
|
}
|
|
73
73
|
child.unref();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/launchServerInBackground.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport lockfile from \"proper-lockfile\";\nimport execa from \"execa\";\nimport { getBinScripts } from \"../getBinPaths.js\";\n\nexport interface LaunchServerInBackgroundOptions {\n logger: Logger;\n root: string;\n host: string;\n port: number;\n tasks: string[];\n timeout: number;\n args: string[];\n nodeArg?: string;\n}\n\nexport async function launchServerInBackground({\n logger,\n root,\n host,\n port,\n tasks,\n timeout,\n args,\n nodeArg,\n}: LaunchServerInBackgroundOptions): Promise<void> {\n const lockfilePath = path.join(root, `node_modules/.cache/lage/.lage-server-${host}-${port}.pid`);\n\n logger.info(`Starting server on http://${host}:${port}`);\n logger.info(`acquiring lock: ${lockfilePath}`);\n\n ensurePidFile(lockfilePath);\n\n const releaseLock = await lockfile.lock(lockfilePath, {\n stale: 1000 * 60 * 1,\n retries: {\n retries: 10,\n factor: 3,\n minTimeout: 0.5 * 1000,\n maxTimeout: 60 * 1000,\n randomize: true,\n },\n });\n\n const pid = parseInt(fs.readFileSync(lockfilePath, \"utf-8\"));\n const isServerRunning = pid && isAlive(pid);\n logger.info(\"Checking if server is already running\", { pid, isServerRunning });\n if (pid && isServerRunning) {\n logger.info(\"Server already running\", { pid });\n } else {\n const binScripts = getBinScripts();\n\n const lageServerBinPath = binScripts[\"lage-server\"];\n const lageServerArgs = [\n ...(nodeArg ? [\"--node-arg\", nodeArg] : []),\n lageServerBinPath,\n \"--tasks\",\n ...tasks,\n \"--server\",\n `${host}:${port}`,\n \"--timeout\",\n `${timeout}`,\n ...args,\n ];\n\n logger.info(`Launching lage-server with these parameters: ${lageServerArgs.join(\" \")}`);\n const child = execa(\"node\", lageServerArgs, {\n cwd: root,\n detached: true,\n stdio: \"ignore\",\n maxBuffer: 1024 * 1024 * 100,\n });\n\n if (child
|
|
1
|
+
{"version":3,"sources":["../../src/commands/launchServerInBackground.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport lockfile from \"proper-lockfile\";\nimport execa from \"execa\";\nimport { getBinScripts } from \"../getBinPaths.js\";\n\nexport interface LaunchServerInBackgroundOptions {\n logger: Logger;\n root: string;\n host: string;\n port: number;\n tasks: string[];\n timeout: number;\n args: string[];\n nodeArg?: string;\n}\n\nexport async function launchServerInBackground({\n logger,\n root,\n host,\n port,\n tasks,\n timeout,\n args,\n nodeArg,\n}: LaunchServerInBackgroundOptions): Promise<void> {\n const lockfilePath = path.join(root, `node_modules/.cache/lage/.lage-server-${host}-${port}.pid`);\n\n logger.info(`Starting server on http://${host}:${port}`);\n logger.info(`acquiring lock: ${lockfilePath}`);\n\n ensurePidFile(lockfilePath);\n\n const releaseLock = await lockfile.lock(lockfilePath, {\n stale: 1000 * 60 * 1,\n retries: {\n retries: 10,\n factor: 3,\n minTimeout: 0.5 * 1000,\n maxTimeout: 60 * 1000,\n randomize: true,\n },\n });\n\n const pid = parseInt(fs.readFileSync(lockfilePath, \"utf-8\"));\n const isServerRunning = pid && isAlive(pid);\n logger.info(\"Checking if server is already running\", { pid, isServerRunning });\n if (pid && isServerRunning) {\n logger.info(\"Server already running\", { pid });\n } else {\n const binScripts = getBinScripts();\n\n const lageServerBinPath = binScripts[\"lage-server\"];\n const lageServerArgs = [\n ...(nodeArg ? [\"--node-arg\", nodeArg] : []),\n lageServerBinPath,\n \"--tasks\",\n ...tasks,\n \"--server\",\n `${host}:${port}`,\n \"--timeout\",\n `${timeout}`,\n ...args,\n ];\n\n logger.info(`Launching lage-server with these parameters: ${lageServerArgs.join(\" \")}`);\n const child = execa(\"node\", lageServerArgs, {\n cwd: root,\n detached: true,\n stdio: \"ignore\",\n maxBuffer: 1024 * 1024 * 100,\n });\n\n if (child.pid) {\n fs.writeFileSync(lockfilePath, child.pid.toString());\n }\n\n child.unref();\n logger.info(\"Server started\", { pid: child.pid });\n }\n\n await releaseLock();\n}\n\nfunction ensurePidFile(lockfilePath: string) {\n if (!fs.existsSync(path.dirname(lockfilePath))) {\n fs.mkdirSync(path.dirname(lockfilePath), { recursive: true });\n }\n\n if (!fs.existsSync(lockfilePath)) {\n try {\n const fd = fs.openSync(lockfilePath, \"w\");\n fs.closeSync(fd);\n } catch {\n // ignore\n }\n }\n}\n\nfunction isAlive(pid: number) {\n try {\n return process.kill(pid, 0);\n } catch {\n return false;\n }\n}\n"],"names":["launchServerInBackground","logger","root","host","port","tasks","timeout","args","nodeArg","lockfilePath","path","join","info","ensurePidFile","releaseLock","lockfile","lock","stale","retries","factor","minTimeout","maxTimeout","randomize","pid","parseInt","fs","readFileSync","isServerRunning","isAlive","binScripts","getBinScripts","lageServerBinPath","lageServerArgs","child","execa","cwd","detached","stdio","maxBuffer","writeFileSync","toString","unref","existsSync","dirname","mkdirSync","recursive","fd","openSync","closeSync","process","kill"],"mappings":";;;;+BAkBsBA;;;eAAAA;;;2DAjBP;6DACE;uEACI;8DACH;6BACY;;;;;;AAavB,eAAeA,yBAAyB,EAC7CC,MAAM,EACNC,IAAI,EACJC,IAAI,EACJC,IAAI,EACJC,KAAK,EACLC,OAAO,EACPC,IAAI,EACJC,OAAO,EACyB;IAChC,MAAMC,eAAeC,aAAI,CAACC,IAAI,CAACT,MAAM,CAAC,sCAAsC,EAAEC,KAAK,CAAC,EAAEC,KAAK,IAAI,CAAC;IAEhGH,OAAOW,IAAI,CAAC,CAAC,0BAA0B,EAAET,KAAK,CAAC,EAAEC,MAAM;IACvDH,OAAOW,IAAI,CAAC,CAAC,gBAAgB,EAAEH,cAAc;IAE7CI,cAAcJ;IAEd,MAAMK,cAAc,MAAMC,uBAAQ,CAACC,IAAI,CAACP,cAAc;QACpDQ,OAAO,OAAO,KAAK;QACnBC,SAAS;YACPA,SAAS;YACTC,QAAQ;YACRC,YAAY,MAAM;YAClBC,YAAY,KAAK;YACjBC,WAAW;QACb;IACF;IAEA,MAAMC,MAAMC,SAASC,WAAE,CAACC,YAAY,CAACjB,cAAc;IACnD,MAAMkB,kBAAkBJ,OAAOK,QAAQL;IACvCtB,OAAOW,IAAI,CAAC,yCAAyC;QAAEW;QAAKI;IAAgB;IAC5E,IAAIJ,OAAOI,iBAAiB;QAC1B1B,OAAOW,IAAI,CAAC,0BAA0B;YAAEW;QAAI;IAC9C,OAAO;QACL,MAAMM,aAAaC,IAAAA,0BAAa;QAEhC,MAAMC,oBAAoBF,UAAU,CAAC,cAAc;QACnD,MAAMG,iBAAiB;eACjBxB,UAAU;gBAAC;gBAAcA;aAAQ,GAAG,EAAE;YAC1CuB;YACA;eACG1B;YACH;YACA,GAAGF,KAAK,CAAC,EAAEC,MAAM;YACjB;YACA,GAAGE,SAAS;eACTC;SACJ;QAEDN,OAAOW,IAAI,CAAC,CAAC,6CAA6C,EAAEoB,eAAerB,IAAI,CAAC,MAAM;QACtF,MAAMsB,QAAQC,IAAAA,cAAK,EAAC,QAAQF,gBAAgB;YAC1CG,KAAKjC;YACLkC,UAAU;YACVC,OAAO;YACPC,WAAW,OAAO,OAAO;QAC3B;QAEA,IAAIL,MAAMV,GAAG,EAAE;YACbE,WAAE,CAACc,aAAa,CAAC9B,cAAcwB,MAAMV,GAAG,CAACiB,QAAQ;QACnD;QAEAP,MAAMQ,KAAK;QACXxC,OAAOW,IAAI,CAAC,kBAAkB;YAAEW,KAAKU,MAAMV,GAAG;QAAC;IACjD;IAEA,MAAMT;AACR;AAEA,SAASD,cAAcJ,YAAoB;IACzC,IAAI,CAACgB,WAAE,CAACiB,UAAU,CAAChC,aAAI,CAACiC,OAAO,CAAClC,gBAAgB;QAC9CgB,WAAE,CAACmB,SAAS,CAAClC,aAAI,CAACiC,OAAO,CAAClC,eAAe;YAAEoC,WAAW;QAAK;IAC7D;IAEA,IAAI,CAACpB,WAAE,CAACiB,UAAU,CAACjC,eAAe;QAChC,IAAI;YACF,MAAMqC,KAAKrB,WAAE,CAACsB,QAAQ,CAACtC,cAAc;YACrCgB,WAAE,CAACuB,SAAS,CAACF;QACf,EAAE,OAAM;QACN,SAAS;QACX;IACF;AACF;AAEA,SAASlB,QAAQL,GAAW;IAC1B,IAAI;QACF,OAAO0B,QAAQC,IAAI,CAAC3B,KAAK;IAC3B,EAAE,OAAM;QACN,OAAO;IACT;AACF"}
|
|
@@ -89,14 +89,14 @@ async function createTargetGraph(options) {
|
|
|
89
89
|
}
|
|
90
90
|
for (const [id, definition] of pipelineEntries){
|
|
91
91
|
if (Array.isArray(definition)) {
|
|
92
|
-
|
|
92
|
+
builder.addTargetConfig(id, {
|
|
93
93
|
cache: true,
|
|
94
94
|
dependsOn: definition,
|
|
95
95
|
options: {},
|
|
96
96
|
outputs
|
|
97
97
|
}, changedFiles);
|
|
98
98
|
} else {
|
|
99
|
-
|
|
99
|
+
builder.addTargetConfig(id, definition, changedFiles);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
return await builder.build(tasks, packages, priorities);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/run/createTargetGraph.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport { type Priority, type TargetGraph, WorkspaceTargetGraphBuilder } from \"@lage-run/target-graph\";\nimport type { PackageInfos } from \"workspace-tools\";\nimport { getBranchChanges, getDefaultRemoteBranch, getStagedChanges, getUnstagedChanges, getUntrackedChanges } from \"workspace-tools\";\nimport { getFilteredPackages } from \"../../filter/getFilteredPackages.js\";\nimport type { PipelineDefinition } from \"@lage-run/config\";\nimport { hasRepoChanged } from \"../../filter/hasRepoChanged.js\";\n\ninterface CreateTargetGraphOptions {\n logger: Logger;\n root: string;\n dependencies: boolean;\n dependents: boolean;\n since?: string;\n scope?: string[];\n ignore: string[];\n repoWideChanges: string[];\n pipeline: PipelineDefinition;\n outputs: string[];\n tasks: string[];\n packageInfos: PackageInfos;\n priorities: Priority[];\n enableTargetConfigMerging: boolean;\n enablePhantomTargetOptimization: boolean;\n}\n\nfunction getChangedFiles(since: string, cwd: string) {\n const targetBranch = since || getDefaultRemoteBranch({ cwd });\n\n return [\n ...new Set([\n ...(getUntrackedChanges({ cwd }) || []),\n ...(getUnstagedChanges({ cwd }) || []),\n ...(getBranchChanges({ branch: targetBranch, cwd }) || []),\n ...(getStagedChanges({ cwd }) || []),\n ]),\n ];\n}\n\nexport async function createTargetGraph(options: CreateTargetGraphOptions): Promise<TargetGraph> {\n const {\n logger,\n root,\n dependencies,\n dependents,\n enableTargetConfigMerging,\n enablePhantomTargetOptimization,\n since,\n scope,\n repoWideChanges,\n ignore,\n pipeline,\n outputs,\n tasks,\n packageInfos,\n priorities,\n } = options;\n\n const builder = new WorkspaceTargetGraphBuilder({ root, packageInfos, enableTargetConfigMerging, enablePhantomTargetOptimization });\n\n const packages = getFilteredPackages({\n root,\n logger,\n packageInfos,\n includeDependencies: dependencies,\n includeDependents: dependents,\n since,\n scope,\n repoWideChanges,\n sinceIgnoreGlobs: ignore,\n });\n\n let changedFiles: string[] = [];\n\n // TODO: enhancement would be for workspace-tools to implement a \"getChangedPackageFromChangedFiles()\" type function\n // TODO: optimize this so that we don't double up the work to determine if repo has changed\n if (since) {\n if (!hasRepoChanged({ since, root, environmentGlob: repoWideChanges, logger })) {\n changedFiles = getChangedFiles(since, root);\n }\n }\n\n const pipelineEntries = Object.entries(pipeline);\n\n // Add lage pipeline configuration in the package.json files.\n // They are configured in the lage field, but without the package id.\n // i.e. having this package.json\n // { \"name\": \"@lage-run/globby\", \"lage\": { \"transpile\": { type: \"npmScript\" } }}\n // is equivalent to having the following in lage.config.js\n // { pipeline: { \"@lage-run/globby#transpile\": { type: \"npmScript\" } }\n // We conciously add these 'after' the ones in lage.config.js\n // to indicate that the more specific package.json definition takes\n // precedence over the global lage.config.js.\n for (const [packageId, packageInfo] of Object.entries(packageInfos)) {\n const packageLageDefinition = packageInfo.lage as PipelineDefinition;\n if (packageLageDefinition) {\n for (const [id, definition] of Object.entries(packageLageDefinition)) {\n pipelineEntries.push([packageId + \"#\" + id, definition]);\n }\n }\n }\n\n for (const [id, definition] of pipelineEntries) {\n if (Array.isArray(definition)) {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/run/createTargetGraph.ts"],"sourcesContent":["import type { Logger } from \"@lage-run/logger\";\nimport { type Priority, type TargetGraph, WorkspaceTargetGraphBuilder } from \"@lage-run/target-graph\";\nimport type { PackageInfos } from \"workspace-tools\";\nimport { getBranchChanges, getDefaultRemoteBranch, getStagedChanges, getUnstagedChanges, getUntrackedChanges } from \"workspace-tools\";\nimport { getFilteredPackages } from \"../../filter/getFilteredPackages.js\";\nimport type { PipelineDefinition } from \"@lage-run/config\";\nimport { hasRepoChanged } from \"../../filter/hasRepoChanged.js\";\n\ninterface CreateTargetGraphOptions {\n logger: Logger;\n root: string;\n dependencies: boolean;\n dependents: boolean;\n since?: string;\n scope?: string[];\n ignore: string[];\n repoWideChanges: string[];\n pipeline: PipelineDefinition;\n outputs: string[];\n tasks: string[];\n packageInfos: PackageInfos;\n priorities: Priority[];\n enableTargetConfigMerging: boolean;\n enablePhantomTargetOptimization: boolean;\n}\n\nfunction getChangedFiles(since: string, cwd: string) {\n const targetBranch = since || getDefaultRemoteBranch({ cwd });\n\n return [\n ...new Set([\n ...(getUntrackedChanges({ cwd }) || []),\n ...(getUnstagedChanges({ cwd }) || []),\n ...(getBranchChanges({ branch: targetBranch, cwd }) || []),\n ...(getStagedChanges({ cwd }) || []),\n ]),\n ];\n}\n\nexport async function createTargetGraph(options: CreateTargetGraphOptions): Promise<TargetGraph> {\n const {\n logger,\n root,\n dependencies,\n dependents,\n enableTargetConfigMerging,\n enablePhantomTargetOptimization,\n since,\n scope,\n repoWideChanges,\n ignore,\n pipeline,\n outputs,\n tasks,\n packageInfos,\n priorities,\n } = options;\n\n const builder = new WorkspaceTargetGraphBuilder({ root, packageInfos, enableTargetConfigMerging, enablePhantomTargetOptimization });\n\n const packages = getFilteredPackages({\n root,\n logger,\n packageInfos,\n includeDependencies: dependencies,\n includeDependents: dependents,\n since,\n scope,\n repoWideChanges,\n sinceIgnoreGlobs: ignore,\n });\n\n let changedFiles: string[] = [];\n\n // TODO: enhancement would be for workspace-tools to implement a \"getChangedPackageFromChangedFiles()\" type function\n // TODO: optimize this so that we don't double up the work to determine if repo has changed\n if (since) {\n if (!hasRepoChanged({ since, root, environmentGlob: repoWideChanges, logger })) {\n changedFiles = getChangedFiles(since, root);\n }\n }\n\n const pipelineEntries = Object.entries(pipeline);\n\n // Add lage pipeline configuration in the package.json files.\n // They are configured in the lage field, but without the package id.\n // i.e. having this package.json\n // { \"name\": \"@lage-run/globby\", \"lage\": { \"transpile\": { type: \"npmScript\" } }}\n // is equivalent to having the following in lage.config.js\n // { pipeline: { \"@lage-run/globby#transpile\": { type: \"npmScript\" } }\n // We conciously add these 'after' the ones in lage.config.js\n // to indicate that the more specific package.json definition takes\n // precedence over the global lage.config.js.\n for (const [packageId, packageInfo] of Object.entries(packageInfos)) {\n const packageLageDefinition = packageInfo.lage as PipelineDefinition;\n if (packageLageDefinition) {\n for (const [id, definition] of Object.entries(packageLageDefinition)) {\n pipelineEntries.push([packageId + \"#\" + id, definition]);\n }\n }\n }\n\n for (const [id, definition] of pipelineEntries) {\n if (Array.isArray(definition)) {\n builder.addTargetConfig(\n id,\n {\n cache: true,\n dependsOn: definition,\n options: {},\n outputs,\n },\n changedFiles\n );\n } else {\n builder.addTargetConfig(id, definition, changedFiles);\n }\n }\n\n return await builder.build(tasks, packages, priorities);\n}\n"],"names":["createTargetGraph","getChangedFiles","since","cwd","targetBranch","getDefaultRemoteBranch","Set","getUntrackedChanges","getUnstagedChanges","getBranchChanges","branch","getStagedChanges","options","logger","root","dependencies","dependents","enableTargetConfigMerging","enablePhantomTargetOptimization","scope","repoWideChanges","ignore","pipeline","outputs","tasks","packageInfos","priorities","builder","WorkspaceTargetGraphBuilder","packages","getFilteredPackages","includeDependencies","includeDependents","sinceIgnoreGlobs","changedFiles","hasRepoChanged","environmentGlob","pipelineEntries","Object","entries","packageId","packageInfo","packageLageDefinition","lage","id","definition","push","Array","isArray","addTargetConfig","cache","dependsOn","build"],"mappings":";;;;+BAuCsBA;;;eAAAA;;;6BAtCuD;gCAEuC;qCAChF;gCAEL;AAoB/B,SAASC,gBAAgBC,KAAa,EAAEC,GAAW;IACjD,MAAMC,eAAeF,SAASG,IAAAA,sCAAsB,EAAC;QAAEF;IAAI;IAE3D,OAAO;WACF,IAAIG,IAAI;eACLC,IAAAA,mCAAmB,EAAC;gBAAEJ;YAAI,MAAM,EAAE;eAClCK,IAAAA,kCAAkB,EAAC;gBAAEL;YAAI,MAAM,EAAE;eACjCM,IAAAA,gCAAgB,EAAC;gBAAEC,QAAQN;gBAAcD;YAAI,MAAM,EAAE;eACrDQ,IAAAA,gCAAgB,EAAC;gBAAER;YAAI,MAAM,EAAE;SACpC;KACF;AACH;AAEO,eAAeH,kBAAkBY,OAAiC;IACvE,MAAM,EACJC,MAAM,EACNC,IAAI,EACJC,YAAY,EACZC,UAAU,EACVC,yBAAyB,EACzBC,+BAA+B,EAC/BhB,KAAK,EACLiB,KAAK,EACLC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,KAAK,EACLC,YAAY,EACZC,UAAU,EACX,GAAGd;IAEJ,MAAMe,UAAU,IAAIC,wCAA2B,CAAC;QAAEd;QAAMW;QAAcR;QAA2BC;IAAgC;IAEjI,MAAMW,WAAWC,IAAAA,wCAAmB,EAAC;QACnChB;QACAD;QACAY;QACAM,qBAAqBhB;QACrBiB,mBAAmBhB;QACnBd;QACAiB;QACAC;QACAa,kBAAkBZ;IACpB;IAEA,IAAIa,eAAyB,EAAE;IAE/B,oHAAoH;IACpH,2FAA2F;IAC3F,IAAIhC,OAAO;QACT,IAAI,CAACiC,IAAAA,8BAAc,EAAC;YAAEjC;YAAOY;YAAMsB,iBAAiBhB;YAAiBP;QAAO,IAAI;YAC9EqB,eAAejC,gBAAgBC,OAAOY;QACxC;IACF;IAEA,MAAMuB,kBAAkBC,OAAOC,OAAO,CAACjB;IAEvC,6DAA6D;IAC7D,qEAAqE;IACrE,gCAAgC;IAChC,mFAAmF;IACnF,0DAA0D;IAC1D,sEAAsE;IACtE,6DAA6D;IAC7D,mEAAmE;IACnE,8CAA8C;IAC9C,KAAK,MAAM,CAACkB,WAAWC,YAAY,IAAIH,OAAOC,OAAO,CAACd,cAAe;QACnE,MAAMiB,wBAAwBD,YAAYE,IAAI;QAC9C,IAAID,uBAAuB;YACzB,KAAK,MAAM,CAACE,IAAIC,WAAW,IAAIP,OAAOC,OAAO,CAACG,uBAAwB;gBACpEL,gBAAgBS,IAAI,CAAC;oBAACN,YAAY,MAAMI;oBAAIC;iBAAW;YACzD;QACF;IACF;IAEA,KAAK,MAAM,CAACD,IAAIC,WAAW,IAAIR,gBAAiB;QAC9C,IAAIU,MAAMC,OAAO,CAACH,aAAa;YAC7BlB,QAAQsB,eAAe,CACrBL,IACA;gBACEM,OAAO;gBACPC,WAAWN;gBACXjC,SAAS,CAAC;gBACVW;YACF,GACAW;QAEJ,OAAO;YACLP,QAAQsB,eAAe,CAACL,IAAIC,YAAYX;QAC1C;IACF;IAEA,OAAO,MAAMP,QAAQyB,KAAK,CAAC5B,OAAOK,UAAUH;AAC9C"}
|
|
@@ -43,7 +43,7 @@ Scoped to "package-a" and "package-b" only:
|
|
|
43
43
|
|
|
44
44
|
Scoped to packages that have changed in the current branch against a target merge branch:
|
|
45
45
|
|
|
46
|
-
$ lage build test lint --since origin/
|
|
46
|
+
$ lage build test lint --since origin/main
|
|
47
47
|
|
|
48
48
|
### Providing node.js arguments for each command
|
|
49
49
|
|
|
@@ -77,6 +77,6 @@ Or combine multiple reporters (e.g. Azure DepOps with VerboseFileLog)
|
|
|
77
77
|
|
|
78
78
|
Ignoring files when calculating the scope with --since in addition to files specified in lage.config:
|
|
79
79
|
|
|
80
|
-
$ lage build test lint --since origin/
|
|
80
|
+
$ lage build test lint --since origin/main --ignore "package.json" "yarn.lock" "**/.azure-pipelines/**"
|
|
81
81
|
|
|
82
82
|
`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/run/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { action } from \"./action.js\";\nimport { addOptions } from \"../addOptions.js\";\n\nconst command: Command = new Command(\"run\");\n\naddOptions(\"filter\", command);\naddOptions(\"logger\", command);\naddOptions(\"pool\", command);\naddOptions(\"runner\", command);\naddOptions(\"run\", command);\n\ncommand\n .action(action)\n .allowUnknownOption(true)\n .addHelpCommand(\"[run] command1 [command2...commandN] [options]\", \"run commands\")\n .addHelpText(\n \"after\",\n `\nRuns a set of commands in a target graph. The targets are defined by packages and their scripts as defined the package.json files.\n\nExamples\n========\n\n### Basic case, running \"build\", \"test\", and \"lint\" against all packages\n\n $ lage build test lint\n\n### Concurrency\n\n $ lage build test lint --concurrency=4\n\n### Filtering by certain packages\n\nScoped to \"package-a\" and \"package-b\" and their dependencies and dependents:\n\n $ lage build test lint --scope package-a package-b\n\nScoped to \"package-a\" and \"package-b\" only:\n\n $ lage build test lint --scope package-a package-b --no-deps\n\nScoped to packages that have changed in the current branch against a target merge branch:\n\n $ lage build test lint --since origin/
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/run/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { action } from \"./action.js\";\nimport { addOptions } from \"../addOptions.js\";\n\nconst command: Command = new Command(\"run\");\n\naddOptions(\"filter\", command);\naddOptions(\"logger\", command);\naddOptions(\"pool\", command);\naddOptions(\"runner\", command);\naddOptions(\"run\", command);\n\ncommand\n .action(action)\n .allowUnknownOption(true)\n .addHelpCommand(\"[run] command1 [command2...commandN] [options]\", \"run commands\")\n .addHelpText(\n \"after\",\n `\nRuns a set of commands in a target graph. The targets are defined by packages and their scripts as defined the package.json files.\n\nExamples\n========\n\n### Basic case, running \"build\", \"test\", and \"lint\" against all packages\n\n $ lage build test lint\n\n### Concurrency\n\n $ lage build test lint --concurrency=4\n\n### Filtering by certain packages\n\nScoped to \"package-a\" and \"package-b\" and their dependencies and dependents:\n\n $ lage build test lint --scope package-a package-b\n\nScoped to \"package-a\" and \"package-b\" only:\n\n $ lage build test lint --scope package-a package-b --no-deps\n\nScoped to packages that have changed in the current branch against a target merge branch:\n\n $ lage build test lint --since origin/main\n\n### Providing node.js arguments for each command\n\n $ lage build test lint --nodearg=--max_old_space_size=1234 --nodearg=--heap-prof\n\n### Continue running even after encountering an error for one of the targets\n\n $ lage build test lint --continue\n\n### Controlling logged outputs\n\nShow verbose output for each target:\n\n $ lage build test lint --verbose\n\nShow only errors for each target:\n\n $ lage build test lint --log-level=error\n\nShow logs as grouped by each target:\n\n $ lage build test lint --grouped --verbose\n\nChoosing a different reporter while logging (e.g. nice outputs for Azure DevOps):\n\n $ lage build test lint --reporter=azureDevops\n\nOr combine multiple reporters (e.g. Azure DepOps with VerboseFileLog)\n\n $ lage build test lint --reporter azureDevops --reporter vfl --log-file /my/verbose/log.file\n\nIgnoring files when calculating the scope with --since in addition to files specified in lage.config:\n\n $ lage build test lint --since origin/main --ignore \"package.json\" \"yarn.lock\" \"**/.azure-pipelines/**\"\n\n`\n );\n\nexport { command as runCommand };\n"],"names":["runCommand","command","Command","addOptions","action","allowUnknownOption","addHelpCommand","addHelpText"],"mappings":";;;;+BAmFoBA;;;eAAXC;;;2BAnFe;wBACD;4BACI;AAE3B,MAAMA,UAAmB,IAAIC,kBAAO,CAAC;AAErCC,IAAAA,sBAAU,EAAC,UAAUF;AACrBE,IAAAA,sBAAU,EAAC,UAAUF;AACrBE,IAAAA,sBAAU,EAAC,QAAQF;AACnBE,IAAAA,sBAAU,EAAC,UAAUF;AACrBE,IAAAA,sBAAU,EAAC,OAAOF;AAElBA,QACGG,MAAM,CAACA,cAAM,EACbC,kBAAkB,CAAC,MACnBC,cAAc,CAAC,kDAAkD,gBACjEC,WAAW,CACV,SACA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DL,CAAC"}
|
|
@@ -139,8 +139,8 @@ async function watchAction(options, command) {
|
|
|
139
139
|
targetRun.options.shouldCache = false;
|
|
140
140
|
}
|
|
141
141
|
// When initial run is done, disable fetching of caches on all targets, keep writing to the cache
|
|
142
|
-
const watcher =
|
|
143
|
-
watcher.on("change",
|
|
142
|
+
const watcher = (0, _watcher.watch)(root, packageInfos);
|
|
143
|
+
watcher.on("change", (packageName)=>{
|
|
144
144
|
reporter.resetLogEntries();
|
|
145
145
|
const targets = new Map();
|
|
146
146
|
for (const target of targetGraph.targets.values()){
|
|
@@ -151,8 +151,10 @@ async function watchAction(options, command) {
|
|
|
151
151
|
const deltaGraph = {
|
|
152
152
|
targets
|
|
153
153
|
};
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
void (async ()=>{
|
|
155
|
+
const deltaSummary = await scheduler.run(root, deltaGraph, true);
|
|
156
|
+
displaySummary(deltaSummary, logger.reporters);
|
|
157
|
+
})().catch(()=>{});
|
|
156
158
|
});
|
|
157
159
|
}
|
|
158
160
|
function displaySummary(summary, reporters) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/run/watchAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfosAsync, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { LogReporter } from \"@lage-run/reporters\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\nimport { watch } from \"./watcher.js\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger, { LogLevel } from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function watchAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n\n // Configure logger\n const logger = createLogger();\n const reporter = new LogReporter({\n logLevel: LogLevel[options.logLevel],\n });\n logger.addReporter(reporter);\n\n // Build Target Graph\n const root = getWorkspaceManagerRoot(process.cwd())!;\n const packageInfos = await getPackageInfosAsync(root);\n\n const { tasks, taskArgs } = filterArgsForTasks(command.args);\n\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: options.dependencies,\n dependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n ignore: options.ignore.concat(config.ignore),\n pipeline: config.pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n since: options.since,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n // Make sure we do not attempt writeRemoteCache in watch mode\n config.cacheOptions.writeRemoteCache = false;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n const maxWorkersPerTaskMap = getMaxWorkersPerTaskFromOptions(options.maxWorkersPerTask);\n\n const { hasher } = await createCache({\n root,\n logger,\n cacheOptions: config.cacheOptions,\n cliArgs: taskArgs,\n skipLocalCache: options.skipLocalCache,\n });\n\n const scheduler = new SimpleScheduler({\n logger,\n concurrency,\n continueOnError: true,\n workerData: {\n root,\n taskArgs,\n skipLocalCache: options.skipLocalCache,\n cacheOptions: config.cacheOptions,\n runners: {\n ...getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n },\n },\n shouldCache: options.cache,\n shouldResetCache: options.resetCache,\n maxWorkersPerTask: new Map([...getMaxWorkersPerTask(filteredPipeline, concurrency), ...maxWorkersPerTaskMap]),\n hasher,\n workerIdleMemoryLimit: config.workerIdleMemoryLimit, // in bytes\n });\n\n // Initial run\n const summary = await scheduler.run(root, targetGraph);\n displaySummary(summary, logger.reporters);\n\n logger.info(\"Running scheduler in watch mode\");\n\n // Disables cache for subsequent runs\n // TODO: support updating hasher + write-only local cacheProvider for subsequent runs\n for (const targetRun of scheduler.targetRuns.values()) {\n targetRun.options.shouldCache = false;\n }\n\n // When initial run is done, disable fetching of caches on all targets, keep writing to the cache\n const watcher =
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/run/watchAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfosAsync, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { LogReporter } from \"@lage-run/reporters\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\nimport { watch } from \"./watcher.js\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger, { LogLevel } from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function watchAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n\n // Configure logger\n const logger = createLogger();\n const reporter = new LogReporter({\n logLevel: LogLevel[options.logLevel],\n });\n logger.addReporter(reporter);\n\n // Build Target Graph\n const root = getWorkspaceManagerRoot(process.cwd())!;\n const packageInfos = await getPackageInfosAsync(root);\n\n const { tasks, taskArgs } = filterArgsForTasks(command.args);\n\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: options.dependencies,\n dependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n ignore: options.ignore.concat(config.ignore),\n pipeline: config.pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n since: options.since,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n // Make sure we do not attempt writeRemoteCache in watch mode\n config.cacheOptions.writeRemoteCache = false;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n const maxWorkersPerTaskMap = getMaxWorkersPerTaskFromOptions(options.maxWorkersPerTask);\n\n const { hasher } = await createCache({\n root,\n logger,\n cacheOptions: config.cacheOptions,\n cliArgs: taskArgs,\n skipLocalCache: options.skipLocalCache,\n });\n\n const scheduler = new SimpleScheduler({\n logger,\n concurrency,\n continueOnError: true,\n workerData: {\n root,\n taskArgs,\n skipLocalCache: options.skipLocalCache,\n cacheOptions: config.cacheOptions,\n runners: {\n ...getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n },\n },\n shouldCache: options.cache,\n shouldResetCache: options.resetCache,\n maxWorkersPerTask: new Map([...getMaxWorkersPerTask(filteredPipeline, concurrency), ...maxWorkersPerTaskMap]),\n hasher,\n workerIdleMemoryLimit: config.workerIdleMemoryLimit, // in bytes\n });\n\n // Initial run\n const summary = await scheduler.run(root, targetGraph);\n displaySummary(summary, logger.reporters);\n\n logger.info(\"Running scheduler in watch mode\");\n\n // Disables cache for subsequent runs\n // TODO: support updating hasher + write-only local cacheProvider for subsequent runs\n for (const targetRun of scheduler.targetRuns.values()) {\n targetRun.options.shouldCache = false;\n }\n\n // When initial run is done, disable fetching of caches on all targets, keep writing to the cache\n const watcher = watch(root, packageInfos);\n watcher.on(\"change\", (packageName) => {\n reporter.resetLogEntries();\n const targets = new Map<string, Target>();\n for (const target of targetGraph.targets.values()) {\n if (target.packageName === packageName) {\n targets.set(target.id, target);\n }\n }\n\n const deltaGraph = { targets };\n\n void (async () => {\n const deltaSummary = await scheduler.run(root, deltaGraph, true);\n displaySummary(deltaSummary, logger.reporters);\n })().catch(() => {});\n });\n}\n\nfunction displaySummary(summary: SchedulerRunSummary, reporters: Reporter[]) {\n for (const reporter of reporters) {\n reporter.summarize(summary);\n reporter.cleanup?.();\n }\n}\n"],"names":["watchAction","options","command","cwd","process","config","getConfig","concurrency","getConcurrency","logger","createLogger","reporter","LogReporter","logLevel","LogLevel","addReporter","root","getWorkspaceManagerRoot","packageInfos","getPackageInfosAsync","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","writeRemoteCache","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","workerData","runners","getBuiltInRunners","nodeArg","npmCmd","npmClient","shouldCache","cache","shouldResetCache","resetCache","Map","getMaxWorkersPerTask","workerIdleMemoryLimit","summary","run","displaySummary","reporters","info","targetRun","targetRuns","watcher","watch","on","packageName","resetLogEntries","target","set","id","deltaGraph","deltaSummary","catch","summarize","cleanup"],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ async function serverAction(options) {
|
|
|
36
36
|
});
|
|
37
37
|
logger.info(`Starting server on http://${host}:${port}`);
|
|
38
38
|
const abortController = new AbortController();
|
|
39
|
-
const lageService =
|
|
39
|
+
const lageService = (0, _lageService.createLageService)({
|
|
40
40
|
cwd,
|
|
41
41
|
serverControls: {
|
|
42
42
|
abortController,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/server/action.ts"],"sourcesContent":["import createLogger, { type Logger } from \"@lage-run/logger\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { createLageService } from \"./lageService.js\";\nimport { createServer } from \"@lage-run/rpc\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { getConfig } from \"@lage-run/config\";\nimport { getWorkspaceManagerRoot } from \"workspace-tools\";\n\ninterface WorkerOptions extends ReporterInitOptions {\n nodeArg?: string[];\n server?: string;\n timeout?: number;\n shutdown: boolean;\n tasks: string[];\n}\n\nexport async function serverAction(options: WorkerOptions): Promise<void> {\n const { server = \"localhost:5332\", timeout = 1, tasks } = options;\n\n const { host, port } = parseServerOption(server);\n const cwd = process.cwd();\n const root = getWorkspaceManagerRoot(cwd) ?? cwd;\n const config = await getConfig(cwd);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.logFile = options.logFile ?? \"node_modules/.cache/lage/server.log\";\n options.reporter = options.reporter ?? \"verboseFileLog\";\n await initializeReporters(logger, options, { customReporters: config.reporters, root });\n\n logger.info(`Starting server on http://${host}:${port}`);\n\n const abortController = new AbortController();\n\n const lageService =
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/server/action.ts"],"sourcesContent":["import createLogger, { type Logger } from \"@lage-run/logger\";\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { createLageService } from \"./lageService.js\";\nimport { createServer } from \"@lage-run/rpc\";\nimport { parseServerOption } from \"../parseServerOption.js\";\nimport { getConfig } from \"@lage-run/config\";\nimport { getWorkspaceManagerRoot } from \"workspace-tools\";\n\ninterface WorkerOptions extends ReporterInitOptions {\n nodeArg?: string[];\n server?: string;\n timeout?: number;\n shutdown: boolean;\n tasks: string[];\n}\n\nexport async function serverAction(options: WorkerOptions): Promise<void> {\n const { server = \"localhost:5332\", timeout = 1, tasks } = options;\n\n const { host, port } = parseServerOption(server);\n const cwd = process.cwd();\n const root = getWorkspaceManagerRoot(cwd) ?? cwd;\n const config = await getConfig(cwd);\n\n const logger = createLogger();\n options.logLevel = options.logLevel ?? \"info\";\n options.logFile = options.logFile ?? \"node_modules/.cache/lage/server.log\";\n options.reporter = options.reporter ?? \"verboseFileLog\";\n await initializeReporters(logger, options, { customReporters: config.reporters, root });\n\n logger.info(`Starting server on http://${host}:${port}`);\n\n const abortController = new AbortController();\n\n const lageService = createLageService({\n cwd,\n serverControls: {\n abortController,\n countdownToShutdown: () => resetTimer(logger, timeout, abortController, lageServer),\n clearCountdown: clearTimer,\n },\n logger,\n concurrency: options.concurrency,\n tasks,\n });\n const lageServer = await createServer(lageService, abortController);\n\n await lageServer.listen({ host, port });\n logger.info(`Server listening on http://${host}:${port}, timeout in ${timeout} seconds`);\n}\n\nlet timeoutHandle: NodeJS.Timeout | undefined;\nfunction resetTimer(logger: Logger, timeout: number, abortController: AbortController, server: any) {\n clearTimer();\n\n timeoutHandle = globalThis.setTimeout(() => {\n logger.info(`Server timed out after ${timeout} seconds`);\n abortController.abort();\n server.close();\n }, timeout * 1000);\n}\n\nfunction clearTimer() {\n if (timeoutHandle) {\n globalThis.clearTimeout(timeoutHandle);\n }\n}\n"],"names":["serverAction","options","server","timeout","tasks","host","port","parseServerOption","cwd","process","root","getWorkspaceManagerRoot","config","getConfig","logger","createLogger","logLevel","logFile","reporter","initializeReporters","customReporters","reporters","info","abortController","AbortController","lageService","createLageService","serverControls","countdownToShutdown","resetTimer","lageServer","clearCountdown","clearTimer","concurrency","createServer","listen","timeoutHandle","globalThis","setTimeout","abort","close","clearTimeout"],"mappings":";;;;+BAiBsBA;;;eAAAA;;;+DAjBoB;qCAEN;6BACF;qBACL;mCACK;wBACR;gCACc;;;;;;AAUjC,eAAeA,aAAaC,OAAsB;IACvD,MAAM,EAAEC,SAAS,gBAAgB,EAAEC,UAAU,CAAC,EAAEC,KAAK,EAAE,GAAGH;IAE1D,MAAM,EAAEI,IAAI,EAAEC,IAAI,EAAE,GAAGC,IAAAA,oCAAiB,EAACL;IACzC,MAAMM,MAAMC,QAAQD,GAAG;IACvB,MAAME,OAAOC,IAAAA,uCAAuB,EAACH,QAAQA;IAC7C,MAAMI,SAAS,MAAMC,IAAAA,iBAAS,EAACL;IAE/B,MAAMM,SAASC,IAAAA,eAAY;IAC3Bd,QAAQe,QAAQ,GAAGf,QAAQe,QAAQ,IAAI;IACvCf,QAAQgB,OAAO,GAAGhB,QAAQgB,OAAO,IAAI;IACrChB,QAAQiB,QAAQ,GAAGjB,QAAQiB,QAAQ,IAAI;IACvC,MAAMC,IAAAA,wCAAmB,EAACL,QAAQb,SAAS;QAAEmB,iBAAiBR,OAAOS,SAAS;QAAEX;IAAK;IAErFI,OAAOQ,IAAI,CAAC,CAAC,0BAA0B,EAAEjB,KAAK,CAAC,EAAEC,MAAM;IAEvD,MAAMiB,kBAAkB,IAAIC;IAE5B,MAAMC,cAAcC,IAAAA,8BAAiB,EAAC;QACpClB;QACAmB,gBAAgB;YACdJ;YACAK,qBAAqB,IAAMC,WAAWf,QAAQX,SAASoB,iBAAiBO;YACxEC,gBAAgBC;QAClB;QACAlB;QACAmB,aAAahC,QAAQgC,WAAW;QAChC7B;IACF;IACA,MAAM0B,aAAa,MAAMI,IAAAA,iBAAY,EAACT,aAAaF;IAEnD,MAAMO,WAAWK,MAAM,CAAC;QAAE9B;QAAMC;IAAK;IACrCQ,OAAOQ,IAAI,CAAC,CAAC,2BAA2B,EAAEjB,KAAK,CAAC,EAAEC,KAAK,aAAa,EAAEH,QAAQ,QAAQ,CAAC;AACzF;AAEA,IAAIiC;AACJ,SAASP,WAAWf,MAAc,EAAEX,OAAe,EAAEoB,eAAgC,EAAErB,MAAW;IAChG8B;IAEAI,gBAAgBC,WAAWC,UAAU,CAAC;QACpCxB,OAAOQ,IAAI,CAAC,CAAC,uBAAuB,EAAEnB,QAAQ,QAAQ,CAAC;QACvDoB,gBAAgBgB,KAAK;QACrBrC,OAAOsC,KAAK;IACd,GAAGrC,UAAU;AACf;AAEA,SAAS6B;IACP,IAAII,eAAe;QACjBC,WAAWI,YAAY,CAACL;IAC1B;AACF"}
|
|
@@ -22,7 +22,8 @@ function getOutputFiles(root, target, outputGlob, packageTree) {
|
|
|
22
22
|
const sourceControlledFiles = new Set(packageTree.getPackageFiles(target.packageName ?? "", patterns));
|
|
23
23
|
const outputs = (0, _globby.glob)(patterns, {
|
|
24
24
|
cwd: target.cwd,
|
|
25
|
-
gitignore: false
|
|
25
|
+
gitignore: false,
|
|
26
|
+
dot: true
|
|
26
27
|
}).map((file)=>_path.default.relative(root, _path.default.join(target.cwd, file))).filter((file)=>!sourceControlledFiles.has(file));
|
|
27
28
|
return outputs;
|
|
28
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/server/getOutputFiles.ts"],"sourcesContent":["import type { CacheOptions } from \"@lage-run/config\";\nimport { glob } from \"@lage-run/globby\";\nimport type { PackageTree } from \"@lage-run/hasher\";\nimport type { Target } from \"@lage-run/target-graph\";\n\nimport path from \"path\";\n\nexport function getOutputFiles(root: string, target: Target, outputGlob: CacheOptions[\"outputGlob\"], packageTree: PackageTree): string[] {\n const patterns = target.outputs ?? outputGlob ?? [\"**/*\"];\n\n const sourceControlledFiles = new Set(packageTree.getPackageFiles(target.packageName ?? \"\", patterns));\n const outputs = glob(patterns, { cwd: target.cwd, gitignore: false })\n .map((file) => path.relative(root, path.join(target.cwd, file)))\n .filter((file) => !sourceControlledFiles.has(file));\n\n return outputs;\n}\n"],"names":["getOutputFiles","root","target","outputGlob","packageTree","patterns","outputs","sourceControlledFiles","Set","getPackageFiles","packageName","glob","cwd","gitignore","map","file","path","relative","join","filter","has"],"mappings":";;;;+BAOgBA;;;eAAAA;;;wBANK;6DAIJ;;;;;;AAEV,SAASA,eAAeC,IAAY,EAAEC,MAAc,EAAEC,UAAsC,EAAEC,WAAwB;IAC3H,MAAMC,WAAWH,OAAOI,OAAO,IAAIH,cAAc;QAAC;KAAO;IAEzD,MAAMI,wBAAwB,IAAIC,IAAIJ,YAAYK,eAAe,CAACP,OAAOQ,WAAW,IAAI,IAAIL;IAC5F,MAAMC,UAAUK,IAAAA,YAAI,EAACN,UAAU;QAAEO,KAAKV,OAAOU,GAAG;QAAEC,WAAW;
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/server/getOutputFiles.ts"],"sourcesContent":["import type { CacheOptions } from \"@lage-run/config\";\nimport { glob } from \"@lage-run/globby\";\nimport type { PackageTree } from \"@lage-run/hasher\";\nimport type { Target } from \"@lage-run/target-graph\";\n\nimport path from \"path\";\n\nexport function getOutputFiles(root: string, target: Target, outputGlob: CacheOptions[\"outputGlob\"], packageTree: PackageTree): string[] {\n const patterns = target.outputs ?? outputGlob ?? [\"**/*\"];\n\n const sourceControlledFiles = new Set(packageTree.getPackageFiles(target.packageName ?? \"\", patterns));\n const outputs = glob(patterns, { cwd: target.cwd, gitignore: false, dot: true })\n .map((file) => path.relative(root, path.join(target.cwd, file)))\n .filter((file) => !sourceControlledFiles.has(file));\n\n return outputs;\n}\n"],"names":["getOutputFiles","root","target","outputGlob","packageTree","patterns","outputs","sourceControlledFiles","Set","getPackageFiles","packageName","glob","cwd","gitignore","dot","map","file","path","relative","join","filter","has"],"mappings":";;;;+BAOgBA;;;eAAAA;;;wBANK;6DAIJ;;;;;;AAEV,SAASA,eAAeC,IAAY,EAAEC,MAAc,EAAEC,UAAsC,EAAEC,WAAwB;IAC3H,MAAMC,WAAWH,OAAOI,OAAO,IAAIH,cAAc;QAAC;KAAO;IAEzD,MAAMI,wBAAwB,IAAIC,IAAIJ,YAAYK,eAAe,CAACP,OAAOQ,WAAW,IAAI,IAAIL;IAC5F,MAAMC,UAAUK,IAAAA,YAAI,EAACN,UAAU;QAAEO,KAAKV,OAAOU,GAAG;QAAEC,WAAW;QAAOC,KAAK;IAAK,GAC3EC,GAAG,CAAC,CAACC,OAASC,aAAI,CAACC,QAAQ,CAACjB,MAAMgB,aAAI,CAACE,IAAI,CAACjB,OAAOU,GAAG,EAAEI,QACxDI,MAAM,CAAC,CAACJ,OAAS,CAACT,sBAAsBc,GAAG,CAACL;IAE/C,OAAOV;AACT"}
|
|
@@ -12,5 +12,5 @@ interface CreateLageServiceOptions {
|
|
|
12
12
|
concurrency?: number;
|
|
13
13
|
tasks: string[];
|
|
14
14
|
}
|
|
15
|
-
export declare function createLageService({ cwd, serverControls, logger, concurrency, tasks
|
|
15
|
+
export declare function createLageService({ cwd, serverControls, logger, concurrency, tasks }: CreateLageServiceOptions): ILageService;
|
|
16
16
|
export {};
|
|
@@ -130,8 +130,9 @@ async function createInitializedPromise({ cwd, logger, serverControls, nodeArg,
|
|
|
130
130
|
initializedPromise = createInitializedPromise(options);
|
|
131
131
|
return initializedPromise;
|
|
132
132
|
}
|
|
133
|
-
|
|
133
|
+
function createLageService({ cwd, serverControls, logger, concurrency, tasks }) {
|
|
134
134
|
return {
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
135
136
|
async ping () {
|
|
136
137
|
return {
|
|
137
138
|
pong: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/server/lageService.ts"],"sourcesContent":["import { type ConfigOptions, getConfig, getConcurrency, getMaxWorkersPerTask } from \"@lage-run/config\";\nimport type { Logger } from \"@lage-run/logger\";\nimport { ConnectError, Code, type ILageService } from \"@lage-run/rpc\";\nimport { getStartTargetId, getTargetId, type TargetGraph } from \"@lage-run/target-graph\";\nimport { type DependencyMap, getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { createTargetGraph } from \"../run/createTargetGraph.js\";\nimport { type Readable } from \"stream\";\nimport { type Pool, AggregatedPool } from \"@lage-run/worker-threads-pool\";\nimport { getInputFiles, type PackageTree, TargetHasher } from \"@lage-run/hasher\";\nimport { getOutputFiles } from \"./getOutputFiles.js\";\nimport { MemoryStream } from \"./MemoryStream.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { filterPipelineDefinitions } from \"../run/filterPipelineDefinitions.js\";\nimport type { TargetRun } from \"@lage-run/scheduler-types\";\nimport { formatDuration, hrToSeconds, hrtimeDiff } from \"@lage-run/format-hrtime\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getGlobalInputHashFilePath, getHashFilePath } from \"../targetHashFilePath.js\";\n\ninterface LageServiceContext {\n config: ConfigOptions;\n targetGraph: TargetGraph;\n packageTree: PackageTree;\n dependencyMap: DependencyMap;\n root: string;\n pool: Pool;\n targetHasher: TargetHasher;\n}\n\nlet initializedPromise: Promise<LageServiceContext> | undefined;\ninterface ServiceControls {\n abortController: AbortController;\n countdownToShutdown: () => void;\n clearCountdown: () => void;\n}\ninterface InitializeOptions {\n cwd: string;\n logger: Logger;\n serverControls: ServiceControls;\n concurrency?: number;\n nodeArg?: string;\n taskArgs: string[];\n tasks: string[];\n}\n\nfunction formatBytes(bytes: number) {\n return `${(bytes / 1024 / 1024).toFixed(2)} MB`;\n}\n\nasync function createInitializedPromise({ cwd, logger, serverControls, nodeArg, taskArgs, concurrency, tasks }: InitializeOptions) {\n if (initializedPromise) {\n return initializedPromise;\n }\n\n const config = await getConfig(cwd);\n const root = getWorkspaceManagerRoot(cwd)!;\n const maxWorkers = getConcurrency(concurrency, config.concurrency);\n\n logger.info(`Initializing with ${maxWorkers} workers, tasks: ${tasks.join(\", \")}`);\n\n const { pipeline } = config;\n\n const packageInfos = getPackageInfos(root);\n\n logger.info(\"Initializing target graph\");\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: false,\n dependents: false,\n ignore: [],\n pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: undefined,\n since: undefined,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n const targetHasher = new TargetHasher({\n root,\n environmentGlob: config.cacheOptions?.environmentGlob ?? [],\n logger,\n cacheKey: config.cacheOptions?.cacheKey,\n cliArgs: taskArgs,\n });\n\n logger.info(\"Initializing hasher\");\n await targetHasher.initialize();\n\n logger.info(\"Initializing dependency map\");\n\n const packageTree = targetHasher.packageTree!;\n const dependencyMap = targetHasher.dependencyMap;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n logger.info(\"Initializing Pool\");\n const pool = new AggregatedPool({\n logger,\n maxWorkersByGroup: new Map([...getMaxWorkersPerTask(filteredPipeline, maxWorkers)]),\n groupBy: ({ target }) => target.task,\n maxWorkers,\n script: require.resolve(\"./singleTargetWorker.js\"),\n workerOptions: {\n stdout: true,\n stderr: true,\n workerData: {\n runners: {\n ...getBuiltInRunners({ nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n shouldCache: false,\n shouldResetCache: false,\n },\n },\n },\n workerIdleMemoryLimit: config.workerIdleMemoryLimit,\n });\n\n serverControls.abortController.signal.addEventListener(\"abort\", () => {\n void pool?.close();\n });\n\n pool?.on(\"freedWorker\", () => {\n logger.silly(`Max Worker Memory Usage: ${formatBytes(pool?.stats().maxWorkerMemoryUsage)}`);\n });\n\n pool?.on(\"idle\", () => {\n logger.info(\"All workers are idle, shutting down after timeout\");\n serverControls.countdownToShutdown();\n });\n\n logger.info(\"done initializing\");\n return { config, targetGraph, packageTree, dependencyMap, root, pool, targetHasher };\n}\n\n/**\n * Initializes the lageService: the extra \"initializePromise\" ensures only one initialization is done at a time across threads\n * @param cwd\n * @param logger\n * @returns\n */\nasync function initialize(options: InitializeOptions): Promise<LageServiceContext> {\n initializedPromise = createInitializedPromise(options);\n return initializedPromise;\n}\n\ninterface CreateLageServiceOptions {\n cwd: string;\n serverControls: ServiceControls;\n logger: Logger;\n concurrency?: number;\n tasks: string[];\n}\n\nexport async function createLageService({\n cwd,\n serverControls,\n logger,\n concurrency,\n tasks,\n}: CreateLageServiceOptions): Promise<ILageService> {\n return {\n async ping() {\n return { pong: true };\n },\n\n async runTarget(request) {\n if (global.gc) {\n global.gc();\n }\n\n serverControls.clearCountdown();\n\n // THIS IS A BIG ASSUMPTION; TODO: memoize based on the parameters of the initialize() call\n // The first request sets up the nodeArg and taskArgs - we are assuming that all requests to run this target are coming from the same\n // `lage info` call\n const { config, targetGraph, dependencyMap, packageTree, root, pool, targetHasher } = await initialize({\n cwd,\n logger,\n nodeArg: request.nodeOptions,\n taskArgs: request.taskArgs,\n serverControls,\n concurrency,\n tasks,\n });\n\n const runners = getBuiltInRunners({ nodeArg: request.nodeOptions, npmCmd: config.npmClient, taskArgs: request.taskArgs });\n\n const id = getTargetId(request.packageName, request.task);\n\n if (!targetGraph.targets.has(id)) {\n logger.info(`Target not found: ${request.packageName}#${request.task}`);\n return {\n packageName: request.packageName,\n task: request.task,\n exitCode: 1,\n };\n }\n\n logger.info(`Running target: ${request.packageName}#${request.task}`);\n\n const target = targetGraph.targets.get(id)!;\n const task = {\n target,\n runners,\n };\n\n const writableStdout = new MemoryStream();\n const writableStderr = new MemoryStream();\n let pipedStdout: Readable;\n let pipedStderr: Readable;\n\n const targetRun: TargetRun = {\n queueTime: process.hrtime(),\n target,\n duration: [0, 0],\n startTime: [0, 0],\n status: \"queued\",\n threadId: 0,\n };\n\n let results: {\n packageName?: string;\n task: string;\n cwd: string;\n exitCode: number;\n inputs: string[];\n outputs: string[];\n stdout: string;\n stderr: string;\n id: string;\n globalInputHashFile: string;\n };\n\n const inputs = getInputFiles(target, dependencyMap, packageTree);\n\n for (const dep of target.dependencies) {\n if (dep === getStartTargetId()) {\n continue;\n }\n\n const depTarget = targetGraph.targets.get(dep)!;\n inputs.push(path.join(path.relative(root, depTarget.cwd), getHashFilePath(depTarget)).replace(/\\\\/g, \"/\"));\n }\n\n // Write the target hash to a file for its dependants to use\n const targetHashFile = getHashFilePath(target);\n const targetHashFullPath = path.join(target.cwd, targetHashFile);\n\n try {\n if (!fs.existsSync(path.dirname(targetHashFullPath))) {\n fs.mkdirSync(path.dirname(targetHashFullPath), { recursive: true });\n }\n\n fs.writeFileSync(targetHashFullPath, await targetHasher.hash(target));\n } catch (e) {\n throw new ConnectError(`Error writing target hash file: ${targetHashFullPath}`, Code.Internal);\n }\n\n const targetGlobalInputHashRelativePath = getGlobalInputHashFilePath(target);\n\n try {\n await pool.exec(\n task,\n 0,\n (worker, stdout, stderr) => {\n logger.info(`[${worker.threadId}] ${request.packageName}#${request.task} start`);\n\n pipedStdout = stdout;\n pipedStderr = stderr;\n\n stdout.pipe(writableStdout);\n stderr.pipe(writableStderr);\n\n targetRun.threadId = worker.threadId;\n targetRun.status = \"running\";\n targetRun.startTime = process.hrtime();\n },\n (worker) => {\n logger.info(`Max Worker Memory Usage: ${formatBytes(pool.stats().maxWorkerMemoryUsage)}`);\n\n // logger.info the main process memory usage\n const memoryUsage = process.memoryUsage();\n logger.info(\n `Main Process Memory Usage: RSS: ${formatBytes(memoryUsage.rss)} Heap Total: ${formatBytes(\n memoryUsage.heapTotal\n )} Heap Used: ${formatBytes(memoryUsage.heapUsed)}`\n );\n\n targetRun.status = \"success\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n logger.info(\n `[${worker.threadId}] ${request.packageName}#${request.task} end: ${formatDuration(hrToSeconds(targetRun.duration))}`\n );\n pipedStdout.unpipe(writableStdout);\n pipedStderr.unpipe(writableStderr);\n }\n );\n\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 0,\n inputs,\n outputs,\n stdout: writableStdout.toString(),\n stderr: writableStderr.toString(),\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n } catch (e) {\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n targetRun.status = \"failed\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 1,\n inputs,\n outputs,\n stdout: \"\",\n stderr: e instanceof Error ? e.toString() : \"\",\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n }\n\n logger.info(\n `${request.packageName}#${request.task} results: \\n${JSON.stringify(\n {\n packageName: results.packageName,\n task: results.task,\n cwd: results.cwd,\n exitCode: results.exitCode,\n inputs: results.inputs,\n outputs: results.outputs,\n id: results.id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n },\n null,\n 2\n )}\\n------`,\n results\n );\n\n return results;\n },\n };\n}\n"],"names":["createLageService","initializedPromise","formatBytes","bytes","toFixed","createInitializedPromise","cwd","logger","serverControls","nodeArg","taskArgs","concurrency","tasks","config","getConfig","root","getWorkspaceManagerRoot","maxWorkers","getConcurrency","info","join","pipeline","packageInfos","getPackageInfos","targetGraph","createTargetGraph","dependencies","dependents","ignore","repoWideChanges","scope","undefined","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","targetHasher","TargetHasher","environmentGlob","cacheKey","cliArgs","initialize","packageTree","dependencyMap","filteredPipeline","filterPipelineDefinitions","targets","values","pool","AggregatedPool","maxWorkersByGroup","Map","getMaxWorkersPerTask","groupBy","target","task","script","require","resolve","workerOptions","stdout","stderr","workerData","runners","getBuiltInRunners","npmCmd","npmClient","shouldCache","shouldResetCache","workerIdleMemoryLimit","abortController","signal","addEventListener","close","on","silly","stats","maxWorkerMemoryUsage","countdownToShutdown","options","ping","pong","runTarget","request","global","gc","clearCountdown","nodeOptions","id","getTargetId","packageName","has","exitCode","get","writableStdout","MemoryStream","writableStderr","pipedStdout","pipedStderr","targetRun","queueTime","process","hrtime","duration","startTime","status","threadId","results","inputs","getInputFiles","dep","getStartTargetId","depTarget","push","path","relative","getHashFilePath","replace","targetHashFile","targetHashFullPath","fs","existsSync","dirname","mkdirSync","recursive","writeFileSync","hash","e","ConnectError","Code","Internal","targetGlobalInputHashRelativePath","getGlobalInputHashFilePath","exec","worker","pipe","memoryUsage","rss","heapTotal","heapUsed","hrtimeDiff","formatDuration","hrToSeconds","unpipe","getOutputFiles","targetHashFileRelativePath","toString","globalInputHashFile","Error","JSON","stringify"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/server/lageService.ts"],"sourcesContent":["import { type ConfigOptions, getConfig, getConcurrency, getMaxWorkersPerTask } from \"@lage-run/config\";\nimport type { Logger } from \"@lage-run/logger\";\nimport { ConnectError, Code, type ILageService } from \"@lage-run/rpc\";\nimport { getStartTargetId, getTargetId, type TargetGraph } from \"@lage-run/target-graph\";\nimport { type DependencyMap, getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { createTargetGraph } from \"../run/createTargetGraph.js\";\nimport { type Readable } from \"stream\";\nimport { type Pool, AggregatedPool } from \"@lage-run/worker-threads-pool\";\nimport { getInputFiles, type PackageTree, TargetHasher } from \"@lage-run/hasher\";\nimport { getOutputFiles } from \"./getOutputFiles.js\";\nimport { MemoryStream } from \"./MemoryStream.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { filterPipelineDefinitions } from \"../run/filterPipelineDefinitions.js\";\nimport type { TargetRun } from \"@lage-run/scheduler-types\";\nimport { formatDuration, hrToSeconds, hrtimeDiff } from \"@lage-run/format-hrtime\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { getGlobalInputHashFilePath, getHashFilePath } from \"../targetHashFilePath.js\";\n\ninterface LageServiceContext {\n config: ConfigOptions;\n targetGraph: TargetGraph;\n packageTree: PackageTree;\n dependencyMap: DependencyMap;\n root: string;\n pool: Pool;\n targetHasher: TargetHasher;\n}\n\nlet initializedPromise: Promise<LageServiceContext> | undefined;\ninterface ServiceControls {\n abortController: AbortController;\n countdownToShutdown: () => void;\n clearCountdown: () => void;\n}\ninterface InitializeOptions {\n cwd: string;\n logger: Logger;\n serverControls: ServiceControls;\n concurrency?: number;\n nodeArg?: string;\n taskArgs: string[];\n tasks: string[];\n}\n\nfunction formatBytes(bytes: number) {\n return `${(bytes / 1024 / 1024).toFixed(2)} MB`;\n}\n\nasync function createInitializedPromise({ cwd, logger, serverControls, nodeArg, taskArgs, concurrency, tasks }: InitializeOptions) {\n if (initializedPromise) {\n return initializedPromise;\n }\n\n const config = await getConfig(cwd);\n const root = getWorkspaceManagerRoot(cwd)!;\n const maxWorkers = getConcurrency(concurrency, config.concurrency);\n\n logger.info(`Initializing with ${maxWorkers} workers, tasks: ${tasks.join(\", \")}`);\n\n const { pipeline } = config;\n\n const packageInfos = getPackageInfos(root);\n\n logger.info(\"Initializing target graph\");\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: false,\n dependents: false,\n ignore: [],\n pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: undefined,\n since: undefined,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n const targetHasher = new TargetHasher({\n root,\n environmentGlob: config.cacheOptions?.environmentGlob ?? [],\n logger,\n cacheKey: config.cacheOptions?.cacheKey,\n cliArgs: taskArgs,\n });\n\n logger.info(\"Initializing hasher\");\n await targetHasher.initialize();\n\n logger.info(\"Initializing dependency map\");\n\n const packageTree = targetHasher.packageTree!;\n const dependencyMap = targetHasher.dependencyMap;\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n logger.info(\"Initializing Pool\");\n const pool = new AggregatedPool({\n logger,\n maxWorkersByGroup: new Map([...getMaxWorkersPerTask(filteredPipeline, maxWorkers)]),\n groupBy: ({ target }) => target.task,\n maxWorkers,\n script: require.resolve(\"./singleTargetWorker.js\"),\n workerOptions: {\n stdout: true,\n stderr: true,\n workerData: {\n runners: {\n ...getBuiltInRunners({ nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n shouldCache: false,\n shouldResetCache: false,\n },\n },\n },\n workerIdleMemoryLimit: config.workerIdleMemoryLimit,\n });\n\n serverControls.abortController.signal.addEventListener(\"abort\", () => {\n void pool?.close();\n });\n\n pool?.on(\"freedWorker\", () => {\n logger.silly(`Max Worker Memory Usage: ${formatBytes(pool?.stats().maxWorkerMemoryUsage)}`);\n });\n\n pool?.on(\"idle\", () => {\n logger.info(\"All workers are idle, shutting down after timeout\");\n serverControls.countdownToShutdown();\n });\n\n logger.info(\"done initializing\");\n return { config, targetGraph, packageTree, dependencyMap, root, pool, targetHasher };\n}\n\n/**\n * Initializes the lageService: the extra \"initializePromise\" ensures only one initialization is done at a time across threads\n * @param cwd\n * @param logger\n * @returns\n */\nasync function initialize(options: InitializeOptions): Promise<LageServiceContext> {\n initializedPromise = createInitializedPromise(options);\n return initializedPromise;\n}\n\ninterface CreateLageServiceOptions {\n cwd: string;\n serverControls: ServiceControls;\n logger: Logger;\n concurrency?: number;\n tasks: string[];\n}\n\nexport function createLageService({ cwd, serverControls, logger, concurrency, tasks }: CreateLageServiceOptions): ILageService {\n return {\n // eslint-disable-next-line @typescript-eslint/require-await\n async ping() {\n return { pong: true };\n },\n\n async runTarget(request) {\n if (global.gc) {\n global.gc();\n }\n\n serverControls.clearCountdown();\n\n // THIS IS A BIG ASSUMPTION; TODO: memoize based on the parameters of the initialize() call\n // The first request sets up the nodeArg and taskArgs - we are assuming that all requests to run this target are coming from the same\n // `lage info` call\n const { config, targetGraph, dependencyMap, packageTree, root, pool, targetHasher } = await initialize({\n cwd,\n logger,\n nodeArg: request.nodeOptions,\n taskArgs: request.taskArgs,\n serverControls,\n concurrency,\n tasks,\n });\n\n const runners = getBuiltInRunners({ nodeArg: request.nodeOptions, npmCmd: config.npmClient, taskArgs: request.taskArgs });\n\n const id = getTargetId(request.packageName, request.task);\n\n if (!targetGraph.targets.has(id)) {\n logger.info(`Target not found: ${request.packageName}#${request.task}`);\n return {\n packageName: request.packageName,\n task: request.task,\n exitCode: 1,\n };\n }\n\n logger.info(`Running target: ${request.packageName}#${request.task}`);\n\n const target = targetGraph.targets.get(id)!;\n const task = {\n target,\n runners,\n };\n\n const writableStdout = new MemoryStream();\n const writableStderr = new MemoryStream();\n let pipedStdout: Readable;\n let pipedStderr: Readable;\n\n const targetRun: TargetRun = {\n queueTime: process.hrtime(),\n target,\n duration: [0, 0],\n startTime: [0, 0],\n status: \"queued\",\n threadId: 0,\n };\n\n let results: {\n packageName?: string;\n task: string;\n cwd: string;\n exitCode: number;\n inputs: string[];\n outputs: string[];\n stdout: string;\n stderr: string;\n id: string;\n globalInputHashFile: string;\n };\n\n const inputs = getInputFiles(target, dependencyMap, packageTree);\n\n for (const dep of target.dependencies) {\n if (dep === getStartTargetId()) {\n continue;\n }\n\n const depTarget = targetGraph.targets.get(dep)!;\n inputs.push(path.join(path.relative(root, depTarget.cwd), getHashFilePath(depTarget)).replace(/\\\\/g, \"/\"));\n }\n\n // Write the target hash to a file for its dependants to use\n const targetHashFile = getHashFilePath(target);\n const targetHashFullPath = path.join(target.cwd, targetHashFile);\n\n try {\n if (!fs.existsSync(path.dirname(targetHashFullPath))) {\n fs.mkdirSync(path.dirname(targetHashFullPath), { recursive: true });\n }\n\n fs.writeFileSync(targetHashFullPath, await targetHasher.hash(target));\n } catch (e) {\n throw new ConnectError(`Error writing target hash file: ${targetHashFullPath}`, Code.Internal);\n }\n\n const targetGlobalInputHashRelativePath = getGlobalInputHashFilePath(target);\n\n try {\n await pool.exec(\n task,\n 0,\n (worker, stdout, stderr) => {\n logger.info(`[${worker.threadId}] ${request.packageName}#${request.task} start`);\n\n pipedStdout = stdout;\n pipedStderr = stderr;\n\n stdout.pipe(writableStdout);\n stderr.pipe(writableStderr);\n\n targetRun.threadId = worker.threadId;\n targetRun.status = \"running\";\n targetRun.startTime = process.hrtime();\n },\n (worker) => {\n logger.info(`Max Worker Memory Usage: ${formatBytes(pool.stats().maxWorkerMemoryUsage)}`);\n\n // logger.info the main process memory usage\n const memoryUsage = process.memoryUsage();\n logger.info(\n `Main Process Memory Usage: RSS: ${formatBytes(memoryUsage.rss)} Heap Total: ${formatBytes(\n memoryUsage.heapTotal\n )} Heap Used: ${formatBytes(memoryUsage.heapUsed)}`\n );\n\n targetRun.status = \"success\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n logger.info(\n `[${worker.threadId}] ${request.packageName}#${request.task} end: ${formatDuration(hrToSeconds(targetRun.duration))}`\n );\n pipedStdout.unpipe(writableStdout);\n pipedStderr.unpipe(writableStderr);\n }\n );\n\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 0,\n inputs,\n outputs,\n stdout: writableStdout.toString(),\n stderr: writableStderr.toString(),\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n } catch (e) {\n const outputs = getOutputFiles(root, target, config.cacheOptions?.outputGlob, packageTree);\n const targetHashFileRelativePath = path.relative(root, targetHashFullPath).replace(/\\\\/g, \"/\");\n outputs.push(targetHashFileRelativePath);\n\n targetRun.status = \"failed\";\n targetRun.duration = hrtimeDiff(targetRun.startTime, process.hrtime());\n\n results = {\n packageName: request.packageName,\n task: request.task,\n cwd: target.cwd,\n exitCode: 1,\n inputs,\n outputs,\n stdout: \"\",\n stderr: e instanceof Error ? e.toString() : \"\",\n id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n };\n }\n\n logger.info(\n `${request.packageName}#${request.task} results: \\n${JSON.stringify(\n {\n packageName: results.packageName,\n task: results.task,\n cwd: results.cwd,\n exitCode: results.exitCode,\n inputs: results.inputs,\n outputs: results.outputs,\n id: results.id,\n globalInputHashFile: targetGlobalInputHashRelativePath,\n },\n null,\n 2\n )}\\n------`,\n results\n );\n\n return results;\n },\n };\n}\n"],"names":["createLageService","initializedPromise","formatBytes","bytes","toFixed","createInitializedPromise","cwd","logger","serverControls","nodeArg","taskArgs","concurrency","tasks","config","getConfig","root","getWorkspaceManagerRoot","maxWorkers","getConcurrency","info","join","pipeline","packageInfos","getPackageInfos","targetGraph","createTargetGraph","dependencies","dependents","ignore","repoWideChanges","scope","undefined","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","targetHasher","TargetHasher","environmentGlob","cacheKey","cliArgs","initialize","packageTree","dependencyMap","filteredPipeline","filterPipelineDefinitions","targets","values","pool","AggregatedPool","maxWorkersByGroup","Map","getMaxWorkersPerTask","groupBy","target","task","script","require","resolve","workerOptions","stdout","stderr","workerData","runners","getBuiltInRunners","npmCmd","npmClient","shouldCache","shouldResetCache","workerIdleMemoryLimit","abortController","signal","addEventListener","close","on","silly","stats","maxWorkerMemoryUsage","countdownToShutdown","options","ping","pong","runTarget","request","global","gc","clearCountdown","nodeOptions","id","getTargetId","packageName","has","exitCode","get","writableStdout","MemoryStream","writableStderr","pipedStdout","pipedStderr","targetRun","queueTime","process","hrtime","duration","startTime","status","threadId","results","inputs","getInputFiles","dep","getStartTargetId","depTarget","push","path","relative","getHashFilePath","replace","targetHashFile","targetHashFullPath","fs","existsSync","dirname","mkdirSync","recursive","writeFileSync","hash","e","ConnectError","Code","Internal","targetGlobalInputHashRelativePath","getGlobalInputHashFilePath","exec","worker","pipe","memoryUsage","rss","heapTotal","heapUsed","hrtimeDiff","formatDuration","hrToSeconds","unpipe","getOutputFiles","targetHashFileRelativePath","toString","globalInputHashFile","Error","JSON","stringify"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
const _workerthreadspool = require("@lage-run/worker-threads-pool");
|
|
6
6
|
const _runners = require("@lage-run/runners");
|
|
7
7
|
const _worker_threads = require("worker_threads");
|
|
8
|
-
|
|
8
|
+
function setup(options) {
|
|
9
9
|
const { runners } = options;
|
|
10
10
|
const runnerPicker = new _runners.TargetRunnerPicker(runners);
|
|
11
11
|
return {
|
|
@@ -13,21 +13,19 @@ async function setup(options) {
|
|
|
13
13
|
runnerPicker
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
(0, _workerthreadspool.registerWorker)(run);
|
|
33
|
-
})();
|
|
16
|
+
const { runnerPicker } = setup(_worker_threads.workerData);
|
|
17
|
+
async function run(data, abortSignal) {
|
|
18
|
+
let value = undefined;
|
|
19
|
+
const runner = await runnerPicker.pick(data.target);
|
|
20
|
+
value = await runner.run({
|
|
21
|
+
target: data.target,
|
|
22
|
+
weight: 0,
|
|
23
|
+
abortSignal
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
skipped: false,
|
|
27
|
+
hash: undefined,
|
|
28
|
+
value
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
(0, _workerthreadspool.registerWorker)(run);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/server/singleTargetWorker.ts"],"sourcesContent":["import { registerWorker } from \"@lage-run/worker-threads-pool\";\nimport { TargetRunnerPicker } from \"@lage-run/runners\";\nimport type { TargetRunnerPickerOptions } from \"@lage-run/runners\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport { workerData } from \"worker_threads\";\n\ninterface SimpleTargetWorkerDataOptions {\n runners: TargetRunnerPickerOptions;\n}\n\
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/server/singleTargetWorker.ts"],"sourcesContent":["import { registerWorker } from \"@lage-run/worker-threads-pool\";\nimport { TargetRunnerPicker } from \"@lage-run/runners\";\nimport type { TargetRunnerPickerOptions } from \"@lage-run/runners\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport { workerData } from \"worker_threads\";\n\ninterface SimpleTargetWorkerDataOptions {\n runners: TargetRunnerPickerOptions;\n}\n\nfunction setup(options: SimpleTargetWorkerDataOptions) {\n const { runners } = options;\n const runnerPicker = new TargetRunnerPicker(runners);\n\n return {\n options,\n runnerPicker,\n };\n}\n\nconst { runnerPicker } = setup(workerData);\n\nasync function run(data: { target: Target }, abortSignal?: AbortSignal) {\n let value: unknown = undefined;\n const runner = await runnerPicker.pick(data.target);\n\n value = await runner.run({\n target: data.target,\n weight: 0,\n abortSignal,\n });\n\n return {\n skipped: false,\n hash: undefined,\n value,\n };\n}\n\nregisterWorker(run);\n"],"names":["setup","options","runners","runnerPicker","TargetRunnerPicker","workerData","run","data","abortSignal","value","undefined","runner","pick","target","weight","skipped","hash","registerWorker"],"mappings":";;;;mCAA+B;yBACI;gCAGR;AAM3B,SAASA,MAAMC,OAAsC;IACnD,MAAM,EAAEC,OAAO,EAAE,GAAGD;IACpB,MAAME,eAAe,IAAIC,2BAAkB,CAACF;IAE5C,OAAO;QACLD;QACAE;IACF;AACF;AAEA,MAAM,EAAEA,YAAY,EAAE,GAAGH,MAAMK,0BAAU;AAEzC,eAAeC,IAAIC,IAAwB,EAAEC,WAAyB;IACpE,IAAIC,QAAiBC;IACrB,MAAMC,SAAS,MAAMR,aAAaS,IAAI,CAACL,KAAKM,MAAM;IAElDJ,QAAQ,MAAME,OAAOL,GAAG,CAAC;QACvBO,QAAQN,KAAKM,MAAM;QACnBC,QAAQ;QACRN;IACF;IAEA,OAAO;QACLO,SAAS;QACTC,MAAMN;QACND;IACF;AACF;AAEAQ,IAAAA,iCAAc,EAACX"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lage-run/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.0",
|
|
4
4
|
"description": "Command Line Interface for Lage",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,19 +22,19 @@
|
|
|
22
22
|
"lint": "monorepo-scripts lint"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@lage-run/cache": "^1.4.
|
|
26
|
-
"@lage-run/config": "^0.9.
|
|
25
|
+
"@lage-run/cache": "^1.4.9",
|
|
26
|
+
"@lage-run/config": "^0.9.2",
|
|
27
27
|
"@lage-run/format-hrtime": "^0.1.9",
|
|
28
28
|
"@lage-run/globby": "^13.0.1",
|
|
29
|
-
"@lage-run/hasher": "^1.9.
|
|
29
|
+
"@lage-run/hasher": "^1.9.6",
|
|
30
30
|
"@lage-run/logger": "^1.3.3",
|
|
31
|
-
"@lage-run/reporters": "^1.5.
|
|
32
|
-
"@lage-run/rpc": "^1.4.
|
|
33
|
-
"@lage-run/runners": "^1.4.
|
|
34
|
-
"@lage-run/scheduler": "^1.5.
|
|
35
|
-
"@lage-run/scheduler-types": "^0.3.
|
|
36
|
-
"@lage-run/target-graph": "^0.14.
|
|
37
|
-
"@lage-run/worker-threads-pool": "^0.9.
|
|
31
|
+
"@lage-run/reporters": "^1.5.1",
|
|
32
|
+
"@lage-run/rpc": "^1.4.4",
|
|
33
|
+
"@lage-run/runners": "^1.4.1",
|
|
34
|
+
"@lage-run/scheduler": "^1.5.21",
|
|
35
|
+
"@lage-run/scheduler-types": "^0.3.32",
|
|
36
|
+
"@lage-run/target-graph": "^0.14.1",
|
|
37
|
+
"@lage-run/worker-threads-pool": "^0.9.4",
|
|
38
38
|
"chokidar": "^3.6.0",
|
|
39
39
|
"commander": "^9.5.0",
|
|
40
40
|
"execa": "^5.1.1",
|
|
@@ -42,11 +42,11 @@
|
|
|
42
42
|
"is-interactive": "^1.0.0",
|
|
43
43
|
"proper-lockfile": "^4.1.2",
|
|
44
44
|
"shell-quote": "^1.8.3",
|
|
45
|
-
"workspace-tools": "^0.41.
|
|
45
|
+
"workspace-tools": "^0.41.1"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@lage-run/monorepo-fixture": "^0.1.0",
|
|
49
48
|
"@lage-run/monorepo-scripts": "^1.0.0",
|
|
49
|
+
"@lage-run/test-utilities": "^0.1.0",
|
|
50
50
|
"@types/proper-lockfile": "^4.1.4",
|
|
51
51
|
"@types/shell-quote": "^1.7.5"
|
|
52
52
|
},
|