@lage-run/cli 0.34.0 → 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/createReporter.d.ts +23 -1
- package/lib/commands/createReporter.js +51 -27
- package/lib/commands/createReporter.js.map +1 -1
- package/lib/commands/exec/action.js +6 -1
- package/lib/commands/exec/action.js.map +1 -1
- package/lib/commands/exec/executeRemotely.js +6 -3
- 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/info/action.d.ts +7 -1
- package/lib/commands/info/action.js +13 -9
- package/lib/commands/info/action.js.map +1 -1
- package/lib/commands/initializeReporters.d.ts +2 -1
- package/lib/commands/initializeReporters.js +3 -3
- package/lib/commands/initializeReporters.js.map +1 -1
- package/lib/commands/launchServerInBackground.js +1 -1
- package/lib/commands/launchServerInBackground.js.map +1 -1
- package/lib/commands/run/createTargetGraph.d.ts +2 -2
- package/lib/commands/run/createTargetGraph.js +28 -10
- 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/runAction.js +5 -2
- package/lib/commands/run/runAction.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 +8 -3
- 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/lib/filter/getFilteredPackages.js +11 -2
- package/lib/filter/getFilteredPackages.js.map +1 -1
- package/lib/filter/hasRepoChanged.d.ts +13 -1
- package/lib/filter/hasRepoChanged.js +14 -12
- package/lib/filter/hasRepoChanged.js.map +1 -1
- package/lib/index.d.ts +4 -2
- package/lib/internal.d.ts +1 -0
- package/lib/internal.js +4 -0
- package/lib/internal.js.map +1 -0
- package/lib/optimizeTargetGraph.js +1 -1
- package/lib/optimizeTargetGraph.js.map +1 -1
- package/lib/types/ReporterInitOptions.d.ts +4 -0
- package/lib/types/ReporterInitOptions.js.map +1 -1
- package/package.json +14 -14
- package/lib/cache/isRunningFromCI.d.ts +0 -1
- package/lib/cache/isRunningFromCI.js +0 -11
- package/lib/cache/isRunningFromCI.js.map +0 -1
- package/lib/commands/isRunningFromCI.d.ts +0 -1
- package/lib/commands/isRunningFromCI.js +0 -11
- package/lib/commands/isRunningFromCI.js.map +0 -1
|
@@ -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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Logger } from "@lage-run/logger";
|
|
2
|
-
import { type TargetGraph } from "@lage-run/target-graph";
|
|
2
|
+
import { type Priority, type TargetGraph } from "@lage-run/target-graph";
|
|
3
3
|
import type { PackageInfos } from "workspace-tools";
|
|
4
|
-
import type { PipelineDefinition
|
|
4
|
+
import type { PipelineDefinition } from "@lage-run/config";
|
|
5
5
|
interface CreateTargetGraphOptions {
|
|
6
6
|
logger: Logger;
|
|
7
7
|
root: string;
|
|
@@ -16,19 +16,32 @@ function getChangedFiles(since, cwd) {
|
|
|
16
16
|
const targetBranch = since || (0, _workspacetools.getDefaultRemoteBranch)({
|
|
17
17
|
cwd
|
|
18
18
|
});
|
|
19
|
-
|
|
19
|
+
return [
|
|
20
20
|
...new Set([
|
|
21
|
-
...(0, _workspacetools.getUntrackedChanges)(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
...(0, _workspacetools.
|
|
21
|
+
...(0, _workspacetools.getUntrackedChanges)({
|
|
22
|
+
cwd
|
|
23
|
+
}) || [],
|
|
24
|
+
...(0, _workspacetools.getUnstagedChanges)({
|
|
25
|
+
cwd
|
|
26
|
+
}) || [],
|
|
27
|
+
...(0, _workspacetools.getBranchChanges)({
|
|
28
|
+
branch: targetBranch,
|
|
29
|
+
cwd
|
|
30
|
+
}) || [],
|
|
31
|
+
...(0, _workspacetools.getStagedChanges)({
|
|
32
|
+
cwd
|
|
33
|
+
}) || []
|
|
25
34
|
])
|
|
26
35
|
];
|
|
27
|
-
return changes;
|
|
28
36
|
}
|
|
29
37
|
async function createTargetGraph(options) {
|
|
30
38
|
const { logger, root, dependencies, dependents, enableTargetConfigMerging, enablePhantomTargetOptimization, since, scope, repoWideChanges, ignore, pipeline, outputs, tasks, packageInfos, priorities } = options;
|
|
31
|
-
const builder = new _targetgraph.WorkspaceTargetGraphBuilder(
|
|
39
|
+
const builder = new _targetgraph.WorkspaceTargetGraphBuilder({
|
|
40
|
+
root,
|
|
41
|
+
packageInfos,
|
|
42
|
+
enableTargetConfigMerging,
|
|
43
|
+
enablePhantomTargetOptimization
|
|
44
|
+
});
|
|
32
45
|
const packages = (0, _getFilteredPackages.getFilteredPackages)({
|
|
33
46
|
root,
|
|
34
47
|
logger,
|
|
@@ -44,7 +57,12 @@ async function createTargetGraph(options) {
|
|
|
44
57
|
// TODO: enhancement would be for workspace-tools to implement a "getChangedPackageFromChangedFiles()" type function
|
|
45
58
|
// TODO: optimize this so that we don't double up the work to determine if repo has changed
|
|
46
59
|
if (since) {
|
|
47
|
-
if (!(0, _hasRepoChanged.hasRepoChanged)(
|
|
60
|
+
if (!(0, _hasRepoChanged.hasRepoChanged)({
|
|
61
|
+
since,
|
|
62
|
+
root,
|
|
63
|
+
environmentGlob: repoWideChanges,
|
|
64
|
+
logger
|
|
65
|
+
})) {
|
|
48
66
|
changedFiles = getChangedFiles(since, root);
|
|
49
67
|
}
|
|
50
68
|
}
|
|
@@ -71,14 +89,14 @@ async function createTargetGraph(options) {
|
|
|
71
89
|
}
|
|
72
90
|
for (const [id, definition] of pipelineEntries){
|
|
73
91
|
if (Array.isArray(definition)) {
|
|
74
|
-
|
|
92
|
+
builder.addTargetConfig(id, {
|
|
75
93
|
cache: true,
|
|
76
94
|
dependsOn: definition,
|
|
77
95
|
options: {},
|
|
78
96
|
outputs
|
|
79
97
|
}, changedFiles);
|
|
80
98
|
} else {
|
|
81
|
-
|
|
99
|
+
builder.addTargetConfig(id, definition, changedFiles);
|
|
82
100
|
}
|
|
83
101
|
}
|
|
84
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 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
|
|
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"}
|
|
@@ -33,12 +33,15 @@ async function runAction(options, command) {
|
|
|
33
33
|
const allowNoTargetRuns = options.allowNoTargetRuns || config.allowNoTargetRuns;
|
|
34
34
|
// Configure logger
|
|
35
35
|
const logger = (0, _logger.default)();
|
|
36
|
+
const root = (0, _workspacetools.getWorkspaceManagerRoot)(cwd) ?? cwd;
|
|
36
37
|
const reporters = await (0, _initializeReporters.initializeReporters)(logger, {
|
|
37
38
|
...options,
|
|
38
39
|
concurrency
|
|
39
|
-
},
|
|
40
|
+
}, {
|
|
41
|
+
customReporters: config.reporters,
|
|
42
|
+
root
|
|
43
|
+
});
|
|
40
44
|
// Build Target Graph
|
|
41
|
-
const root = (0, _workspacetools.getWorkspaceManagerRoot)(process.cwd());
|
|
42
45
|
const packageInfos = (0, _workspacetools.getPackageInfos)(root);
|
|
43
46
|
const { tasks, taskArgs } = (0, _filterArgsForTasks.filterArgsForTasks)(command.args);
|
|
44
47
|
const targetGraph = await (0, _createTargetGraph.createTargetGraph)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/run/runAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { TargetGraph } from \"@lage-run/target-graph\";\nimport { NoTargetFoundError } from \"../../types/errors.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { optimizeTargetGraph } from \"../../optimizeTargetGraph.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function runAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n // Merged options\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n const allowNoTargetRuns = options.allowNoTargetRuns || config.allowNoTargetRuns;\n\n // Configure logger\n const logger = createLogger();\n\n const reporters = await initializeReporters(logger, { ...options, concurrency }, config.reporters);\n\n // Build Target Graph\n const
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/run/runAction.ts"],"sourcesContent":["import type { Command } from \"commander\";\nimport { createTargetGraph } from \"./createTargetGraph.js\";\nimport { filterArgsForTasks } from \"./filterArgsForTasks.js\";\nimport { filterPipelineDefinitions } from \"./filterPipelineDefinitions.js\";\nimport { getConfig, getMaxWorkersPerTask, getMaxWorkersPerTaskFromOptions, getConcurrency } from \"@lage-run/config\";\nimport { getPackageInfos, getWorkspaceManagerRoot } from \"workspace-tools\";\nimport { initializeReporters } from \"../initializeReporters.js\";\nimport { SimpleScheduler } from \"@lage-run/scheduler\";\n\nimport type { Reporter } from \"@lage-run/logger\";\nimport createLogger from \"@lage-run/logger\";\n\nimport type { ReporterInitOptions } from \"../../types/ReporterInitOptions.js\";\nimport type { FilterOptions } from \"../../types/FilterOptions.js\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { TargetGraph } from \"@lage-run/target-graph\";\nimport { NoTargetFoundError } from \"../../types/errors.js\";\nimport { createCache } from \"../../cache/createCacheProvider.js\";\nimport { getBuiltInRunners } from \"../../getBuiltInRunners.js\";\nimport { optimizeTargetGraph } from \"../../optimizeTargetGraph.js\";\n\ninterface RunOptions extends ReporterInitOptions, FilterOptions {\n concurrency: number;\n maxWorkersPerTask: string[];\n profile: string | boolean | undefined;\n skipLocalCache: boolean;\n continue: boolean;\n cache: boolean;\n resetCache: boolean;\n nodeArg: string;\n allowNoTargetRuns: boolean;\n}\n\nexport async function runAction(options: RunOptions, command: Command): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n // Merged options\n const concurrency = getConcurrency(options.concurrency, config.concurrency);\n const allowNoTargetRuns = options.allowNoTargetRuns || config.allowNoTargetRuns;\n\n // Configure logger\n const logger = createLogger();\n\n const root = getWorkspaceManagerRoot(cwd) ?? cwd;\n const reporters = await initializeReporters(logger, { ...options, concurrency }, { customReporters: config.reporters, root });\n\n // Build Target Graph\n const packageInfos = getPackageInfos(root);\n\n const { tasks, taskArgs } = filterArgsForTasks(command.args);\n\n const targetGraph = await createTargetGraph({\n logger,\n root,\n dependencies: options.dependencies,\n dependents: options.dependents && !options.to, // --to is a short hand for --scope + --no-dependents\n ignore: options.ignore.concat(config.ignore),\n pipeline: config.pipeline,\n repoWideChanges: config.repoWideChanges,\n scope: (options.scope ?? []).concat(options.to ?? []), // --to is a short hand for --scope + --no-dependents\n since: options.since,\n outputs: config.cacheOptions.outputGlob,\n tasks,\n packageInfos,\n priorities: config.priorities,\n enableTargetConfigMerging: config.enableTargetConfigMerging,\n enablePhantomTargetOptimization: config.enablePhantomTargetOptimization,\n });\n\n validateTargetGraph(targetGraph, allowNoTargetRuns);\n\n logger.verbose(`Running with ${concurrency} workers`);\n\n const filteredPipeline = filterPipelineDefinitions(targetGraph.targets.values(), config.pipeline);\n\n const maxWorkersPerTaskMap = getMaxWorkersPerTaskFromOptions(options.maxWorkersPerTask);\n\n const { hasher } = await createCache({\n root,\n logger,\n cacheOptions: config.cacheOptions,\n cliArgs: taskArgs,\n skipLocalCache: options.skipLocalCache,\n });\n\n const scheduler = new SimpleScheduler({\n logger,\n concurrency,\n continueOnError: options.continue,\n shouldCache: options.cache,\n shouldResetCache: options.resetCache,\n workerData: {\n root,\n taskArgs,\n skipLocalCache: options.skipLocalCache,\n cacheOptions: config.cacheOptions,\n runners: {\n ...getBuiltInRunners({ nodeArg: options.nodeArg, npmCmd: config.npmClient, taskArgs }),\n ...config.runners,\n },\n },\n maxWorkersPerTask: new Map([...getMaxWorkersPerTask(filteredPipeline, concurrency), ...maxWorkersPerTaskMap]),\n hasher,\n workerIdleMemoryLimit: config.workerIdleMemoryLimit, // in bytes\n });\n\n const optimizedTargets = await optimizeTargetGraph(targetGraph, scheduler.runnerPicker, false);\n const optimizedGraph: TargetGraph = {\n targets: new Map(optimizedTargets.map((target) => [target.id, target])),\n };\n\n const summary = await scheduler.run(root, optimizedGraph);\n await scheduler.cleanup();\n\n displaySummaryAndExit(summary, logger.reporters);\n\n for (const reporter of reporters) {\n reporter.cleanup?.();\n }\n}\n\nfunction displaySummaryAndExit(summary: SchedulerRunSummary, reporters: Reporter[]) {\n if (summary.results !== \"success\") {\n process.exitCode = 1;\n }\n\n for (const reporter of reporters) {\n reporter.summarize(summary);\n }\n}\n\nfunction validateTargetGraph(targetGraph: TargetGraph, allowNoTargetRuns: boolean) {\n const visibleTargets = Array.from(targetGraph.targets.values()).filter((target) => !target.hidden);\n if (visibleTargets.length === 0 && !allowNoTargetRuns) {\n throw NoTargetFoundError;\n }\n}\n"],"names":["runAction","options","command","cwd","process","config","getConfig","concurrency","getConcurrency","allowNoTargetRuns","logger","createLogger","root","getWorkspaceManagerRoot","reporters","initializeReporters","customReporters","packageInfos","getPackageInfos","tasks","taskArgs","filterArgsForTasks","args","targetGraph","createTargetGraph","dependencies","dependents","to","ignore","concat","pipeline","repoWideChanges","scope","since","outputs","cacheOptions","outputGlob","priorities","enableTargetConfigMerging","enablePhantomTargetOptimization","validateTargetGraph","verbose","filteredPipeline","filterPipelineDefinitions","targets","values","maxWorkersPerTaskMap","getMaxWorkersPerTaskFromOptions","maxWorkersPerTask","hasher","createCache","cliArgs","skipLocalCache","scheduler","SimpleScheduler","continueOnError","continue","shouldCache","cache","shouldResetCache","resetCache","workerData","runners","getBuiltInRunners","nodeArg","npmCmd","npmClient","Map","getMaxWorkersPerTask","workerIdleMemoryLimit","optimizedTargets","optimizeTargetGraph","runnerPicker","optimizedGraph","map","target","id","summary","run","cleanup","displaySummaryAndExit","reporter","results","exitCode","summarize","visibleTargets","Array","from","filter","hidden","length","NoTargetFoundError"],"mappings":"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"}
|
|
@@ -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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"}
|
|
@@ -14,6 +14,7 @@ const _lageService = require("./lageService.js");
|
|
|
14
14
|
const _rpc = require("@lage-run/rpc");
|
|
15
15
|
const _parseServerOption = require("../parseServerOption.js");
|
|
16
16
|
const _config = require("@lage-run/config");
|
|
17
|
+
const _workspacetools = require("workspace-tools");
|
|
17
18
|
function _interop_require_default(obj) {
|
|
18
19
|
return obj && obj.__esModule ? obj : {
|
|
19
20
|
default: obj
|
|
@@ -23,16 +24,20 @@ async function serverAction(options) {
|
|
|
23
24
|
const { server = "localhost:5332", timeout = 1, tasks } = options;
|
|
24
25
|
const { host, port } = (0, _parseServerOption.parseServerOption)(server);
|
|
25
26
|
const cwd = process.cwd();
|
|
27
|
+
const root = (0, _workspacetools.getWorkspaceManagerRoot)(cwd) ?? cwd;
|
|
26
28
|
const config = await (0, _config.getConfig)(cwd);
|
|
27
29
|
const logger = (0, _logger.default)();
|
|
28
30
|
options.logLevel = options.logLevel ?? "info";
|
|
29
31
|
options.logFile = options.logFile ?? "node_modules/.cache/lage/server.log";
|
|
30
32
|
options.reporter = options.reporter ?? "verboseFileLog";
|
|
31
|
-
await (0, _initializeReporters.initializeReporters)(logger, options,
|
|
33
|
+
await (0, _initializeReporters.initializeReporters)(logger, options, {
|
|
34
|
+
customReporters: config.reporters,
|
|
35
|
+
root
|
|
36
|
+
});
|
|
32
37
|
logger.info(`Starting server on http://${host}:${port}`);
|
|
33
38
|
const abortController = new AbortController();
|
|
34
|
-
const lageService =
|
|
35
|
-
cwd
|
|
39
|
+
const lageService = (0, _lageService.createLageService)({
|
|
40
|
+
cwd,
|
|
36
41
|
serverControls: {
|
|
37
42
|
abortController,
|
|
38
43
|
countdownToShutdown: ()=>resetTimer(logger, timeout, abortController, lageServer),
|
|
@@ -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\";\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 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, config.reporters);\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":";;;;+BA+JgBA;;;eAAAA;;;wBA/JoE;qBAE9B;6BACU;gCACa;mCAC3C;mCAEQ;wBACoB;gCAC/B;8BACF;mCACK;2CACQ;8BAEc;6DACvC;2DACF;oCAC6C;;;;;;AAY5D,IAAIC;AAgBJ,SAASC,YAAYC,KAAa;IAChC,OAAO,GAAG,AAACA,CAAAA,QAAQ,OAAO,IAAG,EAAGC,OAAO,CAAC,GAAG,GAAG,CAAC;AACjD;AAEA,eAAeC,yBAAyB,EAAEC,GAAG,EAAEC,MAAM,EAAEC,cAAc,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,KAAK,EAAqB;IAC/H,IAAIX,oBAAoB;QACtB,OAAOA;IACT;IAEA,MAAMY,SAAS,MAAMC,IAAAA,iBAAS,EAACR;IAC/B,MAAMS,OAAOC,IAAAA,uCAAuB,EAACV;IACrC,MAAMW,aAAaC,IAAAA,sBAAc,EAACP,aAAaE,OAAOF,WAAW;IAEjEJ,OAAOY,IAAI,CAAC,CAAC,kBAAkB,EAAEF,WAAW,iBAAiB,EAAEL,MAAMQ,IAAI,CAAC,OAAO;IAEjF,MAAM,EAAEC,QAAQ,EAAE,GAAGR;IAErB,MAAMS,eAAeC,IAAAA,+BAAe,EAACR;IAErCR,OAAOY,IAAI,CAAC;IACZ,MAAMK,cAAc,MAAMC,IAAAA,oCAAiB,EAAC;QAC1ClB;QACAQ;QACAW,cAAc;QACdC,YAAY;QACZC,QAAQ,EAAE;QACVP;QACAQ,iBAAiBhB,OAAOgB,eAAe;QACvCC,OAAOC;QACPC,OAAOD;QACPE,SAASpB,OAAOqB,YAAY,CAACC,UAAU;QACvCvB;QACAU;QACAc,YAAYvB,OAAOuB,UAAU;QAC7BC,2BAA2BxB,OAAOwB,yBAAyB;QAC3DC,iCAAiCzB,OAAOyB,+BAA+B;IACzE;IAEA,MAAMC,eAAe,IAAIC,oBAAY,CAAC;QACpCzB;QACA0B,iBAAiB5B,OAAOqB,YAAY,EAAEO,mBAAmB,EAAE;QAC3DlC;QACAmC,UAAU7B,OAAOqB,YAAY,EAAEQ;QAC/BC,SAASjC;IACX;IAEAH,OAAOY,IAAI,CAAC;IACZ,MAAMoB,aAAaK,UAAU;IAE7BrC,OAAOY,IAAI,CAAC;IAEZ,MAAM0B,cAAcN,aAAaM,WAAW;IAC5C,MAAMC,gBAAgBP,aAAaO,aAAa;IAEhD,MAAMC,mBAAmBC,IAAAA,oDAAyB,EAACxB,YAAYyB,OAAO,CAACC,MAAM,IAAIrC,OAAOQ,QAAQ;IAEhGd,OAAOY,IAAI,CAAC;IACZ,MAAMgC,OAAO,IAAIC,iCAAc,CAAC;QAC9B7C;QACA8C,mBAAmB,IAAIC,IAAI;eAAIC,IAAAA,4BAAoB,EAACR,kBAAkB9B;SAAY;QAClFuC,SAAS,CAAC,EAAEC,MAAM,EAAE,GAAKA,OAAOC,IAAI;QACpCzC;QACA0C,QAAQC,QAAQC,OAAO,CAAC;QACxBC,eAAe;YACbC,QAAQ;YACRC,QAAQ;YACRC,YAAY;gBACVC,SAAS;oBACP,GAAGC,IAAAA,oCAAiB,EAAC;wBAAE1D;wBAAS2D,QAAQvD,OAAOwD,SAAS;wBAAE3D;oBAAS,EAAE;oBACrE,GAAGG,OAAOqD,OAAO;oBACjBI,aAAa;oBACbC,kBAAkB;gBACpB;YACF;QACF;QACAC,uBAAuB3D,OAAO2D,qBAAqB;IACrD;IAEAhE,eAAeiE,eAAe,CAACC,MAAM,CAACC,gBAAgB,CAAC,SAAS;QAC9D,KAAKxB,MAAMyB;IACb;IAEAzB,MAAM0B,GAAG,eAAe;QACtBtE,OAAOuE,KAAK,CAAC,CAAC,yBAAyB,EAAE5E,YAAYiD,MAAM4B,QAAQC,uBAAuB;IAC5F;IAEA7B,MAAM0B,GAAG,QAAQ;QACftE,OAAOY,IAAI,CAAC;QACZX,eAAeyE,mBAAmB;IACpC;IAEA1E,OAAOY,IAAI,CAAC;IACZ,OAAO;QAAEN;QAAQW;QAAaqB;QAAaC;QAAe/B;QAAMoC;QAAMZ;IAAa;AACrF;AAEA;;;;;CAKC,GACD,eAAeK,WAAWsC,OAA0B;IAClDjF,qBAAqBI,yBAAyB6E;IAC9C,OAAOjF;AACT;AAUO,SAASD,kBAAkB,EAAEM,GAAG,EAAEE,cAAc,EAAED,MAAM,EAAEI,WAAW,EAAEC,KAAK,EAA4B;IAC7G,OAAO;QACL,4DAA4D;QAC5D,MAAMuE;YACJ,OAAO;gBAAEC,MAAM;YAAK;QACtB;QAEA,MAAMC,WAAUC,OAAO;YACrB,IAAIC,OAAOC,EAAE,EAAE;gBACbD,OAAOC,EAAE;YACX;YAEAhF,eAAeiF,cAAc;YAE7B,2FAA2F;YAC3F,qIAAqI;YACrI,mBAAmB;YACnB,MAAM,EAAE5E,MAAM,EAAEW,WAAW,EAAEsB,aAAa,EAAED,WAAW,EAAE9B,IAAI,EAAEoC,IAAI,EAAEZ,YAAY,EAAE,GAAG,MAAMK,WAAW;gBACrGtC;gBACAC;gBACAE,SAAS6E,QAAQI,WAAW;gBAC5BhF,UAAU4E,QAAQ5E,QAAQ;gBAC1BF;gBACAG;gBACAC;YACF;YAEA,MAAMsD,UAAUC,IAAAA,oCAAiB,EAAC;gBAAE1D,SAAS6E,QAAQI,WAAW;gBAAEtB,QAAQvD,OAAOwD,SAAS;gBAAE3D,UAAU4E,QAAQ5E,QAAQ;YAAC;YAEvH,MAAMiF,KAAKC,IAAAA,wBAAW,EAACN,QAAQO,WAAW,EAAEP,QAAQ5B,IAAI;YAExD,IAAI,CAAClC,YAAYyB,OAAO,CAAC6C,GAAG,CAACH,KAAK;gBAChCpF,OAAOY,IAAI,CAAC,CAAC,kBAAkB,EAAEmE,QAAQO,WAAW,CAAC,CAAC,EAAEP,QAAQ5B,IAAI,EAAE;gBACtE,OAAO;oBACLmC,aAAaP,QAAQO,WAAW;oBAChCnC,MAAM4B,QAAQ5B,IAAI;oBAClBqC,UAAU;gBACZ;YACF;YAEAxF,OAAOY,IAAI,CAAC,CAAC,gBAAgB,EAAEmE,QAAQO,WAAW,CAAC,CAAC,EAAEP,QAAQ5B,IAAI,EAAE;YAEpE,MAAMD,SAASjC,YAAYyB,OAAO,CAAC+C,GAAG,CAACL;YACvC,MAAMjC,OAAO;gBACXD;gBACAS;YACF;YAEA,MAAM+B,iBAAiB,IAAIC,0BAAY;YACvC,MAAMC,iBAAiB,IAAID,0BAAY;YACvC,IAAIE;YACJ,IAAIC;YAEJ,MAAMC,YAAuB;gBAC3BC,WAAWC,QAAQC,MAAM;gBACzBhD;gBACAiD,UAAU;oBAAC;oBAAG;iBAAE;gBAChBC,WAAW;oBAAC;oBAAG;iBAAE;gBACjBC,QAAQ;gBACRC,UAAU;YACZ;YAEA,IAAIC;YAaJ,MAAMC,SAASC,IAAAA,qBAAa,EAACvD,QAAQX,eAAeD;YAEpD,KAAK,MAAMoE,OAAOxD,OAAO/B,YAAY,CAAE;gBACrC,IAAIuF,QAAQC,IAAAA,6BAAgB,KAAI;oBAC9B;gBACF;gBAEA,MAAMC,YAAY3F,YAAYyB,OAAO,CAAC+C,GAAG,CAACiB;gBAC1CF,OAAOK,IAAI,CAACC,aAAI,CAACjG,IAAI,CAACiG,aAAI,CAACC,QAAQ,CAACvG,MAAMoG,UAAU7G,GAAG,GAAGiH,IAAAA,mCAAe,EAACJ,YAAYK,OAAO,CAAC,OAAO;YACvG;YAEA,4DAA4D;YAC5D,MAAMC,iBAAiBF,IAAAA,mCAAe,EAAC9D;YACvC,MAAMiE,qBAAqBL,aAAI,CAACjG,IAAI,CAACqC,OAAOnD,GAAG,EAAEmH;YAEjD,IAAI;gBACF,IAAI,CAACE,WAAE,CAACC,UAAU,CAACP,aAAI,CAACQ,OAAO,CAACH,sBAAsB;oBACpDC,WAAE,CAACG,SAAS,CAACT,aAAI,CAACQ,OAAO,CAACH,qBAAqB;wBAAEK,WAAW;oBAAK;gBACnE;gBAEAJ,WAAE,CAACK,aAAa,CAACN,oBAAoB,MAAMnF,aAAa0F,IAAI,CAACxE;YAC/D,EAAE,OAAOyE,GAAG;gBACV,MAAM,IAAIC,iBAAY,CAAC,CAAC,gCAAgC,EAAET,oBAAoB,EAAEU,SAAI,CAACC,QAAQ;YAC/F;YAEA,MAAMC,oCAAoCC,IAAAA,8CAA0B,EAAC9E;YAErE,IAAI;gBACF,MAAMN,KAAKqF,IAAI,CACb9E,MACA,GACA,CAAC+E,QAAQ1E,QAAQC;oBACfzD,OAAOY,IAAI,CAAC,CAAC,CAAC,EAAEsH,OAAO5B,QAAQ,CAAC,EAAE,EAAEvB,QAAQO,WAAW,CAAC,CAAC,EAAEP,QAAQ5B,IAAI,CAAC,MAAM,CAAC;oBAE/E0C,cAAcrC;oBACdsC,cAAcrC;oBAEdD,OAAO2E,IAAI,CAACzC;oBACZjC,OAAO0E,IAAI,CAACvC;oBAEZG,UAAUO,QAAQ,GAAG4B,OAAO5B,QAAQ;oBACpCP,UAAUM,MAAM,GAAG;oBACnBN,UAAUK,SAAS,GAAGH,QAAQC,MAAM;gBACtC,GACA,CAACgC;oBACClI,OAAOY,IAAI,CAAC,CAAC,yBAAyB,EAAEjB,YAAYiD,KAAK4B,KAAK,GAAGC,oBAAoB,GAAG;oBAExF,4CAA4C;oBAC5C,MAAM2D,cAAcnC,QAAQmC,WAAW;oBACvCpI,OAAOY,IAAI,CACT,CAAC,gCAAgC,EAAEjB,YAAYyI,YAAYC,GAAG,EAAE,aAAa,EAAE1I,YAC7EyI,YAAYE,SAAS,EACrB,YAAY,EAAE3I,YAAYyI,YAAYG,QAAQ,GAAG;oBAGrDxC,UAAUM,MAAM,GAAG;oBACnBN,UAAUI,QAAQ,GAAGqC,IAAAA,wBAAU,EAACzC,UAAUK,SAAS,EAAEH,QAAQC,MAAM;oBAEnElG,OAAOY,IAAI,CACT,CAAC,CAAC,EAAEsH,OAAO5B,QAAQ,CAAC,EAAE,EAAEvB,QAAQO,WAAW,CAAC,CAAC,EAAEP,QAAQ5B,IAAI,CAAC,MAAM,EAAEsF,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAAC3C,UAAUI,QAAQ,IAAI;oBAEvHN,YAAY8C,MAAM,CAACjD;oBACnBI,YAAY6C,MAAM,CAAC/C;gBACrB;gBAGF,MAAMlE,UAAUkH,IAAAA,8BAAc,EAACpI,MAAM0C,QAAQ5C,OAAOqB,YAAY,EAAEC,YAAYU;gBAC9E,MAAMuG,6BAA6B/B,aAAI,CAACC,QAAQ,CAACvG,MAAM2G,oBAAoBF,OAAO,CAAC,OAAO;gBAC1FvF,QAAQmF,IAAI,CAACgC;gBAEbtC,UAAU;oBACRjB,aAAaP,QAAQO,WAAW;oBAChCnC,MAAM4B,QAAQ5B,IAAI;oBAClBpD,KAAKmD,OAAOnD,GAAG;oBACfyF,UAAU;oBACVgB;oBACA9E;oBACA8B,QAAQkC,eAAeoD,QAAQ;oBAC/BrF,QAAQmC,eAAekD,QAAQ;oBAC/B1D;oBACA2D,qBAAqBhB;gBACvB;YACF,EAAE,OAAOJ,GAAG;gBACV,MAAMjG,UAAUkH,IAAAA,8BAAc,EAACpI,MAAM0C,QAAQ5C,OAAOqB,YAAY,EAAEC,YAAYU;gBAC9E,MAAMuG,6BAA6B/B,aAAI,CAACC,QAAQ,CAACvG,MAAM2G,oBAAoBF,OAAO,CAAC,OAAO;gBAC1FvF,QAAQmF,IAAI,CAACgC;gBAEb9C,UAAUM,MAAM,GAAG;gBACnBN,UAAUI,QAAQ,GAAGqC,IAAAA,wBAAU,EAACzC,UAAUK,SAAS,EAAEH,QAAQC,MAAM;gBAEnEK,UAAU;oBACRjB,aAAaP,QAAQO,WAAW;oBAChCnC,MAAM4B,QAAQ5B,IAAI;oBAClBpD,KAAKmD,OAAOnD,GAAG;oBACfyF,UAAU;oBACVgB;oBACA9E;oBACA8B,QAAQ;oBACRC,QAAQkE,aAAaqB,QAAQrB,EAAEmB,QAAQ,KAAK;oBAC5C1D;oBACA2D,qBAAqBhB;gBACvB;YACF;YAEA/H,OAAOY,IAAI,CACT,GAAGmE,QAAQO,WAAW,CAAC,CAAC,EAAEP,QAAQ5B,IAAI,CAAC,YAAY,EAAE8F,KAAKC,SAAS,CACjE;gBACE5D,aAAaiB,QAAQjB,WAAW;gBAChCnC,MAAMoD,QAAQpD,IAAI;gBAClBpD,KAAKwG,QAAQxG,GAAG;gBAChByF,UAAUe,QAAQf,QAAQ;gBAC1BgB,QAAQD,QAAQC,MAAM;gBACtB9E,SAAS6E,QAAQ7E,OAAO;gBACxB0D,IAAImB,QAAQnB,EAAE;gBACd2D,qBAAqBhB;YACvB,GACA,MACA,GACA,QAAQ,CAAC,EACXxB;YAGF,OAAOA;QACT;IACF;AACF"}
|