@lage-run/scheduler 0.3.13 → 0.4.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/CHANGELOG.json CHANGED
@@ -2,7 +2,55 @@
2
2
  "name": "@lage-run/scheduler",
3
3
  "entries": [
4
4
  {
5
- "date": "Mon, 03 Oct 2022 19:57:12 GMT",
5
+ "date": "Tue, 04 Oct 2022 03:38:40 GMT",
6
+ "tag": "@lage-run/scheduler_v0.4.0",
7
+ "version": "0.4.0",
8
+ "comments": {
9
+ "minor": [
10
+ {
11
+ "author": "kchau@microsoft.com",
12
+ "package": "@lage-run/scheduler",
13
+ "commit": "34e76ae75fc56a1374115e630a7dfc81b1fa6ead",
14
+ "comment": "Brand new scheduler (ported p-graph over)"
15
+ },
16
+ {
17
+ "author": "beachball",
18
+ "package": "@lage-run/scheduler",
19
+ "comment": "Bump @lage-run/worker-threads-pool to v0.1.6",
20
+ "commit": "34e76ae75fc56a1374115e630a7dfc81b1fa6ead"
21
+ },
22
+ {
23
+ "author": "beachball",
24
+ "package": "@lage-run/scheduler",
25
+ "comment": "Bump @lage-run/scheduler-types to v0.1.4",
26
+ "commit": "34e76ae75fc56a1374115e630a7dfc81b1fa6ead"
27
+ }
28
+ ]
29
+ }
30
+ },
31
+ {
32
+ "date": "Mon, 03 Oct 2022 20:41:25 GMT",
33
+ "tag": "@lage-run/scheduler_v0.3.14",
34
+ "version": "0.3.14",
35
+ "comments": {
36
+ "patch": [
37
+ {
38
+ "author": "beachball",
39
+ "package": "@lage-run/scheduler",
40
+ "comment": "Bump @lage-run/worker-threads-pool to v0.1.5",
41
+ "commit": "68c7fda6d0c1757b353d406b21223295c9830767"
42
+ },
43
+ {
44
+ "author": "beachball",
45
+ "package": "@lage-run/scheduler",
46
+ "comment": "Bump @lage-run/scheduler-types to v0.1.3",
47
+ "commit": "68c7fda6d0c1757b353d406b21223295c9830767"
48
+ }
49
+ ]
50
+ }
51
+ },
52
+ {
53
+ "date": "Mon, 03 Oct 2022 19:57:28 GMT",
6
54
  "tag": "@lage-run/scheduler_v0.3.13",
7
55
  "version": "0.3.13",
8
56
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,31 @@
1
1
  # Change Log - @lage-run/scheduler
2
2
 
3
- This log was last generated on Mon, 03 Oct 2022 19:57:12 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 04 Oct 2022 03:38:40 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.4.0
8
+
9
+ Tue, 04 Oct 2022 03:38:40 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - Brand new scheduler (ported p-graph over) (kchau@microsoft.com)
14
+ - Bump @lage-run/worker-threads-pool to v0.1.6
15
+ - Bump @lage-run/scheduler-types to v0.1.4
16
+
17
+ ## 0.3.14
18
+
19
+ Mon, 03 Oct 2022 20:41:25 GMT
20
+
21
+ ### Patches
22
+
23
+ - Bump @lage-run/worker-threads-pool to v0.1.5
24
+ - Bump @lage-run/scheduler-types to v0.1.3
25
+
7
26
  ## 0.3.13
8
27
 
9
- Mon, 03 Oct 2022 19:57:12 GMT
28
+ Mon, 03 Oct 2022 19:57:28 GMT
10
29
 
11
30
  ### Patches
12
31
 
@@ -3,9 +3,10 @@ import { WrappedTarget } from "./WrappedTarget";
3
3
  import type { AbortSignal } from "abort-controller";
4
4
  import type { CacheProvider, TargetHasher } from "@lage-run/cache";
5
5
  import type { Logger } from "@lage-run/logger";
6
- import type { SchedulerRunSummary, TargetScheduler } from "@lage-run/scheduler-types";
7
- import type { TargetGraph } from "@lage-run/target-graph";
8
- import type { TargetRunnerPicker } from "./runners/TargetRunnerPicker";
6
+ import type { TargetGraph, Target } from "@lage-run/target-graph";
7
+ import type { TargetScheduler, SchedulerRunSummary } from "@lage-run/scheduler-types";
8
+ import type { Pool } from "@lage-run/worker-threads-pool";
9
+ import type { TargetRunnerPickerOptions } from "./runners/TargetRunnerPicker";
9
10
  export interface SimpleSchedulerOptions {
10
11
  logger: Logger;
11
12
  concurrency: number;
@@ -14,9 +15,9 @@ export interface SimpleSchedulerOptions {
14
15
  hasher: TargetHasher;
15
16
  shouldCache: boolean;
16
17
  shouldResetCache: boolean;
17
- runnerPicker: {
18
- pick: TargetRunnerPicker["pick"];
19
- };
18
+ runners: TargetRunnerPickerOptions;
19
+ maxWorkersPerTask: Map<string, number>;
20
+ pool?: Pool;
20
21
  }
21
22
  /**
22
23
  * Simple scheduler that runs all targets in a promise graph using p-graph library.
@@ -32,9 +33,12 @@ export interface SimpleSchedulerOptions {
32
33
  */
33
34
  export declare class SimpleScheduler implements TargetScheduler {
34
35
  private options;
35
- wrappedTargets: Map<string, WrappedTarget>;
36
+ targetRuns: Map<string, WrappedTarget>;
37
+ targetsByPriority: Target[];
36
38
  abortController: AbortController;
37
39
  abortSignal: AbortSignal;
40
+ dependencies: [string, string][];
41
+ pool: Pool;
38
42
  constructor(options: SimpleSchedulerOptions);
39
43
  /**
40
44
  * The job of the run method is to:
@@ -47,6 +51,14 @@ export declare class SimpleScheduler implements TargetScheduler {
47
51
  * @returns
48
52
  */
49
53
  run(root: string, targetGraph: TargetGraph): Promise<SchedulerRunSummary>;
54
+ /**
55
+ * Used by consumers of the scheduler to notify that the inputs to the target has changed
56
+ * @param targetId
57
+ */
58
+ onTargetChange(targetId: string): void;
59
+ getReadyTargets(): WrappedTarget[];
60
+ isAllDone(): boolean;
61
+ scheduleReadyTargets(): Promise<any[] | undefined>;
50
62
  /**
51
63
  * Abort the scheduler using the abort controller.
52
64
  */
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.SimpleScheduler = void 0;
7
4
  const abort_controller_1 = require("abort-controller");
8
5
  const categorizeTargetRuns_1 = require("./categorizeTargetRuns");
6
+ const target_graph_1 = require("@lage-run/target-graph");
9
7
  const WrappedTarget_1 = require("./WrappedTarget");
10
- const p_graph_1 = __importDefault(require("p-graph"));
8
+ const worker_threads_pool_1 = require("@lage-run/worker-threads-pool");
11
9
  /**
12
10
  * Simple scheduler that runs all targets in a promise graph using p-graph library.
13
11
  *
@@ -22,10 +20,25 @@ const p_graph_1 = __importDefault(require("p-graph"));
22
20
  */
23
21
  class SimpleScheduler {
24
22
  constructor(options) {
23
+ var _a;
25
24
  this.options = options;
26
- this.wrappedTargets = new Map();
25
+ this.targetRuns = new Map();
26
+ this.targetsByPriority = [];
27
27
  this.abortController = new abort_controller_1.AbortController();
28
28
  this.abortSignal = this.abortController.signal;
29
+ this.dependencies = [];
30
+ this.pool =
31
+ (_a = options.pool) !== null && _a !== void 0 ? _a : new worker_threads_pool_1.WorkerPool({
32
+ maxWorkers: options.concurrency,
33
+ script: require.resolve("./workers/targetWorker"),
34
+ workerOptions: {
35
+ stdout: true,
36
+ stderr: true,
37
+ workerData: {
38
+ runners: options.runners,
39
+ },
40
+ },
41
+ });
29
42
  }
30
43
  /**
31
44
  * The job of the run method is to:
@@ -39,12 +52,13 @@ class SimpleScheduler {
39
52
  */
40
53
  async run(root, targetGraph) {
41
54
  const startTime = process.hrtime();
42
- const { concurrency, continueOnError, logger, cacheProvider, shouldCache, shouldResetCache, hasher, runnerPicker } = this.options;
55
+ const { continueOnError, logger, cacheProvider, shouldCache, shouldResetCache, hasher } = this.options;
56
+ const { pool, abortController } = this;
43
57
  const { dependencies, targets } = targetGraph;
44
- const pGraphNodes = new Map();
45
- const pGraphEdges = dependencies;
58
+ this.dependencies = dependencies;
59
+ this.targetsByPriority = (0, target_graph_1.sortTargetsByPriority)([...targets.values()]);
46
60
  for (const target of targets.values()) {
47
- const wrappedTarget = new WrappedTarget_1.WrappedTarget({
61
+ const targetRun = new WrappedTarget_1.WrappedTarget({
48
62
  target,
49
63
  root,
50
64
  logger,
@@ -53,39 +67,27 @@ class SimpleScheduler {
53
67
  shouldCache,
54
68
  shouldResetCache,
55
69
  continueOnError,
56
- abortController: this.abortController,
57
- });
58
- this.wrappedTargets.set(target.id, wrappedTarget);
59
- pGraphNodes.set(target.id, {
60
- /**
61
- * Picks the runner, and run the wrapped target with the runner
62
- */
63
- run: async () => {
64
- if (this.abortSignal.aborted) {
65
- return;
66
- }
67
- const runner = runnerPicker.pick(target);
68
- return this.wrappedTargets.get(target.id).run(runner);
69
- },
70
- priority: target.priority,
70
+ abortController,
71
+ pool,
71
72
  });
73
+ if (target.id === (0, target_graph_1.getStartTargetId)()) {
74
+ targetRun.status = "success";
75
+ }
76
+ this.targetRuns.set(target.id, targetRun);
72
77
  }
73
78
  let results = "failed";
74
79
  let error;
75
80
  let duration = [0, 0];
76
81
  let targetRunByStatus;
77
82
  try {
78
- await (0, p_graph_1.default)(pGraphNodes, pGraphEdges).run({
79
- concurrency,
80
- continue: continueOnError,
81
- });
83
+ await this.scheduleReadyTargets();
82
84
  }
83
85
  catch (e) {
84
86
  error = e instanceof Error ? e.message : String(e);
85
87
  }
86
88
  finally {
87
89
  duration = process.hrtime(startTime);
88
- targetRunByStatus = (0, categorizeTargetRuns_1.categorizeTargetRuns)([...this.wrappedTargets.values()]);
90
+ targetRunByStatus = (0, categorizeTargetRuns_1.categorizeTargetRuns)([...this.targetRuns.values()]);
89
91
  if (targetRunByStatus.failed.length +
90
92
  targetRunByStatus.aborted.length +
91
93
  targetRunByStatus.pending.length +
@@ -94,15 +96,98 @@ class SimpleScheduler {
94
96
  results = "success";
95
97
  }
96
98
  }
99
+ await this.pool.close();
97
100
  return {
98
101
  targetRunByStatus,
99
- targetRuns: this.wrappedTargets,
102
+ targetRuns: this.targetRuns,
100
103
  duration,
101
104
  startTime,
102
105
  results,
103
106
  error,
104
107
  };
105
108
  }
109
+ /**
110
+ * Used by consumers of the scheduler to notify that the inputs to the target has changed
111
+ * @param targetId
112
+ */
113
+ onTargetChange(targetId) {
114
+ const queue = [targetId];
115
+ while (queue.length > 0) {
116
+ const current = queue.shift();
117
+ const targetRun = this.targetRuns.get(current);
118
+ if (targetRun.status !== "pending") {
119
+ targetRun.status = "pending";
120
+ const dependents = targetRun.target.dependents;
121
+ for (const dependent of dependents) {
122
+ queue.push(dependent);
123
+ }
124
+ }
125
+ }
126
+ this.scheduleReadyTargets();
127
+ }
128
+ getReadyTargets() {
129
+ var _a, _b, _c;
130
+ const { maxWorkersPerTask, concurrency } = this.options;
131
+ const readyTargets = [];
132
+ const runningTargets = this.targetsByPriority.filter((target) => this.targetRuns.get(target.id).status === "running");
133
+ const runningTargetsCountByTask = {};
134
+ for (const target of runningTargets) {
135
+ runningTargetsCountByTask[target.task] =
136
+ typeof runningTargetsCountByTask[target.task] !== "number" ? 1 : runningTargetsCountByTask[target.task]++;
137
+ }
138
+ for (const target of this.targetsByPriority) {
139
+ if (target.id === (0, target_graph_1.getStartTargetId)()) {
140
+ continue;
141
+ }
142
+ const targetRun = this.targetRuns.get(target.id);
143
+ const targetDeps = targetRun.target.dependencies;
144
+ // filter all dependencies for those that are "ready"
145
+ const ready = targetDeps.every((dep) => {
146
+ const fromTarget = this.targetRuns.get(dep);
147
+ return fromTarget.status === "success" || fromTarget.status === "skipped" || dep === (0, target_graph_1.getStartTargetId)();
148
+ });
149
+ const maxWorkers = (_a = maxWorkersPerTask.get(target.task)) !== null && _a !== void 0 ? _a : concurrency;
150
+ if (ready && targetRun.status === "pending" && ((_b = runningTargetsCountByTask[target.task]) !== null && _b !== void 0 ? _b : 0) < maxWorkers) {
151
+ readyTargets.push(targetRun);
152
+ runningTargetsCountByTask[target.task] = ((_c = runningTargetsCountByTask[target.task]) !== null && _c !== void 0 ? _c : 0) + 1;
153
+ }
154
+ }
155
+ return readyTargets;
156
+ }
157
+ isAllDone() {
158
+ for (const t of this.targetRuns.values()) {
159
+ if (t.status !== "skipped" && t.status !== "success" && t.target.id !== (0, target_graph_1.getStartTargetId)()) {
160
+ return false;
161
+ }
162
+ }
163
+ return true;
164
+ }
165
+ async scheduleReadyTargets() {
166
+ if (this.isAllDone() || this.abortSignal.aborted) {
167
+ return;
168
+ }
169
+ const promises = [];
170
+ for (const nextTarget of this.getReadyTargets()) {
171
+ promises.push(nextTarget
172
+ .run()
173
+ .then(() => {
174
+ return this.scheduleReadyTargets();
175
+ })
176
+ .catch((e) => {
177
+ var _a;
178
+ // if a continue option is set, this merely records what errors have been encountered
179
+ // it'll continue down the execution until all the tasks that still works
180
+ if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.continueOnError) {
181
+ return this.scheduleReadyTargets();
182
+ }
183
+ else {
184
+ // immediately reject, if not using "continue" option
185
+ throw e;
186
+ }
187
+ }));
188
+ }
189
+ return await Promise.all(promises);
190
+ }
106
191
  /**
107
192
  * Abort the scheduler using the abort controller.
108
193
  */
@@ -111,4 +196,5 @@ class SimpleScheduler {
111
196
  }
112
197
  }
113
198
  exports.SimpleScheduler = SimpleScheduler;
199
+ encodeURI;
114
200
  //# sourceMappingURL=SimpleScheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleScheduler.js","sourceRoot":"","sources":["../src/SimpleScheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SimpleScheduler.js","sourceRoot":"","sources":["../src/SimpleScheduler.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AACnD,iEAA8D;AAC9D,yDAAiF;AACjF,mDAAgD;AAChD,uEAA2D;AAuB3D;;;;;;;;;;;GAWG;AACH,MAAa,eAAe;IAQ1B,YAAoB,OAA+B;;QAA/B,YAAO,GAAP,OAAO,CAAwB;QAPnD,eAAU,GAA+B,IAAI,GAAG,EAAE,CAAC;QACnD,sBAAiB,GAAa,EAAE,CAAC;QACjC,oBAAe,GAAoB,IAAI,kCAAe,EAAE,CAAC;QACzD,gBAAW,GAAgB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QACvD,iBAAY,GAAuB,EAAE,CAAC;QAIpC,IAAI,CAAC,IAAI;YACP,MAAA,OAAO,CAAC,IAAI,mCACZ,IAAI,gCAAU,CAAC;gBACb,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC;gBACjD,aAAa,EAAE;oBACb,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,IAAI;oBACZ,UAAU,EAAE;wBACV,OAAO,EAAE,OAAO,CAAC,OAAO;qBACzB;iBACF;aACF,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,WAAwB;QAC9C,MAAM,SAAS,GAAqB,OAAO,CAAC,MAAM,EAAE,CAAC;QAErD,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvG,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QAEvC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAA,oCAAqB,EAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,IAAI,6BAAa,CAAC;gBAClC,MAAM;gBACN,IAAI;gBACJ,MAAM;gBACN,aAAa;gBACb,MAAM;gBACN,WAAW;gBACX,gBAAgB;gBAChB,eAAe;gBACf,eAAe;gBACf,IAAI;aACL,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,EAAE,KAAK,IAAA,+BAAgB,GAAE,EAAE;gBACpC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC;aAC9B;YAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SAC3C;QAED,IAAI,OAAO,GAAwB,QAAQ,CAAC;QAC5C,IAAI,KAAyB,CAAC;QAC9B,IAAI,QAAQ,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,iBAAmC,CAAC;QAExC,IAAI;YACF,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACnC;QAAC,OAAO,CAAC,EAAE;YACV,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACpD;gBAAS;YACR,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,iBAAiB,GAAG,IAAA,2CAAoB,EAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAExE,IACE,iBAAiB,CAAC,MAAM,CAAC,MAAM;gBAC7B,iBAAiB,CAAC,OAAO,CAAC,MAAM;gBAChC,iBAAiB,CAAC,OAAO,CAAC,MAAM;gBAChC,iBAAiB,CAAC,OAAO,CAAC,MAAM;gBAClC,CAAC,EACD;gBACA,OAAO,GAAG,SAAS,CAAC;aACrB;SACF;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAExB,OAAO;YACL,iBAAiB;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ;YACR,SAAS;YACT,OAAO;YACP,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,QAAgB;QAC7B,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;YAEhD,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE;gBAClC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC/C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;oBAClC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACvB;aACF;SACF;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,eAAe;;QACb,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAExD,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACvH,MAAM,yBAAyB,GAAG,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;YACnC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC;gBACpC,OAAO,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7G;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC3C,IAAI,MAAM,CAAC,EAAE,KAAK,IAAA,+BAAgB,GAAE,EAAE;gBACpC,SAAS;aACV;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC;YAClD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;YAEjD,qDAAqD;YACrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBAC7C,OAAO,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,KAAK,IAAA,+BAAgB,GAAE,CAAC;YAC1G,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,MAAA,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAI,WAAW,CAAC;YAErE,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAA,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAI,CAAC,CAAC,GAAG,UAAU,EAAE;gBACzG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAA,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;aAC5F;SACF;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,SAAS;QACP,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,IAAA,+BAAgB,GAAE,EAAE;gBAC1F,OAAO,KAAK,CAAC;aACd;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YAChD,OAAO;SACR;QAED,MAAM,QAAQ,GAAmB,EAAE,CAAC;QAEpC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAC/C,QAAQ,CAAC,IAAI,CACX,UAAU;iBACP,GAAG,EAAE;iBACL,IAAI,CAAC,GAAG,EAAE;gBACT,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrC,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;;gBACX,qFAAqF;gBACrF,yEAAyE;gBACzE,IAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,eAAe,EAAE;oBACjC,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBACpC;qBAAM;oBACL,qDAAqD;oBACrD,MAAM,CAAC,CAAC;iBACT;YACH,CAAC,CAAC,CACL,CAAC;SACH;QAED,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF;AA9MD,0CA8MC;AACD,SAAS,CAAC"}
@@ -1,9 +1,10 @@
1
- import type { Logger } from "@lage-run/logger";
2
- import type { TargetHasher } from "@lage-run/cache";
3
1
  import type { AbortController } from "abort-controller";
4
2
  import type { CacheProvider } from "@lage-run/cache";
3
+ import type { Pool } from "@lage-run/worker-threads-pool";
4
+ import type { TargetHasher } from "@lage-run/cache";
5
+ import type { TargetRun, TargetStatus } from "@lage-run/scheduler-types";
5
6
  import type { Target } from "@lage-run/target-graph";
6
- import type { TargetRun, TargetRunner, TargetStatus } from "@lage-run/scheduler-types";
7
+ import type { Logger } from "@lage-run/logger";
7
8
  export interface WrappedTargetOptions {
8
9
  root: string;
9
10
  target: Target;
@@ -14,6 +15,7 @@ export interface WrappedTargetOptions {
14
15
  shouldResetCache: boolean;
15
16
  continueOnError: boolean;
16
17
  abortController: AbortController;
18
+ pool: Pool;
17
19
  }
18
20
  /**
19
21
  * Wraps a target with additional functionality:
@@ -39,7 +41,7 @@ export declare class WrappedTarget implements TargetRun {
39
41
  cacheHit: boolean;
40
42
  }>;
41
43
  saveCache(hash: string | null): Promise<void>;
42
- run(runner: TargetRunner): Promise<void>;
44
+ run(): Promise<void>;
43
45
  /**
44
46
  * A JSON representation of this wrapped target, suitable for serialization in tests.
45
47
  *
@@ -4,10 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WrappedTarget = void 0;
7
+ const bufferTransform_1 = require("./bufferTransform");
8
+ const getLageOutputCacheLocation_1 = require("./getLageOutputCacheLocation");
7
9
  const formatDuration_1 = require("./formatDuration");
8
10
  const logger_1 = require("@lage-run/logger");
9
- const createCachedOutputTransform_1 = require("./createCachedOutputTransform");
10
11
  const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const promises_1 = require("fs/promises");
11
14
  /**
12
15
  * Wraps a target with additional functionality:
13
16
  * 1. Caching
@@ -50,7 +53,7 @@ class WrappedTarget {
50
53
  status: "failed",
51
54
  duration: (0, formatDuration_1.hrToSeconds)(this.duration),
52
55
  });
53
- if (!this.options.continueOnError) {
56
+ if (!this.options.continueOnError && this.options.abortController) {
54
57
  this.options.abortController.abort();
55
58
  }
56
59
  }
@@ -85,8 +88,8 @@ class WrappedTarget {
85
88
  logger.verbose(`hash put ${hash}`, { target });
86
89
  await cacheProvider.put(hash, target);
87
90
  }
88
- async run(runner) {
89
- const { target, logger, shouldCache, abortController } = this.options;
91
+ async run() {
92
+ const { target, logger, shouldCache, abortController, pool } = this.options;
90
93
  this.onStart();
91
94
  const abortSignal = abortController.signal;
92
95
  if (abortSignal.aborted) {
@@ -101,7 +104,7 @@ class WrappedTarget {
101
104
  }
102
105
  // skip if cache hit!
103
106
  if (cacheHit) {
104
- const cachedOutputFile = (0, createCachedOutputTransform_1.getLageOutputCacheLocation)(this.target, hash !== null && hash !== void 0 ? hash : "");
107
+ const cachedOutputFile = (0, getLageOutputCacheLocation_1.getLageOutputCacheLocation)(this.target, hash !== null && hash !== void 0 ? hash : "");
105
108
  if (fs_1.default.existsSync(cachedOutputFile)) {
106
109
  const cachedOutput = fs_1.default.createReadStream(cachedOutputFile, "utf8");
107
110
  this.options.logger.verbose(">> Replaying cached output", { target });
@@ -116,22 +119,38 @@ class WrappedTarget {
116
119
  this.onSkipped(hash);
117
120
  return;
118
121
  }
119
- /**
120
- * TargetRunner should run() a target. The promise resolves if successful, or rejects otherwise (aborted or failed).
121
- */
122
- // TODO: instead of passing a hash, pass in the stderr/stdout transformer streams
123
- await runner.run(target, abortSignal, hash
124
- ? {
125
- stdout: (0, createCachedOutputTransform_1.createCachedOutputTransform)(target, hash),
126
- stderr: (0, createCachedOutputTransform_1.createCachedOutputTransform)(target, hash),
127
- }
128
- : undefined);
129
- if (cacheEnabled) {
122
+ let releaseStdout;
123
+ let releaseStderr;
124
+ const bufferStdout = (0, bufferTransform_1.bufferTransform)();
125
+ const bufferStderr = (0, bufferTransform_1.bufferTransform)();
126
+ await pool.exec({ target }, (_worker, stdout, stderr) => {
127
+ stdout.pipe(bufferStdout.transform);
128
+ stderr.pipe(bufferStderr.transform);
129
+ const releaseStdoutStream = logger.stream(logger_1.LogLevel.verbose, stdout, { target });
130
+ releaseStdout = () => {
131
+ releaseStdoutStream();
132
+ stdout.unpipe(bufferStdout.transform);
133
+ };
134
+ const releaseStderrStream = logger.stream(logger_1.LogLevel.verbose, stderr, { target });
135
+ releaseStderr = () => {
136
+ releaseStderrStream();
137
+ stderr.unpipe(bufferStderr.transform);
138
+ };
139
+ }, () => {
140
+ releaseStdout();
141
+ releaseStderr();
142
+ }, abortSignal);
143
+ if (cacheEnabled && hash) {
130
144
  await this.saveCache(hash);
145
+ const outputLocation = (0, getLageOutputCacheLocation_1.getLageOutputCacheLocation)(this.target, hash);
146
+ const outputPath = path_1.default.dirname(outputLocation);
147
+ await (0, promises_1.mkdir)(outputPath, { recursive: true });
148
+ await (0, promises_1.writeFile)(outputLocation, bufferStdout.buffer + bufferStderr.buffer);
131
149
  }
132
150
  this.onComplete();
133
151
  }
134
152
  catch (e) {
153
+ logger.error(String(e), { target });
135
154
  if (abortSignal.aborted) {
136
155
  this.onAbort();
137
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WrappedTarget.js","sourceRoot":"","sources":["../src/WrappedTarget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WrappedTarget.js","sourceRoot":"","sources":["../src/WrappedTarget.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAoD;AACpD,6EAA0E;AAC1E,qDAA+C;AAC/C,6CAA4C;AAE5C,4CAAoB;AACpB,gDAAwB;AACxB,0CAA+C;AAuB/C;;;;;;GAMG;AACH,MAAa,aAAa;IAMxB,YAAmB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QALhD,cAAS,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,aAAQ,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAKlC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,UAAU;QACR,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;YAClC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,IAAA,4BAAW,EAAC,IAAI,CAAC,QAAQ,CAAC;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YACjE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;SACtC;IACH,CAAC;IAED,SAAS,CAAC,IAAmB;QAC3B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;YAClC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,IAAA,4BAAW,EAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/C,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAE/D,IAAI,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE;YAC/B,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEjC,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBAC7B,QAAQ,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aACpD;SACF;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAmB;QACjC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/C,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5E,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;QAE3C,IAAI,WAAW,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;SACR;QAED,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEjD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,IAAI,WAAW,IAAI,IAAI,CAAC;YACzD,IAAI,YAAY,EAAE;gBAChB,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,gBAAgB,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;aACrE;YAED,qBAAqB;YACrB,IAAI,QAAQ,EAAE;gBACZ,MAAM,gBAAgB,GAAG,IAAA,uDAA0B,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC;gBAE7E,IAAI,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;oBACnC,MAAM,YAAY,GAAG,YAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;oBACnE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;oBAEvE,OAAO,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBACzC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;4BAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;4BACrB,OAAO,EAAE,CAAC;wBACZ,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;iBACJ;gBAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;aACR;YAED,IAAI,aAAkB,CAAC;YACvB,IAAI,aAAkB,CAAC;YAEvB,MAAM,YAAY,GAAG,IAAA,iCAAe,GAAE,CAAC;YACvC,MAAM,YAAY,GAAG,IAAA,iCAAe,GAAE,CAAC;YAEvC,MAAM,IAAI,CAAC,IAAI,CACb,EAAE,MAAM,EAAE,EACV,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC1B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAEpC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBAEhF,aAAa,GAAG,GAAG,EAAE;oBACnB,mBAAmB,EAAE,CAAC;oBACtB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxC,CAAC,CAAC;gBAEF,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBAEhF,aAAa,GAAG,GAAG,EAAE;oBACnB,mBAAmB,EAAE,CAAC;oBACtB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxC,CAAC,CAAC;YACJ,CAAC,EACD,GAAG,EAAE;gBACH,aAAa,EAAE,CAAC;gBAChB,aAAa,EAAE,CAAC;YAClB,CAAC,EACD,WAAW,CACZ,CAAC;YAEF,IAAI,YAAY,IAAI,IAAI,EAAE;gBACxB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,cAAc,GAAG,IAAA,uDAA0B,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAChD,MAAM,IAAA,gBAAK,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7C,MAAM,IAAA,oBAAS,EAAC,cAAc,EAAE,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;aAC5E;YAED,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEpC,IAAI,WAAW,CAAC,OAAO,EAAE;gBACvB,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;iBAAM;gBACL,IAAI,CAAC,MAAM,EAAE,CAAC;aACf;YAED,MAAM,CAAC,CAAC;SACT;IACH,CAAC;IAED;;;;;;OAMG;IACH,MAAM;QACJ,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;CACF;AAnMD,sCAmMC"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ import { Transform } from "stream";
3
+ export declare function bufferTransform(): {
4
+ readonly buffer: string;
5
+ transform: Transform;
6
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bufferTransform = void 0;
4
+ const stream_1 = require("stream");
5
+ function bufferTransform() {
6
+ const chunks = [];
7
+ return {
8
+ get buffer() {
9
+ return chunks.join("");
10
+ },
11
+ transform: new stream_1.Transform({
12
+ transform(chunk, encoding, callback) {
13
+ chunks.push(chunk.toString());
14
+ callback();
15
+ },
16
+ }),
17
+ };
18
+ }
19
+ exports.bufferTransform = bufferTransform;
20
+ //# sourceMappingURL=bufferTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferTransform.js","sourceRoot":"","sources":["../src/bufferTransform.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAEnC,SAAgB,eAAe;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,OAAO;QACL,IAAI,MAAM;YACR,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,SAAS,EAAE,IAAI,kBAAS,CAAC;YACvB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;gBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC9B,QAAQ,EAAE,CAAC;YACb,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAdD,0CAcC"}
@@ -0,0 +1,2 @@
1
+ import type { Target } from "@lage-run/target-graph";
2
+ export declare function getLageOutputCacheLocation(target: Target, hash: string): string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getLageOutputCacheLocation = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ function getLageOutputCacheLocation(target, hash) {
9
+ const outputPath = path_1.default.join(target.cwd, "node_modules/.cache/lage/output/");
10
+ return path_1.default.join(outputPath, hash + ".txt");
11
+ }
12
+ exports.getLageOutputCacheLocation = getLageOutputCacheLocation;
13
+ //# sourceMappingURL=getLageOutputCacheLocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLageOutputCacheLocation.js","sourceRoot":"","sources":["../src/getLageOutputCacheLocation.ts"],"names":[],"mappings":";;;;;;AACA,gDAAwB;AAExB,SAAgB,0BAA0B,CAAC,MAAc,EAAE,IAAY;IACrE,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAC7E,OAAO,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;AAC9C,CAAC;AAHD,gEAGC"}
@@ -1,9 +1,7 @@
1
- import type { Logger } from "@lage-run/logger";
2
- import type { TargetCaptureStreams, TargetRunner } from "@lage-run/scheduler-types";
1
+ import type { TargetRunner } from "@lage-run/scheduler-types";
3
2
  import type { AbortSignal } from "abort-controller";
4
3
  import type { Target } from "@lage-run/target-graph";
5
4
  export interface NpmScriptRunnerOptions {
6
- logger: Logger;
7
5
  taskArgs: string[];
8
6
  nodeOptions: string;
9
7
  npmCmd: string;
@@ -33,5 +31,5 @@ export declare class NpmScriptRunner implements TargetRunner {
33
31
  private getNpmArgs;
34
32
  private hasNpmScript;
35
33
  private validateOptions;
36
- run(target: Target, abortSignal?: AbortSignal, captureStreams?: TargetCaptureStreams): Promise<void>;
34
+ run(target: Target, abortSignal?: AbortSignal): Promise<void>;
37
35
  }
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NpmScriptRunner = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
- const logger_1 = require("@lage-run/logger");
7
6
  const promises_1 = require("fs/promises");
8
7
  const child_process_1 = require("child_process");
9
8
  /**
@@ -45,9 +44,9 @@ class NpmScriptRunner {
45
44
  throw new Error(`NPM Script Runner: ${this.options.npmCmd} does not exist`);
46
45
  }
47
46
  }
48
- async run(target, abortSignal, captureStreams = {}) {
47
+ async run(target, abortSignal) {
49
48
  var _a;
50
- const { logger, nodeOptions, npmCmd, taskArgs } = this.options;
49
+ const { nodeOptions, npmCmd, taskArgs } = this.options;
51
50
  let childProcess;
52
51
  // By convention, do not run anything if there is no script for this task defined in package.json (counts as "success")
53
52
  if (!(await this.hasNpmScript(target))) {
@@ -65,7 +64,7 @@ class NpmScriptRunner {
65
64
  abortSignal.removeEventListener("abort", abortSignalHandler);
66
65
  if (childProcess && !childProcess.killed) {
67
66
  const pid = childProcess.pid;
68
- logger.verbose(`Abort signal detected, attempting to killing process id ${pid}`, { target, pid });
67
+ process.stdout.write(`Abort signal detected, attempting to killing process id ${pid}\n`);
69
68
  childProcess.kill("SIGTERM");
70
69
  // wait for "gracefulKillTimeout" to make sure everything is terminated via SIGKILL
71
70
  const t = setTimeout(() => {
@@ -107,20 +106,14 @@ class NpmScriptRunner {
107
106
  if (code === 0) {
108
107
  return resolve();
109
108
  }
110
- reject();
109
+ reject(new Error(`NPM Script Runner: ${npmCmd} ${npmRunArgs.join(" ")} exited with code ${code}`));
111
110
  };
112
111
  const { pid } = childProcess;
113
- logger.verbose(`Running ${[npmCmd, ...npmRunArgs].join(" ")}, pid: ${pid}`, { target, pid });
114
- let stdout = childProcess.stdout;
115
- let stderr = childProcess.stderr;
116
- if (captureStreams.stdout) {
117
- stdout = stdout.pipe(captureStreams.stdout);
118
- }
119
- if (captureStreams.stderr) {
120
- stderr = stderr.pipe(captureStreams.stderr);
121
- }
122
- logger.stream(logger_1.LogLevel.verbose, stdout, { target, pid });
123
- logger.stream(logger_1.LogLevel.verbose, stderr, { target, pid });
112
+ process.stdout.write(`Running ${[npmCmd, ...npmRunArgs].join(" ")}, pid: ${pid}\n`);
113
+ const stdout = childProcess.stdout;
114
+ const stderr = childProcess.stderr;
115
+ stdout.pipe(process.stdout);
116
+ stderr.pipe(process.stderr);
124
117
  childProcess.on("exit", handleChildProcessExit);
125
118
  childProcess.on("error", () => handleChildProcessExit(1));
126
119
  });
@@ -1 +1 @@
1
- {"version":3,"file":"NpmScriptRunner.js","sourceRoot":"","sources":["../../src/runners/NpmScriptRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NpmScriptRunner.js","sourceRoot":"","sources":["../../src/runners/NpmScriptRunner.ts"],"names":[],"mappings":";;;AAAA,2BAAgC;AAChC,+BAA4B;AAC5B,0CAAuC;AACvC,iDAAsC;AAWtC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,eAAe;IAG1B,YAAoB,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;QACjD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,SAAmB;QAClD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAc;;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QACxB,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,OAAO,MAAA,WAAW,CAAC,OAAO,0CAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAEO,eAAe,CAAC,OAA+B;QACrD,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;SAC7E;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,WAAyB;;QACjD,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAEvD,IAAI,YAAsC,CAAC;QAE3C,uHAAuH;QACvH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE;YACtC,OAAO;SACR;QAED;;;WAGG;QACH,IAAI,WAAW,EAAE;YACf,IAAI,WAAW,CAAC,OAAO,EAAE;gBACvB,OAAO;aACR;YAED,MAAM,kBAAkB,GAAG,GAAG,EAAE;gBAC9B,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;gBAC7D,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;oBACxC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;oBAE7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,GAAG,IAAI,CAAC,CAAC;oBAEzF,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAE7B,mFAAmF;oBACnF,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE;wBACxB,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;4BACxC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;yBAC9B;oBACH,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;oBAExC,4GAA4G;oBAC5G,IAAI,CAAC,CAAC,KAAK,EAAE;wBACX,CAAC,CAAC,KAAK,EAAE,CAAC;qBACX;iBACF;YACH,CAAC,CAAC;YAEF,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;SAC3D;QAED;;WAEG;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,MAAA,MAAM,CAAC,OAAO,0CAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpG,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,YAAY,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAE,UAAU,EAAE;gBACvC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;gBAClC,GAAG,8DACE,OAAO,CAAC,GAAG,GACX,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,GAC9C,CAAC,iBAAiB,IAAI,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC,KAC7D,iBAAiB,EAAE,MAAM,CAAC,WAAW,EACrC,SAAS,EAAE,MAAM,CAAC,IAAI,GACvB;aACF,CAAC,CAAC;YAEH,IAAI,WAAW,GAAG,KAAK,CAAC;YAExB,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAE,EAAE;;gBAC9C,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;gBAClD,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,GAAG,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;gBAEnD,IAAI,WAAW,EAAE;oBACf,OAAO;iBACR;gBAED,WAAW,GAAG,IAAI,CAAC;gBAEnB,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,0CAAE,OAAO,EAAE,CAAC;gBAChC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,0CAAE,OAAO,EAAE,CAAC;gBAChC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,0CAAE,OAAO,EAAE,CAAC;gBAE/B,IAAI,IAAI,KAAK,CAAC,EAAE;oBACd,OAAO,OAAO,EAAE,CAAC;iBAClB;gBAED,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;YACrG,CAAC,CAAC;YAEF,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC;YAE7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;YAEpF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAO,CAAC;YACpC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAO,CAAC;YAEpC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE5B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;YAChD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;;AA7HH,0CA8HC;AA7HQ,mCAAmB,GAAG,IAAI,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import type { Target } from "@lage-run/target-graph";
2
2
  import type { TargetRunner } from "@lage-run/scheduler-types";
3
- interface TargetRunnerPickerOptions {
4
- runners: {
5
- [key: string]: TargetRunner;
3
+ export interface TargetRunnerPickerOptions {
4
+ [key: string]: {
5
+ script: string;
6
+ options: any;
6
7
  };
7
8
  }
8
9
  export declare class TargetRunnerPicker {
@@ -10,4 +11,3 @@ export declare class TargetRunnerPicker {
10
11
  constructor(options: TargetRunnerPickerOptions);
11
12
  pick(target: Target): TargetRunner;
12
13
  }
13
- export {};
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.TargetRunnerPicker = void 0;
7
+ const path_1 = __importDefault(require("path"));
4
8
  const target_graph_1 = require("@lage-run/target-graph");
5
9
  const NoOpRunner_1 = require("./NoOpRunner");
6
10
  class TargetRunnerPicker {
@@ -14,8 +18,19 @@ class TargetRunnerPicker {
14
18
  if (!target.type) {
15
19
  target.type = "npmScript";
16
20
  }
17
- if (this.options.runners[target.type]) {
18
- return this.options.runners[target.type];
21
+ if (this.options[target.type]) {
22
+ const config = this.options[target.type];
23
+ const { script, options } = config;
24
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
25
+ const runnerModule = require(script);
26
+ const base = path_1.default.basename(script);
27
+ const runnerName = base.replace(path_1.default.extname(base), "");
28
+ const runner = typeof runnerModule[runnerName] === "function"
29
+ ? runnerModule[runnerName]
30
+ : runnerModule.default === "function"
31
+ ? runnerModule.default
32
+ : runnerModule;
33
+ return new runner(options);
19
34
  }
20
35
  throw new Error(`No runner found for target ${target.id}`);
21
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TargetRunnerPicker.js","sourceRoot":"","sources":["../../src/runners/TargetRunnerPicker.ts"],"names":[],"mappings":";;;AAAA,yDAA0D;AAC1D,6CAA0C;AAQ1C,MAAa,kBAAkB;IAC7B,YAAoB,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAG,CAAC;IAE1D,IAAI,CAAC,MAAc;QACjB,IAAI,MAAM,CAAC,EAAE,KAAK,IAAA,+BAAgB,GAAE,EAAE;YACpC,OAAO,uBAAU,CAAC;SACnB;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAChB,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1C;QAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF;AAlBD,gDAkBC"}
1
+ {"version":3,"file":"TargetRunnerPicker.js","sourceRoot":"","sources":["../../src/runners/TargetRunnerPicker.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,yDAA0D;AAC1D,6CAA0C;AAQ1C,MAAa,kBAAkB;IAC7B,YAAoB,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAG,CAAC;IAE1D,IAAI,CAAC,MAAc;QACjB,IAAI,MAAM,CAAC,EAAE,KAAK,IAAA,+BAAgB,GAAE,EAAE;YACpC,OAAO,uBAAU,CAAC;SACnB;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAChB,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAEnC,8DAA8D;YAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAErC,MAAM,IAAI,GAAG,cAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAExD,MAAM,MAAM,GACV,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,UAAU;gBAC5C,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC;gBAC1B,CAAC,CAAC,YAAY,CAAC,OAAO,KAAK,UAAU;oBACrC,CAAC,CAAC,YAAY,CAAC,OAAO;oBACtB,CAAC,CAAC,YAAY,CAAC;YAEnB,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;SAC5B;QAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF;AAlCD,gDAkCC"}
@@ -1,22 +1,6 @@
1
- /// <reference types="node" />
2
- import { WorkerPool } from "@lage-run/worker-threads-pool";
3
1
  import type { AbortSignal } from "abort-controller";
4
- import type { Logger } from "@lage-run/logger";
5
- import type { Target, TargetConfig } from "@lage-run/target-graph";
2
+ import type { Target } from "@lage-run/target-graph";
6
3
  import type { TargetRunner } from "@lage-run/scheduler-types";
7
- import type { Worker } from "worker_threads";
8
- import type { Readable } from "stream";
9
- export interface WorkerRunnerOptions {
10
- logger: Logger;
11
- workerTargetConfigs: Record<string, TargetConfig>;
12
- nodeOptions?: string;
13
- }
14
- export interface PoolOptions {
15
- id: string;
16
- options: Record<string, any>;
17
- script: string;
18
- nodeOptions: string;
19
- }
20
4
  /**
21
5
  * Creates a workerpool per target task definition of "type: worker"
22
6
  *
@@ -34,8 +18,7 @@ export interface PoolOptions {
34
18
  * type: "worker",
35
19
  * options: {
36
20
  * worker: "workers/lint.js",
37
- * maxWorkers: 15,
38
- * minWorkers: 2,
21
+ * maxWorkers: 15
39
22
  * }
40
23
  * }
41
24
  * }
@@ -44,19 +27,16 @@ export interface PoolOptions {
44
27
  *
45
28
  * ```js
46
29
  * // worker.js
47
- * const { WorkerRunner } = require("@lage-run/scheduler");
48
- * WorkerRunner.register({
49
- * })
30
+ * module.exports = async function lint({ target, abortSignal }) {
31
+ * if (abortSignal.aborted) {
32
+ * return;
33
+ * }
34
+ *
35
+ * // Do work here - but be sure to have a way to abort via the `abortSignal`
36
+ * }
50
37
  * ```
51
38
  */
52
39
  export declare class WorkerRunner implements TargetRunner {
53
- private options;
54
- private pools;
55
40
  static gracefulKillTimeout: number;
56
- constructor(options: WorkerRunnerOptions);
57
- getPoolOptions(target: Target): PoolOptions;
58
- ensurePool(poolOptions: PoolOptions): WorkerPool;
59
- captureStream(target: Target, _worker?: Worker, stdout?: Readable, stderr?: Readable): () => void;
60
41
  run(target: Target, abortSignal?: AbortSignal): Promise<void>;
61
- cleanup(): Promise<void>;
62
42
  }
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.WorkerRunner = void 0;
7
- const logger_1 = require("@lage-run/logger");
8
- const worker_threads_pool_1 = require("@lage-run/worker-threads-pool");
9
- const os_1 = __importDefault(require("os"));
10
4
  /**
11
5
  * Creates a workerpool per target task definition of "type: worker"
12
6
  *
@@ -24,8 +18,7 @@ const os_1 = __importDefault(require("os"));
24
18
  * type: "worker",
25
19
  * options: {
26
20
  * worker: "workers/lint.js",
27
- * maxWorkers: 15,
28
- * minWorkers: 2,
21
+ * maxWorkers: 15
29
22
  * }
30
23
  * }
31
24
  * }
@@ -34,100 +27,26 @@ const os_1 = __importDefault(require("os"));
34
27
  *
35
28
  * ```js
36
29
  * // worker.js
37
- * const { WorkerRunner } = require("@lage-run/scheduler");
38
- * WorkerRunner.register({
39
- * })
30
+ * module.exports = async function lint({ target, abortSignal }) {
31
+ * if (abortSignal.aborted) {
32
+ * return;
33
+ * }
34
+ *
35
+ * // Do work here - but be sure to have a way to abort via the `abortSignal`
36
+ * }
40
37
  * ```
41
38
  */
42
39
  class WorkerRunner {
43
- constructor(options) {
44
- this.options = options;
45
- this.pools = {};
46
- }
47
- getPoolOptions(target) {
48
- var _a, _b, _c, _d, _e;
49
- const { task } = target;
50
- const { workerTargetConfigs } = this.options;
51
- let id = "";
52
- let options = {};
53
- let script = "";
54
- if (workerTargetConfigs[target.id]) {
55
- id = target.id;
56
- script = (_a = workerTargetConfigs[target.id].options) === null || _a === void 0 ? void 0 : _a.worker;
57
- options = (_b = workerTargetConfigs[target.id].options) !== null && _b !== void 0 ? _b : {};
58
- }
59
- else if (workerTargetConfigs[task]) {
60
- id = task;
61
- script = (_c = workerTargetConfigs[task].options) === null || _c === void 0 ? void 0 : _c.worker;
62
- options = (_d = workerTargetConfigs[task].options) !== null && _d !== void 0 ? _d : {};
63
- }
64
- return {
65
- id,
66
- script,
67
- options,
68
- nodeOptions: (_e = workerTargetConfigs[id].options) === null || _e === void 0 ? void 0 : _e.nodeOptions,
69
- };
70
- }
71
- ensurePool(poolOptions) {
72
- var _a;
73
- const { id, script, options } = poolOptions;
74
- if (!this.pools[id]) {
75
- const pool = new worker_threads_pool_1.WorkerPool({
76
- maxWorkers: (_a = options.maxWorkers) !== null && _a !== void 0 ? _a : os_1.default.cpus().length,
77
- script,
78
- workerOptions: {
79
- stdout: true,
80
- stderr: true,
81
- },
82
- });
83
- this.pools[id] = pool;
84
- }
85
- return this.pools[id];
86
- }
87
- captureStream(target, _worker, stdout, stderr) {
88
- const { logger } = this.options;
89
- const onData = (data) => logger.log(logger_1.LogLevel.info, data, { target });
90
- if (stdout) {
91
- stdout.setEncoding("utf-8");
92
- stdout.on("data", onData);
93
- }
94
- if (stderr) {
95
- stderr.setEncoding("utf-8");
96
- stderr.on("data", onData);
97
- }
98
- return () => {
99
- if (stdout) {
100
- stdout.off("data", onData);
101
- }
102
- if (stderr) {
103
- stderr.off("data", onData);
104
- }
105
- };
106
- }
107
40
  async run(target, abortSignal) {
108
- if (abortSignal) {
109
- if (abortSignal.aborted) {
110
- return;
111
- }
112
- const abortSignalHandler = () => {
113
- abortSignal.removeEventListener("abort", abortSignalHandler);
114
- this.cleanup();
115
- };
116
- abortSignal.addEventListener("abort", abortSignalHandler);
117
- }
118
- const poolOptions = this.getPoolOptions(target);
119
- const pool = this.ensurePool(poolOptions);
120
- let cleanupStreams;
121
- await pool.exec({ target }, (worker, stdout, stderr) => {
122
- cleanupStreams = this.captureStream(target, worker, stdout, stderr);
123
- }, () => {
124
- cleanupStreams();
125
- });
126
- }
127
- async cleanup() {
128
- for (const pool of Object.values(this.pools)) {
129
- await pool.close();
41
+ var _a, _b, _c, _d;
42
+ if (!((_a = target.options) === null || _a === void 0 ? void 0 : _a.worker)) {
43
+ throw new Error('WorkerRunner: "worker" configuration is required - e.g. { type: "worker", worker: "./worker.js" }');
130
44
  }
45
+ const scriptFile = (_c = (_b = target.options) === null || _b === void 0 ? void 0 : _b.worker) !== null && _c !== void 0 ? _c : (_d = target.options) === null || _d === void 0 ? void 0 : _d.script;
46
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
47
+ const scriptModule = require(scriptFile);
48
+ const runFn = typeof scriptModule.default === "function" ? scriptModule.default : scriptModule;
49
+ await runFn({ target, abortSignal });
131
50
  }
132
51
  }
133
52
  exports.WorkerRunner = WorkerRunner;
@@ -1 +1 @@
1
- {"version":3,"file":"WorkerRunner.js","sourceRoot":"","sources":["../../src/runners/WorkerRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WorkerRunner.js","sourceRoot":"","sources":["../../src/runners/WorkerRunner.ts"],"names":[],"mappings":";;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAa,YAAY;IAGvB,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,WAAyB;;QACjD,IAAI,CAAC,CAAA,MAAA,MAAM,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;SACtH;QAED,MAAM,UAAU,GAAG,MAAA,MAAA,MAAM,CAAC,OAAO,0CAAE,MAAM,mCAAI,MAAA,MAAM,CAAC,OAAO,0CAAE,MAAM,CAAC;QAEpE,8DAA8D;QAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,YAAY,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;QAE/F,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACvC,CAAC;;AAfH,oCAgBC;AAfQ,gCAAmB,GAAG,IAAI,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const worker_threads_pool_1 = require("@lage-run/worker-threads-pool");
4
+ const TargetRunnerPicker_1 = require("../runners/TargetRunnerPicker");
5
+ const worker_threads_1 = require("worker_threads");
6
+ function setup(options) {
7
+ const { runners } = options;
8
+ const runnerPicker = new TargetRunnerPicker_1.TargetRunnerPicker(runners);
9
+ return {
10
+ runnerPicker,
11
+ };
12
+ }
13
+ const { runnerPicker } = setup(worker_threads_1.workerData);
14
+ async function run(data, abortSignal) {
15
+ const runner = runnerPicker.pick(data.target);
16
+ await runner.run(data.target, abortSignal);
17
+ }
18
+ (0, worker_threads_pool_1.registerWorker)(run);
19
+ //# sourceMappingURL=targetWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targetWorker.js","sourceRoot":"","sources":["../../src/workers/targetWorker.ts"],"names":[],"mappings":";;AAAA,uEAA+D;AAC/D,sEAAmE;AACnE,mDAA4C;AAQ5C,SAAS,KAAK,CAAC,OAAgC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE5B,MAAM,YAAY,GAAG,IAAI,uCAAkB,CAAC,OAAO,CAAC,CAAC;IAErD,OAAO;QACL,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,2BAAU,CAAC,CAAC;AAE3C,KAAK,UAAU,GAAG,CAAC,IAAS,EAAE,WAAyB;IACrD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,IAAA,oCAAc,EAAC,GAAG,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lage-run/scheduler",
3
- "version": "0.3.13",
3
+ "version": "0.4.0",
4
4
  "description": "Scheduler for Lage",
5
5
  "repository": {
6
6
  "url": "https://github.com/microsoft/lage"
@@ -18,14 +18,14 @@
18
18
  "@lage-run/target-graph": "^0.4.2",
19
19
  "@lage-run/logger": "^1.2.0",
20
20
  "@lage-run/cache": "^0.1.16",
21
- "@lage-run/worker-threads-pool": "^0.1.4",
21
+ "@lage-run/worker-threads-pool": "^0.1.6",
22
22
  "p-graph": "^1.1.1",
23
23
  "p-profiler": "^0.2.1",
24
24
  "abort-controller": "^3.0.0",
25
25
  "workspace-tools": "^0.28.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@lage-run/scheduler-types": "^0.1.2",
28
+ "@lage-run/scheduler-types": "^0.1.4",
29
29
  "@lage-run/monorepo-fixture": "*",
30
30
  "@types/workerpool": "6.1.0",
31
31
  "monorepo-scripts": "*"
@@ -1,5 +0,0 @@
1
- /// <reference types="node" />
2
- import type { Target } from "@lage-run/target-graph";
3
- import { Transform } from "stream";
4
- export declare function getLageOutputCacheLocation(target: Target, hash: string): string;
5
- export declare function createCachedOutputTransform(target: Target, hash: string): Transform;
@@ -1,37 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createCachedOutputTransform = exports.getLageOutputCacheLocation = void 0;
7
- const stream_1 = require("stream");
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- function getLageOutputCacheLocation(target, hash) {
11
- const outputPath = path_1.default.join(target.cwd, "node_modules/.cache/lage/output/");
12
- return path_1.default.join(outputPath, hash + ".txt");
13
- }
14
- exports.getLageOutputCacheLocation = getLageOutputCacheLocation;
15
- function createCachedOutputTransform(target, hash) {
16
- const outputFile = getLageOutputCacheLocation(target, hash);
17
- const outputPath = path_1.default.dirname(outputFile);
18
- if (!fs_1.default.existsSync(outputFile)) {
19
- fs_1.default.mkdirSync(outputPath, { recursive: true });
20
- const writeStream = fs_1.default.createWriteStream(path_1.default.join(outputPath, hash + ".txt"));
21
- const transform = new stream_1.Transform({
22
- transform(chunk, encoding, callback) {
23
- writeStream.write(chunk);
24
- callback(null, chunk);
25
- },
26
- });
27
- return transform;
28
- }
29
- const transform = new stream_1.Transform({
30
- transform(chunk, encoding, callback) {
31
- callback(null, chunk);
32
- },
33
- });
34
- return transform;
35
- }
36
- exports.createCachedOutputTransform = createCachedOutputTransform;
37
- //# sourceMappingURL=createCachedOutputTransform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCachedOutputTransform.js","sourceRoot":"","sources":["../src/createCachedOutputTransform.ts"],"names":[],"mappings":";;;;;;AACA,mCAAmC;AACnC,4CAAoB;AACpB,gDAAwB;AAExB,SAAgB,0BAA0B,CAAC,MAAc,EAAE,IAAY;IACrE,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAC7E,OAAO,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;AAC9C,CAAC;AAHD,gEAGC;AAED,SAAgB,2BAA2B,CAAC,MAAc,EAAE,IAAY;IACtE,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC9B,YAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,YAAE,CAAC,iBAAiB,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;QAE/E,MAAM,SAAS,GAAG,IAAI,kBAAS,CAAC;YAC9B,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;gBACjC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,SAAS,GAAG,IAAI,kBAAS,CAAC;QAC9B,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;YACjC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAzBD,kEAyBC"}