@lage-run/scheduler 0.1.6 → 0.3.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 +88 -1
- package/CHANGELOG.md +33 -2
- package/README.md +6 -0
- package/lib/SimpleScheduler.d.ts +9 -7
- package/lib/SimpleScheduler.js +16 -18
- package/lib/SimpleScheduler.js.map +1 -1
- package/lib/WrappedTarget.d.ts +2 -2
- package/lib/WrappedTarget.js +25 -1
- package/lib/WrappedTarget.js.map +1 -1
- package/lib/createCachedOutputTransform.d.ts +5 -0
- package/lib/createCachedOutputTransform.js +37 -0
- package/lib/createCachedOutputTransform.js.map +1 -0
- package/lib/formatDuration.js +2 -2
- package/lib/formatDuration.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +7 -3
- package/lib/index.js.map +1 -1
- package/lib/runners/NoOpRunner.d.ts +1 -1
- package/lib/runners/NoOpRunner.js +3 -1
- package/lib/runners/NoOpRunner.js.map +1 -1
- package/lib/runners/NpmScriptRunner.d.ts +4 -4
- package/lib/runners/NpmScriptRunner.js +13 -5
- package/lib/runners/NpmScriptRunner.js.map +1 -1
- package/lib/runners/TargetRunnerPicker.d.ts +13 -0
- package/lib/runners/TargetRunnerPicker.js +24 -0
- package/lib/runners/TargetRunnerPicker.js.map +1 -0
- package/lib/runners/WorkerRunner.d.ts +61 -0
- package/lib/runners/WorkerRunner.js +152 -0
- package/lib/runners/WorkerRunner.js.map +1 -0
- package/lib/types/TargetRun.d.ts +2 -2
- package/lib/types/TargetRunner.d.ts +9 -2
- package/lib/types/TargetScheduler.d.ts +1 -1
- package/package.json +7 -5
package/CHANGELOG.json
CHANGED
|
@@ -2,7 +2,94 @@
|
|
|
2
2
|
"name": "@lage-run/scheduler",
|
|
3
3
|
"entries": [
|
|
4
4
|
{
|
|
5
|
-
"date": "
|
|
5
|
+
"date": "Sun, 04 Sep 2022 23:00:04 GMT",
|
|
6
|
+
"tag": "@lage-run/scheduler_v0.3.0",
|
|
7
|
+
"version": "0.3.0",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"author": "ken@gizzar.com",
|
|
12
|
+
"package": "@lage-run/scheduler",
|
|
13
|
+
"commit": "21bc0d3c799d654d236aa994e8e98ac5c250567c",
|
|
14
|
+
"comment": "Supports worker as a new target type"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"author": "beachball",
|
|
18
|
+
"package": "@lage-run/scheduler",
|
|
19
|
+
"comment": "Bump @lage-run/target-graph to v0.3.0",
|
|
20
|
+
"commit": "21bc0d3c799d654d236aa994e8e98ac5c250567c"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"author": "beachball",
|
|
24
|
+
"package": "@lage-run/scheduler",
|
|
25
|
+
"comment": "Bump @lage-run/logger to v1.2.0",
|
|
26
|
+
"commit": "21bc0d3c799d654d236aa994e8e98ac5c250567c"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"author": "beachball",
|
|
30
|
+
"package": "@lage-run/scheduler",
|
|
31
|
+
"comment": "Bump @lage-run/cache to v0.1.7",
|
|
32
|
+
"commit": "21bc0d3c799d654d236aa994e8e98ac5c250567c"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"author": "beachball",
|
|
36
|
+
"package": "@lage-run/scheduler",
|
|
37
|
+
"comment": "Bump @lage-run/worker-threads-pool to v0.1.1",
|
|
38
|
+
"commit": "21bc0d3c799d654d236aa994e8e98ac5c250567c"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"date": "Fri, 26 Aug 2022 06:34:51 GMT",
|
|
45
|
+
"tag": "@lage-run/scheduler_v0.2.0",
|
|
46
|
+
"version": "0.2.0",
|
|
47
|
+
"comments": {
|
|
48
|
+
"minor": [
|
|
49
|
+
{
|
|
50
|
+
"author": "ken@gizzar.com",
|
|
51
|
+
"package": "@lage-run/scheduler",
|
|
52
|
+
"commit": "8b797903e36d31d9fbd4cc813166073e05872fd6",
|
|
53
|
+
"comment": "caches the console output"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"date": "Wed, 24 Aug 2022 22:26:03 GMT",
|
|
60
|
+
"tag": "@lage-run/scheduler_v0.1.7",
|
|
61
|
+
"version": "0.1.7",
|
|
62
|
+
"comments": {
|
|
63
|
+
"patch": [
|
|
64
|
+
{
|
|
65
|
+
"author": "renovate@whitesourcesoftware.com",
|
|
66
|
+
"package": "@lage-run/scheduler",
|
|
67
|
+
"commit": "ae1468bf230ea12b1910214d0ce394da75675d09",
|
|
68
|
+
"comment": "Update dependency @types/node to v14.18.26"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"author": "beachball",
|
|
72
|
+
"package": "@lage-run/scheduler",
|
|
73
|
+
"comment": "Bump @lage-run/target-graph to v0.2.2",
|
|
74
|
+
"commit": "ae1468bf230ea12b1910214d0ce394da75675d09"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"author": "beachball",
|
|
78
|
+
"package": "@lage-run/scheduler",
|
|
79
|
+
"comment": "Bump @lage-run/logger to v1.1.3",
|
|
80
|
+
"commit": "ae1468bf230ea12b1910214d0ce394da75675d09"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"author": "beachball",
|
|
84
|
+
"package": "@lage-run/scheduler",
|
|
85
|
+
"comment": "Bump @lage-run/cache to v0.1.6",
|
|
86
|
+
"commit": "ae1468bf230ea12b1910214d0ce394da75675d09"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"date": "Wed, 24 Aug 2022 16:23:48 GMT",
|
|
6
93
|
"tag": "@lage-run/scheduler_v0.1.6",
|
|
7
94
|
"version": "0.1.6",
|
|
8
95
|
"comments": {
|
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,43 @@
|
|
|
1
1
|
# Change Log - @lage-run/scheduler
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Sun, 04 Sep 2022 23:00:04 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 0.3.0
|
|
8
|
+
|
|
9
|
+
Sun, 04 Sep 2022 23:00:04 GMT
|
|
10
|
+
|
|
11
|
+
### Minor changes
|
|
12
|
+
|
|
13
|
+
- Supports worker as a new target type (ken@gizzar.com)
|
|
14
|
+
- Bump @lage-run/target-graph to v0.3.0
|
|
15
|
+
- Bump @lage-run/logger to v1.2.0
|
|
16
|
+
- Bump @lage-run/cache to v0.1.7
|
|
17
|
+
- Bump @lage-run/worker-threads-pool to v0.1.1
|
|
18
|
+
|
|
19
|
+
## 0.2.0
|
|
20
|
+
|
|
21
|
+
Fri, 26 Aug 2022 06:34:51 GMT
|
|
22
|
+
|
|
23
|
+
### Minor changes
|
|
24
|
+
|
|
25
|
+
- caches the console output (ken@gizzar.com)
|
|
26
|
+
|
|
27
|
+
## 0.1.7
|
|
28
|
+
|
|
29
|
+
Wed, 24 Aug 2022 22:26:03 GMT
|
|
30
|
+
|
|
31
|
+
### Patches
|
|
32
|
+
|
|
33
|
+
- Update dependency @types/node to v14.18.26 (renovate@whitesourcesoftware.com)
|
|
34
|
+
- Bump @lage-run/target-graph to v0.2.2
|
|
35
|
+
- Bump @lage-run/logger to v1.1.3
|
|
36
|
+
- Bump @lage-run/cache to v0.1.6
|
|
37
|
+
|
|
7
38
|
## 0.1.6
|
|
8
39
|
|
|
9
|
-
Wed, 24 Aug 2022 16:23:
|
|
40
|
+
Wed, 24 Aug 2022 16:23:48 GMT
|
|
10
41
|
|
|
11
42
|
### Patches
|
|
12
43
|
|
package/README.md
CHANGED
package/lib/SimpleScheduler.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Logger } from "@lage-run/logger";
|
|
1
|
+
import { AbortController } from "abort-controller";
|
|
3
2
|
import { WrappedTarget } from "./WrappedTarget";
|
|
3
|
+
import type { AbortSignal } from "abort-controller";
|
|
4
4
|
import type { CacheProvider, TargetHasher } from "@lage-run/cache";
|
|
5
|
-
import type {
|
|
5
|
+
import type { Logger } from "@lage-run/logger";
|
|
6
|
+
import type { SchedulerRunSummary } from "./types/SchedulerRunSummary";
|
|
7
|
+
import type { TargetGraph } from "@lage-run/target-graph";
|
|
8
|
+
import type { TargetRunnerPicker } from "./runners/TargetRunnerPicker";
|
|
6
9
|
import type { TargetScheduler } from "./types/TargetScheduler";
|
|
7
|
-
import type { AbortSignal } from "abort-controller";
|
|
8
|
-
import { AbortController } from "abort-controller";
|
|
9
|
-
import { SchedulerRunSummary } from "./types/SchedulerRunSummary";
|
|
10
10
|
export interface SimpleSchedulerOptions {
|
|
11
11
|
logger: Logger;
|
|
12
12
|
concurrency: number;
|
|
@@ -15,7 +15,9 @@ export interface SimpleSchedulerOptions {
|
|
|
15
15
|
hasher: TargetHasher;
|
|
16
16
|
shouldCache: boolean;
|
|
17
17
|
shouldResetCache: boolean;
|
|
18
|
-
|
|
18
|
+
runnerPicker: {
|
|
19
|
+
pick: TargetRunnerPicker["pick"];
|
|
20
|
+
};
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* Simple scheduler that runs all targets in a promise graph using p-graph library.
|
package/lib/SimpleScheduler.js
CHANGED
|
@@ -4,12 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.SimpleScheduler = void 0;
|
|
7
|
-
const target_graph_1 = require("@lage-run/target-graph");
|
|
8
|
-
const WrappedTarget_1 = require("./WrappedTarget");
|
|
9
|
-
const p_graph_1 = __importDefault(require("p-graph"));
|
|
10
7
|
const abort_controller_1 = require("abort-controller");
|
|
11
|
-
const NoOpRunner_1 = require("./runners/NoOpRunner");
|
|
12
8
|
const categorizeTargetRuns_1 = require("./categorizeTargetRuns");
|
|
9
|
+
const WrappedTarget_1 = require("./WrappedTarget");
|
|
10
|
+
const p_graph_1 = __importDefault(require("p-graph"));
|
|
13
11
|
/**
|
|
14
12
|
* Simple scheduler that runs all targets in a promise graph using p-graph library.
|
|
15
13
|
*
|
|
@@ -41,7 +39,7 @@ class SimpleScheduler {
|
|
|
41
39
|
*/
|
|
42
40
|
async run(root, targetGraph) {
|
|
43
41
|
const startTime = process.hrtime();
|
|
44
|
-
const { concurrency, continueOnError, logger, cacheProvider, shouldCache, shouldResetCache, hasher,
|
|
42
|
+
const { concurrency, continueOnError, logger, cacheProvider, shouldCache, shouldResetCache, hasher, runnerPicker } = this.options;
|
|
45
43
|
const { dependencies, targets } = targetGraph;
|
|
46
44
|
const pGraphNodes = new Map();
|
|
47
45
|
const pGraphEdges = dependencies;
|
|
@@ -66,9 +64,7 @@ class SimpleScheduler {
|
|
|
66
64
|
if (this.abortSignal.aborted) {
|
|
67
65
|
return;
|
|
68
66
|
}
|
|
69
|
-
|
|
70
|
-
return this.wrappedTargets.get(target.id).run(NoOpRunner_1.NoOpRunner);
|
|
71
|
-
}
|
|
67
|
+
const runner = runnerPicker.pick(target);
|
|
72
68
|
return this.wrappedTargets.get(target.id).run(runner);
|
|
73
69
|
},
|
|
74
70
|
priority: target.priority,
|
|
@@ -76,6 +72,8 @@ class SimpleScheduler {
|
|
|
76
72
|
}
|
|
77
73
|
let results = "failed";
|
|
78
74
|
let error;
|
|
75
|
+
let duration = [0, 0];
|
|
76
|
+
let targetRunByStatus;
|
|
79
77
|
try {
|
|
80
78
|
await (0, p_graph_1.default)(pGraphNodes, pGraphEdges).run({
|
|
81
79
|
concurrency,
|
|
@@ -86,8 +84,8 @@ class SimpleScheduler {
|
|
|
86
84
|
error = e instanceof Error ? e.message : String(e);
|
|
87
85
|
}
|
|
88
86
|
finally {
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
duration = process.hrtime(startTime);
|
|
88
|
+
targetRunByStatus = (0, categorizeTargetRuns_1.categorizeTargetRuns)([...this.wrappedTargets.values()]);
|
|
91
89
|
if (targetRunByStatus.failed.length +
|
|
92
90
|
targetRunByStatus.aborted.length +
|
|
93
91
|
targetRunByStatus.pending.length +
|
|
@@ -95,15 +93,15 @@ class SimpleScheduler {
|
|
|
95
93
|
0) {
|
|
96
94
|
results = "success";
|
|
97
95
|
}
|
|
98
|
-
return {
|
|
99
|
-
targetRunByStatus,
|
|
100
|
-
targetRuns: this.wrappedTargets,
|
|
101
|
-
duration,
|
|
102
|
-
startTime,
|
|
103
|
-
results,
|
|
104
|
-
error,
|
|
105
|
-
};
|
|
106
96
|
}
|
|
97
|
+
return {
|
|
98
|
+
targetRunByStatus,
|
|
99
|
+
targetRuns: this.wrappedTargets,
|
|
100
|
+
duration,
|
|
101
|
+
startTime,
|
|
102
|
+
results,
|
|
103
|
+
error,
|
|
104
|
+
};
|
|
107
105
|
}
|
|
108
106
|
/**
|
|
109
107
|
* Abort the scheduler using the abort controller.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleScheduler.js","sourceRoot":"","sources":["../src/SimpleScheduler.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"SimpleScheduler.js","sourceRoot":"","sources":["../src/SimpleScheduler.ts"],"names":[],"mappings":"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"}
|
package/lib/WrappedTarget.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Logger } from "@lage-run/logger";
|
|
2
|
-
import { TargetHasher } from "@lage-run/cache";
|
|
1
|
+
import type { Logger } from "@lage-run/logger";
|
|
2
|
+
import type { TargetHasher } from "@lage-run/cache";
|
|
3
3
|
import type { AbortController } from "abort-controller";
|
|
4
4
|
import type { CacheProvider } from "@lage-run/cache";
|
|
5
5
|
import type { Target } from "@lage-run/target-graph";
|
package/lib/WrappedTarget.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
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.WrappedTarget = void 0;
|
|
4
7
|
const formatDuration_1 = require("./formatDuration");
|
|
8
|
+
const logger_1 = require("@lage-run/logger");
|
|
9
|
+
const createCachedOutputTransform_1 = require("./createCachedOutputTransform");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
5
11
|
/**
|
|
6
12
|
* Wraps a target with additional functionality:
|
|
7
13
|
* 1. Caching
|
|
@@ -95,13 +101,31 @@ class WrappedTarget {
|
|
|
95
101
|
}
|
|
96
102
|
// skip if cache hit!
|
|
97
103
|
if (cacheHit) {
|
|
104
|
+
const cachedOutputFile = (0, createCachedOutputTransform_1.getLageOutputCacheLocation)(this.target, hash !== null && hash !== void 0 ? hash : "");
|
|
105
|
+
if (fs_1.default.existsSync(cachedOutputFile)) {
|
|
106
|
+
const cachedOutput = fs_1.default.createReadStream(cachedOutputFile, "utf8");
|
|
107
|
+
this.options.logger.verbose(">> Replaying cached output", { target });
|
|
108
|
+
this.options.logger.stream(logger_1.LogLevel.verbose, cachedOutput, { target });
|
|
109
|
+
return await new Promise((resolve) => {
|
|
110
|
+
cachedOutput.on("close", () => {
|
|
111
|
+
this.onSkipped(hash);
|
|
112
|
+
resolve();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
98
116
|
this.onSkipped(hash);
|
|
99
117
|
return;
|
|
100
118
|
}
|
|
101
119
|
/**
|
|
102
120
|
* TargetRunner should run() a target. The promise resolves if successful, or rejects otherwise (aborted or failed).
|
|
103
121
|
*/
|
|
104
|
-
|
|
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);
|
|
105
129
|
if (cacheEnabled) {
|
|
106
130
|
await this.saveCache(hash);
|
|
107
131
|
}
|
package/lib/WrappedTarget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WrappedTarget.js","sourceRoot":"","sources":["../src/WrappedTarget.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WrappedTarget.js","sourceRoot":"","sources":["../src/WrappedTarget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { Target } from "@lage-run/target-graph";
|
|
3
|
+
import { Transform } from "node:stream";
|
|
4
|
+
export declare function getLageOutputCacheLocation(target: Target, hash: string): string;
|
|
5
|
+
export declare function createCachedOutputTransform(target: Target, hash: string): Transform;
|
|
@@ -0,0 +1,37 @@
|
|
|
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 node_stream_1 = require("node:stream");
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
function getLageOutputCacheLocation(target, hash) {
|
|
11
|
+
const outputPath = node_path_1.default.join(target.cwd, "node_modules/.cache/lage/output/");
|
|
12
|
+
return node_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 = node_path_1.default.dirname(outputFile);
|
|
18
|
+
if (!node_fs_1.default.existsSync(outputFile)) {
|
|
19
|
+
node_fs_1.default.mkdirSync(outputPath, { recursive: true });
|
|
20
|
+
const writeStream = node_fs_1.default.createWriteStream(node_path_1.default.join(outputPath, hash + ".txt"));
|
|
21
|
+
const transform = new node_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 node_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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createCachedOutputTransform.js","sourceRoot":"","sources":["../src/createCachedOutputTransform.ts"],"names":[],"mappings":";;;;;;AACA,6CAAwC;AACxC,sDAAyB;AACzB,0DAA6B;AAE7B,SAAgB,0BAA0B,CAAC,MAAc,EAAE,IAAY;IACrE,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAC7E,OAAO,mBAAI,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,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC9B,iBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,iBAAE,CAAC,iBAAiB,CAAC,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;QAE/E,MAAM,SAAS,GAAG,IAAI,uBAAS,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,uBAAS,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"}
|
package/lib/formatDuration.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hrToSeconds = exports.formatDuration = void 0;
|
|
4
4
|
function formatDuration(seconds) {
|
|
5
|
-
|
|
5
|
+
const raw = parseFloat(seconds);
|
|
6
6
|
if (raw > 60) {
|
|
7
7
|
const minutes = Math.floor(raw / 60);
|
|
8
8
|
const seconds = (raw - minutes * 60).toFixed(2);
|
|
@@ -15,7 +15,7 @@ function formatDuration(seconds) {
|
|
|
15
15
|
}
|
|
16
16
|
exports.formatDuration = formatDuration;
|
|
17
17
|
function hrToSeconds(hrtime) {
|
|
18
|
-
|
|
18
|
+
const raw = hrtime[0] + hrtime[1] / 1e9;
|
|
19
19
|
return raw.toFixed(2);
|
|
20
20
|
}
|
|
21
21
|
exports.hrToSeconds = hrToSeconds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatDuration.js","sourceRoot":"","sources":["../src/formatDuration.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAC,OAAe;IAC5C,
|
|
1
|
+
{"version":3,"file":"formatDuration.js","sourceRoot":"","sources":["../src/formatDuration.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAC,OAAe;IAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,EAAE,EAAE;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC;KAClC;SAAM;QACL,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,GAAG,OAAO,GAAG,CAAC;KACtB;AACH,CAAC;AAVD,wCAUC;AAED,SAAgB,WAAW,CAAC,MAAwB;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAHD,kCAGC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export { SimpleScheduler } from "./SimpleScheduler";
|
|
2
1
|
export { NpmScriptRunner } from "./runners/NpmScriptRunner";
|
|
2
|
+
export { SimpleScheduler } from "./SimpleScheduler";
|
|
3
|
+
export { TargetRunnerPicker } from "./runners/TargetRunnerPicker";
|
|
4
|
+
export { WorkerRunner } from "./runners/WorkerRunner";
|
|
3
5
|
export type { TargetStatus } from "./types/TargetStatus";
|
|
4
6
|
export type { TargetRun } from "./types/TargetRun";
|
|
5
7
|
export type { TargetRunner } from "./types/TargetRunner";
|
package/lib/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var SimpleScheduler_1 = require("./SimpleScheduler");
|
|
5
|
-
Object.defineProperty(exports, "SimpleScheduler", { enumerable: true, get: function () { return SimpleScheduler_1.SimpleScheduler; } });
|
|
3
|
+
exports.WorkerRunner = exports.TargetRunnerPicker = exports.SimpleScheduler = exports.NpmScriptRunner = void 0;
|
|
6
4
|
var NpmScriptRunner_1 = require("./runners/NpmScriptRunner");
|
|
7
5
|
Object.defineProperty(exports, "NpmScriptRunner", { enumerable: true, get: function () { return NpmScriptRunner_1.NpmScriptRunner; } });
|
|
6
|
+
var SimpleScheduler_1 = require("./SimpleScheduler");
|
|
7
|
+
Object.defineProperty(exports, "SimpleScheduler", { enumerable: true, get: function () { return SimpleScheduler_1.SimpleScheduler; } });
|
|
8
|
+
var TargetRunnerPicker_1 = require("./runners/TargetRunnerPicker");
|
|
9
|
+
Object.defineProperty(exports, "TargetRunnerPicker", { enumerable: true, get: function () { return TargetRunnerPicker_1.TargetRunnerPicker; } });
|
|
10
|
+
var WorkerRunner_1 = require("./runners/WorkerRunner");
|
|
11
|
+
Object.defineProperty(exports, "WorkerRunner", { enumerable: true, get: function () { return WorkerRunner_1.WorkerRunner; } });
|
|
8
12
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AACxB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,mEAAkE;AAAzD,wHAAA,kBAAkB,OAAA;AAC3B,uDAAsD;AAA7C,4GAAA,YAAY,OAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { TargetRunner } from "../types/TargetRunner";
|
|
1
|
+
import type { TargetRunner } from "../types/TargetRunner";
|
|
2
2
|
export declare const NoOpRunner: TargetRunner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NoOpRunner.js","sourceRoot":"","sources":["../../src/runners/NoOpRunner.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAiB;IACtC,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"NoOpRunner.js","sourceRoot":"","sources":["../../src/runners/NoOpRunner.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAiB;IACtC,KAAK,CAAC,GAAG;QACP,OAAO;IACT,CAAC;CACF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import type { Logger } from "@lage-run/logger";
|
|
2
|
+
import type { TargetCaptureStreams, TargetRunner } from "../types/TargetRunner";
|
|
3
|
+
import type { AbortSignal } from "abort-controller";
|
|
4
4
|
import type { Target } from "@lage-run/target-graph";
|
|
5
5
|
export interface NpmScriptRunnerOptions {
|
|
6
6
|
logger: Logger;
|
|
@@ -33,5 +33,5 @@ export declare class NpmScriptRunner implements TargetRunner {
|
|
|
33
33
|
private getNpmArgs;
|
|
34
34
|
private hasNpmScript;
|
|
35
35
|
private validateOptions;
|
|
36
|
-
run(target: Target, abortSignal?: AbortSignal): Promise<void>;
|
|
36
|
+
run(target: Target, abortSignal?: AbortSignal, captureStreams?: TargetCaptureStreams): Promise<void>;
|
|
37
37
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NpmScriptRunner = void 0;
|
|
4
|
-
const child_process_1 = require("child_process");
|
|
5
4
|
const fs_1 = require("fs");
|
|
6
5
|
const path_1 = require("path");
|
|
7
6
|
const logger_1 = require("@lage-run/logger");
|
|
8
7
|
const promises_1 = require("fs/promises");
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
9
|
/**
|
|
10
10
|
* Runs a npm script on a target.
|
|
11
11
|
*
|
|
@@ -45,7 +45,7 @@ class NpmScriptRunner {
|
|
|
45
45
|
throw new Error(`NPM Script Runner: ${this.options.npmCmd} does not exist`);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
async run(target, abortSignal) {
|
|
48
|
+
async run(target, abortSignal, captureStreams = {}) {
|
|
49
49
|
var _a;
|
|
50
50
|
const { logger, nodeOptions, npmCmd, taskArgs } = this.options;
|
|
51
51
|
let childProcess;
|
|
@@ -93,7 +93,7 @@ class NpmScriptRunner {
|
|
|
93
93
|
env: Object.assign(Object.assign(Object.assign(Object.assign({}, process.env), (process.stdout.isTTY && { FORCE_COLOR: "1" })), (npmRunNodeOptions && { NODE_OPTIONS: npmRunNodeOptions })), { LAGE_PACKAGE_NAME: target.packageName, LAGE_TASK: target.task }),
|
|
94
94
|
});
|
|
95
95
|
let exitHandled = false;
|
|
96
|
-
const handleChildProcessExit = (code
|
|
96
|
+
const handleChildProcessExit = (code) => {
|
|
97
97
|
var _a, _b, _c;
|
|
98
98
|
childProcess === null || childProcess === void 0 ? void 0 : childProcess.off("exit", handleChildProcessExit);
|
|
99
99
|
childProcess === null || childProcess === void 0 ? void 0 : childProcess.off("error", handleChildProcessExit);
|
|
@@ -111,8 +111,16 @@ class NpmScriptRunner {
|
|
|
111
111
|
};
|
|
112
112
|
const { pid } = childProcess;
|
|
113
113
|
logger.verbose(`Running ${[npmCmd, ...npmRunArgs].join(" ")}, pid: ${pid}`, { target, pid });
|
|
114
|
-
|
|
115
|
-
|
|
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 });
|
|
116
124
|
childProcess.on("exit", handleChildProcessExit);
|
|
117
125
|
childProcess.on("error", () => handleChildProcessExit(1));
|
|
118
126
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmScriptRunner.js","sourceRoot":"","sources":["../../src/runners/NpmScriptRunner.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"NpmScriptRunner.js","sourceRoot":"","sources":["../../src/runners/NpmScriptRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Target } from "@lage-run/target-graph";
|
|
2
|
+
import type { TargetRunner } from "../types/TargetRunner";
|
|
3
|
+
interface TargetRunnerPickerOptions {
|
|
4
|
+
runners: {
|
|
5
|
+
[key: string]: TargetRunner;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export declare class TargetRunnerPicker {
|
|
9
|
+
private options;
|
|
10
|
+
constructor(options: TargetRunnerPickerOptions);
|
|
11
|
+
pick(target: Target): TargetRunner;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TargetRunnerPicker = void 0;
|
|
4
|
+
const target_graph_1 = require("@lage-run/target-graph");
|
|
5
|
+
const NoOpRunner_1 = require("./NoOpRunner");
|
|
6
|
+
class TargetRunnerPicker {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
pick(target) {
|
|
11
|
+
if (target.id === (0, target_graph_1.getStartTargetId)()) {
|
|
12
|
+
return NoOpRunner_1.NoOpRunner;
|
|
13
|
+
}
|
|
14
|
+
if (!target.type) {
|
|
15
|
+
target.type = "npmScript";
|
|
16
|
+
}
|
|
17
|
+
if (this.options.runners[target.type]) {
|
|
18
|
+
return this.options.runners[target.type];
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`No runner found for target ${target.id}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.TargetRunnerPicker = TargetRunnerPicker;
|
|
24
|
+
//# sourceMappingURL=TargetRunnerPicker.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { WorkerPool } from "@lage-run/worker-threads-pool";
|
|
3
|
+
import type { AbortSignal } from "abort-controller";
|
|
4
|
+
import type { Logger } from "@lage-run/logger";
|
|
5
|
+
import type { Target, TargetConfig } from "@lage-run/target-graph";
|
|
6
|
+
import type { TargetCaptureStreams, TargetRunner } from "../types/TargetRunner";
|
|
7
|
+
import type { Worker } from "worker_threads";
|
|
8
|
+
export interface WorkerRunnerOptions {
|
|
9
|
+
logger: Logger;
|
|
10
|
+
workerTargetConfigs: Record<string, TargetConfig>;
|
|
11
|
+
nodeOptions?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PoolOptions {
|
|
14
|
+
id: string;
|
|
15
|
+
options: Record<string, any>;
|
|
16
|
+
script: string;
|
|
17
|
+
nodeOptions: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a workerpool per target task definition of "type: worker"
|
|
21
|
+
*
|
|
22
|
+
* Target options are fed into `workerpool`, so target can customize the pool:
|
|
23
|
+
*
|
|
24
|
+
* https://www.npmjs.com/package/workerpool
|
|
25
|
+
*
|
|
26
|
+
* Example:
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* // lage.config.js
|
|
30
|
+
* {
|
|
31
|
+
* pipeline: {
|
|
32
|
+
* "lint": {
|
|
33
|
+
* type: "worker",
|
|
34
|
+
* options: {
|
|
35
|
+
* worker: "workers/lint.js",
|
|
36
|
+
* maxWorkers: 15,
|
|
37
|
+
* minWorkers: 2,
|
|
38
|
+
* }
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* ```js
|
|
45
|
+
* // worker.js
|
|
46
|
+
* const { WorkerRunner } = require("@lage-run/scheduler");
|
|
47
|
+
* WorkerRunner.register({
|
|
48
|
+
* })
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare class WorkerRunner implements TargetRunner {
|
|
52
|
+
private options;
|
|
53
|
+
private pools;
|
|
54
|
+
static gracefulKillTimeout: number;
|
|
55
|
+
constructor(options: WorkerRunnerOptions);
|
|
56
|
+
getPoolOptions(target: Target): PoolOptions;
|
|
57
|
+
ensurePool(poolOptions: PoolOptions): WorkerPool;
|
|
58
|
+
captureStream(target: Target, worker: Worker, captureStreams?: TargetCaptureStreams): () => void;
|
|
59
|
+
run(target: Target, abortSignal?: AbortSignal, captureStreams?: TargetCaptureStreams): Promise<void>;
|
|
60
|
+
cleanup(): void;
|
|
61
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
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.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
|
+
/**
|
|
11
|
+
* Creates a workerpool per target task definition of "type: worker"
|
|
12
|
+
*
|
|
13
|
+
* Target options are fed into `workerpool`, so target can customize the pool:
|
|
14
|
+
*
|
|
15
|
+
* https://www.npmjs.com/package/workerpool
|
|
16
|
+
*
|
|
17
|
+
* Example:
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* // lage.config.js
|
|
21
|
+
* {
|
|
22
|
+
* pipeline: {
|
|
23
|
+
* "lint": {
|
|
24
|
+
* type: "worker",
|
|
25
|
+
* options: {
|
|
26
|
+
* worker: "workers/lint.js",
|
|
27
|
+
* maxWorkers: 15,
|
|
28
|
+
* minWorkers: 2,
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ```js
|
|
36
|
+
* // worker.js
|
|
37
|
+
* const { WorkerRunner } = require("@lage-run/scheduler");
|
|
38
|
+
* WorkerRunner.register({
|
|
39
|
+
* })
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
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, captureStreams = {}) {
|
|
88
|
+
const { logger } = this.options;
|
|
89
|
+
let stdout = worker.stdout;
|
|
90
|
+
let stderr = worker.stderr;
|
|
91
|
+
const releaseStreams = {
|
|
92
|
+
stdout: () => {
|
|
93
|
+
// pass
|
|
94
|
+
},
|
|
95
|
+
stderr: () => {
|
|
96
|
+
// pass
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
if (stdout) {
|
|
100
|
+
if (captureStreams.stdout) {
|
|
101
|
+
stdout = stdout.pipe(captureStreams.stdout);
|
|
102
|
+
}
|
|
103
|
+
releaseStreams.stdout = logger.stream(logger_1.LogLevel.verbose, stdout, { target, tid: worker.threadId });
|
|
104
|
+
}
|
|
105
|
+
if (stderr) {
|
|
106
|
+
if (captureStreams.stderr) {
|
|
107
|
+
stderr = stderr.pipe(captureStreams.stderr);
|
|
108
|
+
}
|
|
109
|
+
releaseStreams.stderr = logger.stream(logger_1.LogLevel.verbose, stderr, { target, tid: worker.threadId });
|
|
110
|
+
}
|
|
111
|
+
return () => {
|
|
112
|
+
if (captureStreams.stdout && stdout) {
|
|
113
|
+
stdout.unpipe(captureStreams.stdout);
|
|
114
|
+
captureStreams.stdout.destroy();
|
|
115
|
+
}
|
|
116
|
+
if (captureStreams.stderr && stderr) {
|
|
117
|
+
stderr.unpipe(captureStreams.stderr);
|
|
118
|
+
captureStreams.stderr.destroy();
|
|
119
|
+
}
|
|
120
|
+
releaseStreams.stdout();
|
|
121
|
+
releaseStreams.stderr();
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async run(target, abortSignal, captureStreams = {}) {
|
|
125
|
+
if (abortSignal) {
|
|
126
|
+
if (abortSignal.aborted) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const abortSignalHandler = () => {
|
|
130
|
+
abortSignal.removeEventListener("abort", abortSignalHandler);
|
|
131
|
+
this.cleanup();
|
|
132
|
+
};
|
|
133
|
+
abortSignal.addEventListener("abort", abortSignalHandler);
|
|
134
|
+
}
|
|
135
|
+
const poolOptions = this.getPoolOptions(target);
|
|
136
|
+
const pool = this.ensurePool(poolOptions);
|
|
137
|
+
let cleanupStreams;
|
|
138
|
+
await pool.exec({ target }, (worker) => {
|
|
139
|
+
cleanupStreams = this.captureStream(target, worker, captureStreams);
|
|
140
|
+
}, (worker) => {
|
|
141
|
+
cleanupStreams();
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
cleanup() {
|
|
145
|
+
for (const pool of Object.values(this.pools)) {
|
|
146
|
+
pool.close();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.WorkerRunner = WorkerRunner;
|
|
151
|
+
WorkerRunner.gracefulKillTimeout = 2500;
|
|
152
|
+
//# sourceMappingURL=WorkerRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerRunner.js","sourceRoot":"","sources":["../../src/runners/WorkerRunner.ts"],"names":[],"mappings":"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"}
|
package/lib/types/TargetRun.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Target } from "@lage-run/target-graph";
|
|
2
|
-
import { TargetStatus } from "./TargetStatus";
|
|
1
|
+
import type { Target } from "@lage-run/target-graph";
|
|
2
|
+
import type { TargetStatus } from "./TargetStatus";
|
|
3
3
|
export interface TargetRun {
|
|
4
4
|
startTime: [number, number];
|
|
5
5
|
duration: [number, number];
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { Target } from "@lage-run/target-graph";
|
|
2
3
|
import type { AbortSignal } from "abort-controller";
|
|
4
|
+
import type { Transform } from "stream";
|
|
5
|
+
export interface TargetCaptureStreams {
|
|
6
|
+
stdout?: Transform;
|
|
7
|
+
stderr?: Transform;
|
|
8
|
+
}
|
|
3
9
|
export interface TargetRunner {
|
|
4
|
-
run(target: Target, abortSignal?: AbortSignal): Promise<void>;
|
|
10
|
+
run(target: Target, abortSignal?: AbortSignal, captureStreams?: TargetCaptureStreams): Promise<void>;
|
|
11
|
+
cleanup?(): Promise<void> | void;
|
|
5
12
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lage-run/scheduler",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Scheduler for Lage",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/microsoft/lage"
|
|
@@ -15,9 +15,10 @@
|
|
|
15
15
|
"lint": "monorepo-scripts lint"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@lage-run/target-graph": "^0.
|
|
19
|
-
"@lage-run/logger": "^1.
|
|
20
|
-
"@lage-run/cache": "^0.1.
|
|
18
|
+
"@lage-run/target-graph": "^0.3.0",
|
|
19
|
+
"@lage-run/logger": "^1.2.0",
|
|
20
|
+
"@lage-run/cache": "^0.1.7",
|
|
21
|
+
"@lage-run/worker-threads-pool": "^0.1.1",
|
|
21
22
|
"p-graph": "^1.1.1",
|
|
22
23
|
"p-profiler": "^0.2.1",
|
|
23
24
|
"abort-controller": "^3.0.0",
|
|
@@ -26,7 +27,8 @@
|
|
|
26
27
|
"devDependencies": {
|
|
27
28
|
"@lage-run/monorepo-fixture": "^0.1.0",
|
|
28
29
|
"@types/jest": "^27.0.1",
|
|
29
|
-
"@types/node": "
|
|
30
|
+
"@types/node": "14.18.26",
|
|
31
|
+
"@types/workerpool": "^6.1.0",
|
|
30
32
|
"monorepo-scripts": "*"
|
|
31
33
|
},
|
|
32
34
|
"publishConfig": {
|