build-raptor 0.131.0 → 0.133.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/dist/deps/brand/brand.d.ts +5 -0
- package/dist/deps/brand/brand.js +3 -0
- package/dist/deps/brand/index.d.ts +1 -0
- package/dist/deps/brand/index.js +18 -0
- package/dist/deps/build-failed-error/build-failed-error.d.ts +14 -0
- package/dist/deps/build-failed-error/build-failed-error.js +13 -0
- package/dist/deps/build-failed-error/index.d.ts +1 -0
- package/dist/deps/build-failed-error/index.js +18 -0
- package/dist/deps/build-raptor-api/build-raptor-api.d.ts +351 -0
- package/dist/deps/build-raptor-api/build-raptor-api.js +132 -0
- package/dist/deps/build-raptor-api/index.d.ts +2 -0
- package/dist/deps/build-raptor-api/index.js +19 -0
- package/dist/deps/build-raptor-api/step-by-step-processor.d.ts +35 -0
- package/dist/deps/build-raptor-api/step-by-step-processor.js +3 -0
- package/dist/deps/build-raptor-core/breakdown.d.ts +18 -0
- package/dist/deps/build-raptor-core/breakdown.js +99 -0
- package/dist/deps/build-raptor-core/build-raptor-config.d.ts +21 -0
- package/dist/deps/build-raptor-core/build-raptor-config.js +25 -0
- package/dist/deps/build-raptor-core/default-asset-publisher.d.ts +10 -0
- package/dist/deps/build-raptor-core/default-asset-publisher.js +16 -0
- package/dist/deps/build-raptor-core/engine-bootstrapper.d.ts +50 -0
- package/dist/deps/build-raptor-core/engine-bootstrapper.js +200 -0
- package/dist/deps/build-raptor-core/engine-event-scheme.d.ts +20 -0
- package/dist/deps/build-raptor-core/engine-event-scheme.js +3 -0
- package/dist/deps/build-raptor-core/engine.d.ts +66 -0
- package/dist/deps/build-raptor-core/engine.js +285 -0
- package/dist/deps/build-raptor-core/examplify-zod.d.ts +93 -0
- package/dist/deps/build-raptor-core/examplify-zod.js +257 -0
- package/dist/deps/build-raptor-core/execution-plan.d.ts +20 -0
- package/dist/deps/build-raptor-core/execution-plan.js +66 -0
- package/dist/deps/build-raptor-core/execution-record.d.ts +17 -0
- package/dist/deps/build-raptor-core/execution-record.js +3 -0
- package/dist/deps/build-raptor-core/execution-type.d.ts +2 -0
- package/dist/deps/build-raptor-core/execution-type.js +3 -0
- package/dist/deps/build-raptor-core/find-repo-dir.d.ts +1 -0
- package/dist/deps/build-raptor-core/find-repo-dir.js +27 -0
- package/dist/deps/build-raptor-core/fingerprint-ledger.d.ts +33 -0
- package/dist/deps/build-raptor-core/fingerprint-ledger.js +164 -0
- package/dist/deps/build-raptor-core/fingerprint.d.ts +3 -0
- package/dist/deps/build-raptor-core/fingerprint.js +13 -0
- package/dist/deps/build-raptor-core/fingerprinter.d.ts +15 -0
- package/dist/deps/build-raptor-core/fingerprinter.js +122 -0
- package/dist/deps/build-raptor-core/hasher.d.ts +21 -0
- package/dist/deps/build-raptor-core/hasher.js +93 -0
- package/dist/deps/build-raptor-core/index.d.ts +9 -0
- package/dist/deps/build-raptor-core/index.js +26 -0
- package/dist/deps/build-raptor-core/model.d.ts +17 -0
- package/dist/deps/build-raptor-core/model.js +40 -0
- package/dist/deps/build-raptor-core/nop-asset-publisher.d.ts +6 -0
- package/dist/deps/build-raptor-core/nop-asset-publisher.js +12 -0
- package/dist/deps/build-raptor-core/performance-report.d.ts +5 -0
- package/dist/deps/build-raptor-core/performance-report.js +3 -0
- package/dist/deps/build-raptor-core/phase.d.ts +1 -0
- package/dist/deps/build-raptor-core/phase.js +3 -0
- package/dist/deps/build-raptor-core/planner.d.ts +12 -0
- package/dist/deps/build-raptor-core/planner.js +43 -0
- package/dist/deps/build-raptor-core/purger.d.ts +11 -0
- package/dist/deps/build-raptor-core/purger.js +65 -0
- package/dist/deps/build-raptor-core/slot-index.d.ts +6 -0
- package/dist/deps/build-raptor-core/slot-index.js +17 -0
- package/dist/deps/build-raptor-core/step-by-step-transmitter.d.ts +15 -0
- package/dist/deps/build-raptor-core/step-by-step-transmitter.js +94 -0
- package/dist/deps/build-raptor-core/tar-stream.d.ts +20 -0
- package/dist/deps/build-raptor-core/tar-stream.js +194 -0
- package/dist/deps/build-raptor-core/task-executor.d.ts +32 -0
- package/dist/deps/build-raptor-core/task-executor.js +321 -0
- package/dist/deps/build-raptor-core/task-store-cli.d.ts +1 -0
- package/dist/deps/build-raptor-core/task-store-cli.js +61 -0
- package/dist/deps/build-raptor-core/task-store-event.d.ts +17 -0
- package/dist/deps/build-raptor-core/task-store-event.js +3 -0
- package/dist/deps/build-raptor-core/task-store.d.ts +41 -0
- package/dist/deps/build-raptor-core/task-store.js +302 -0
- package/dist/deps/build-raptor-core/task-summary.d.ts +12 -0
- package/dist/deps/build-raptor-core/task-summary.js +3 -0
- package/dist/deps/build-raptor-core/task-tracker.d.ts +23 -0
- package/dist/deps/build-raptor-core/task-tracker.js +97 -0
- package/dist/deps/build-raptor-core/task.d.ts +30 -0
- package/dist/deps/build-raptor-core/task.js +90 -0
- package/dist/deps/build-raptor-core/updatable-task-output-registry.d.ts +13 -0
- package/dist/deps/build-raptor-core/updatable-task-output-registry.js +75 -0
- package/dist/deps/build-raptor-core/validate-task-infos.d.ts +3 -0
- package/dist/deps/build-raptor-core/validate-task-infos.js +53 -0
- package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.d.ts +1 -0
- package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.js +18 -0
- package/dist/deps/build-raptor-core-testkit/driver.d.ts +119 -0
- package/dist/deps/build-raptor-core-testkit/driver.js +305 -0
- package/dist/deps/build-raptor-core-testkit/index.d.ts +3 -0
- package/dist/deps/build-raptor-core-testkit/index.js +20 -0
- package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.d.ts +35 -0
- package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.js +226 -0
- package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.d.ts +27 -0
- package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.js +140 -0
- package/dist/deps/build-run-id/build-run-id.d.ts +3 -0
- package/dist/deps/build-run-id/build-run-id.js +13 -0
- package/dist/deps/build-run-id/index.d.ts +1 -0
- package/dist/deps/build-run-id/index.js +18 -0
- package/dist/deps/core-types/core-types.d.ts +29 -0
- package/dist/deps/core-types/core-types.js +81 -0
- package/dist/deps/core-types/index.d.ts +1 -0
- package/dist/deps/core-types/index.js +18 -0
- package/dist/deps/logger/index.d.ts +1 -0
- package/dist/deps/logger/index.js +18 -0
- package/dist/deps/logger/logger.d.ts +26 -0
- package/dist/deps/logger/logger.js +152 -0
- package/dist/deps/misc/arrays.d.ts +7 -0
- package/dist/deps/misc/arrays.js +67 -0
- package/dist/deps/misc/camelize-record.d.ts +6 -0
- package/dist/deps/misc/camelize-record.js +16 -0
- package/dist/deps/misc/clean-directory.d.ts +4 -0
- package/dist/deps/misc/clean-directory.js +80 -0
- package/dist/deps/misc/constructs.d.ts +106 -0
- package/dist/deps/misc/constructs.js +131 -0
- package/dist/deps/misc/directory-scanner.d.ts +49 -0
- package/dist/deps/misc/directory-scanner.js +165 -0
- package/dist/deps/misc/executor.d.ts +39 -0
- package/dist/deps/misc/executor.js +59 -0
- package/dist/deps/misc/file-system-storage-client.d.ts +23 -0
- package/dist/deps/misc/file-system-storage-client.js +93 -0
- package/dist/deps/misc/folderify.d.ts +8 -0
- package/dist/deps/misc/folderify.js +86 -0
- package/dist/deps/misc/graph.d.ts +29 -0
- package/dist/deps/misc/graph.js +200 -0
- package/dist/deps/misc/in-memory-storage-client.d.ts +21 -0
- package/dist/deps/misc/in-memory-storage-client.js +75 -0
- package/dist/deps/misc/index.d.ts +20 -0
- package/dist/deps/misc/index.js +37 -0
- package/dist/deps/misc/int.d.ts +10 -0
- package/dist/deps/misc/int.js +29 -0
- package/dist/deps/misc/internal/graph-executor.d.ts +15 -0
- package/dist/deps/misc/internal/graph-executor.js +93 -0
- package/dist/deps/misc/maps.d.ts +29 -0
- package/dist/deps/misc/maps.js +47 -0
- package/dist/deps/misc/misc.d.ts +23 -0
- package/dist/deps/misc/misc.js +94 -0
- package/dist/deps/misc/object-map.d.ts +10 -0
- package/dist/deps/misc/object-map.js +26 -0
- package/dist/deps/misc/promises.d.ts +39 -0
- package/dist/deps/misc/promises.js +78 -0
- package/dist/deps/misc/records.d.ts +11 -0
- package/dist/deps/misc/records.js +40 -0
- package/dist/deps/misc/slurp-dir.d.ts +1 -0
- package/dist/deps/misc/slurp-dir.js +14 -0
- package/dist/deps/misc/storage-client.d.ts +12 -0
- package/dist/deps/misc/storage-client.js +3 -0
- package/dist/deps/misc/stream-to-buffer.d.ts +2 -0
- package/dist/deps/misc/stream-to-buffer.js +26 -0
- package/dist/deps/misc/strings.d.ts +12 -0
- package/dist/deps/misc/strings.js +68 -0
- package/dist/deps/misc/typed-publisher.d.ts +17 -0
- package/dist/deps/misc/typed-publisher.js +65 -0
- package/dist/deps/repo-protocol/index.d.ts +3 -0
- package/dist/deps/repo-protocol/index.js +20 -0
- package/dist/deps/repo-protocol/repo-protocol.d.ts +49 -0
- package/dist/deps/repo-protocol/repo-protocol.js +3 -0
- package/dist/deps/repo-protocol/task-info.d.ts +18 -0
- package/dist/deps/repo-protocol/task-info.js +3 -0
- package/dist/deps/repo-protocol/test-run-summary.d.ts +54 -0
- package/dist/deps/repo-protocol/test-run-summary.js +32 -0
- package/dist/deps/repo-protocol-toolbox/generate-task-infos.d.ts +5 -0
- package/dist/deps/repo-protocol-toolbox/generate-task-infos.js +26 -0
- package/dist/deps/repo-protocol-toolbox/index.d.ts +3 -0
- package/dist/deps/repo-protocol-toolbox/index.js +20 -0
- package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.d.ts +10 -0
- package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.js +90 -0
- package/dist/deps/repo-protocol-toolbox/task-definition.d.ts +14 -0
- package/dist/deps/repo-protocol-toolbox/task-definition.js +3 -0
- package/dist/deps/reporter-output/index.d.ts +1 -0
- package/dist/deps/reporter-output/index.js +18 -0
- package/dist/deps/reporter-output/reporter-output.d.ts +49 -0
- package/dist/deps/reporter-output/reporter-output.js +25 -0
- package/dist/deps/s3-storage-client/creds.d.ts +4 -0
- package/dist/deps/s3-storage-client/creds.js +3 -0
- package/dist/deps/s3-storage-client/get-s3-storage-client-factory.d.ts +3 -0
- package/dist/deps/s3-storage-client/get-s3-storage-client-factory.js +45 -0
- package/dist/deps/s3-storage-client/index.d.ts +2 -0
- package/dist/deps/s3-storage-client/index.js +19 -0
- package/dist/deps/s3-storage-client/main.d.ts +1 -0
- package/dist/deps/s3-storage-client/main.js +20 -0
- package/dist/deps/s3-storage-client/s3-storage-client.d.ts +25 -0
- package/dist/deps/s3-storage-client/s3-storage-client.js +134 -0
- package/dist/deps/task-name/index.d.ts +1 -0
- package/dist/deps/task-name/index.js +18 -0
- package/dist/deps/task-name/task-name.d.ts +17 -0
- package/dist/deps/task-name/task-name.js +44 -0
- package/dist/deps/unit-metadata/index.d.ts +1 -0
- package/dist/deps/unit-metadata/index.js +18 -0
- package/dist/deps/unit-metadata/unit-metadata.d.ts +14 -0
- package/dist/deps/unit-metadata/unit-metadata.js +32 -0
- package/dist/deps/yarn-repo-protocol/build-task-record.d.ts +61 -0
- package/dist/deps/yarn-repo-protocol/build-task-record.js +29 -0
- package/dist/deps/yarn-repo-protocol/generate-test-run-summary.d.ts +4 -0
- package/dist/deps/yarn-repo-protocol/generate-test-run-summary.js +26 -0
- package/dist/deps/yarn-repo-protocol/index.d.ts +2 -0
- package/dist/deps/yarn-repo-protocol/index.js +19 -0
- package/dist/deps/yarn-repo-protocol/rerun-list.d.ts +12 -0
- package/dist/deps/yarn-repo-protocol/rerun-list.js +6 -0
- package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.d.ts +24 -0
- package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.js +34 -0
- package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.d.ts +82 -0
- package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.js +1036 -0
- package/dist/src/build-raptor-cli.d.ts +60 -0
- package/dist/src/build-raptor-cli.js +514 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +20 -0
- package/dist/src/main.d.ts +2 -0
- package/dist/src/main.js +23 -0
- package/dist/src/register-asset-request.d.ts +18 -0
- package/dist/src/register-asset-request.js +11 -0
- package/dist/src/task-execution-visualizer.d.ts +17 -0
- package/dist/src/task-execution-visualizer.js +116 -0
- package/package.json +17 -14
- package/build-raptor.js +0 -7259
- package/index.d.ts +0 -22
- package/index.js +0 -7231
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TaskExecutor = void 0;
|
|
37
|
+
const build_failed_error_1 = require("build-failed-error");
|
|
38
|
+
const fse = __importStar(require("fs-extra"));
|
|
39
|
+
const misc_1 = require("misc");
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const task_name_1 = require("task-name");
|
|
42
|
+
/**
|
|
43
|
+
* An object that is reponsible for executing a task.
|
|
44
|
+
*/
|
|
45
|
+
class TaskExecutor {
|
|
46
|
+
constructor(model, tracker, logger, repoProtocol, taskStore, taskOutputDir, eventPublisher, fingerprintLedger, purger, testCaching, tasksToDiagnose) {
|
|
47
|
+
this.model = model;
|
|
48
|
+
this.tracker = tracker;
|
|
49
|
+
this.logger = logger;
|
|
50
|
+
this.repoProtocol = repoProtocol;
|
|
51
|
+
this.taskStore = taskStore;
|
|
52
|
+
this.taskOutputDir = taskOutputDir;
|
|
53
|
+
this.eventPublisher = eventPublisher;
|
|
54
|
+
this.fingerprintLedger = fingerprintLedger;
|
|
55
|
+
this.purger = purger;
|
|
56
|
+
this.testCaching = testCaching;
|
|
57
|
+
this.tasksToDiagnose = tasksToDiagnose;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @param taskName
|
|
61
|
+
* @param fingerprintDeps other tasks whose fingerprint need to be part of the fingerprint of `taskName`.
|
|
62
|
+
*/
|
|
63
|
+
async executeTask(taskName, fingerprintDeps) {
|
|
64
|
+
const ste = new SingleTaskExecutor(taskName, fingerprintDeps, this.model, this.tracker, this.logger, this.repoProtocol, this.taskStore, this.taskOutputDir, this.eventPublisher, this.fingerprintLedger, this.purger, this.testCaching, this.tasksToDiagnose.includes(taskName));
|
|
65
|
+
await ste.executeTask();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.TaskExecutor = TaskExecutor;
|
|
69
|
+
class SingleTaskExecutor {
|
|
70
|
+
/**
|
|
71
|
+
* @param taskName
|
|
72
|
+
* @param fingerprintDeps other tasks whose fingerprint need to be part of the fingerprint of `taskName`.
|
|
73
|
+
* @param model
|
|
74
|
+
* @param tracker
|
|
75
|
+
* @param logger
|
|
76
|
+
* @param repoProtocol
|
|
77
|
+
* @param taskStore
|
|
78
|
+
* @param taskOutputDir
|
|
79
|
+
* @param eventPublisher
|
|
80
|
+
* @param fingerprintLedger
|
|
81
|
+
* @param purger
|
|
82
|
+
* @param testCaching
|
|
83
|
+
* @param shouldDiagnose
|
|
84
|
+
*/
|
|
85
|
+
constructor(taskName, fingerprintDeps, model, tracker, logger, repoProtocol, taskStore, taskOutputDir, eventPublisher, fingerprintLedger, purger, testCaching, shouldDiagnose) {
|
|
86
|
+
this.taskName = taskName;
|
|
87
|
+
this.fingerprintDeps = fingerprintDeps;
|
|
88
|
+
this.model = model;
|
|
89
|
+
this.tracker = tracker;
|
|
90
|
+
this.logger = logger;
|
|
91
|
+
this.repoProtocol = repoProtocol;
|
|
92
|
+
this.taskStore = taskStore;
|
|
93
|
+
this.taskOutputDir = taskOutputDir;
|
|
94
|
+
this.eventPublisher = eventPublisher;
|
|
95
|
+
this.fingerprintLedger = fingerprintLedger;
|
|
96
|
+
this.purger = purger;
|
|
97
|
+
this.testCaching = testCaching;
|
|
98
|
+
this.shouldDiagnose = shouldDiagnose;
|
|
99
|
+
this.phasePublisher = new misc_1.TypedPublisher();
|
|
100
|
+
this.isTest = (0, task_name_1.TaskName)().undo(this.taskName).taskKind === 'test';
|
|
101
|
+
}
|
|
102
|
+
diagnose(message) {
|
|
103
|
+
if (!this.shouldDiagnose) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.logger.print(`[${this.taskName}] ${message}`);
|
|
107
|
+
}
|
|
108
|
+
get task() {
|
|
109
|
+
return this.tracker.getTask(this.taskName);
|
|
110
|
+
}
|
|
111
|
+
get unit() {
|
|
112
|
+
return this.model.getUnit(this.task.unitId);
|
|
113
|
+
}
|
|
114
|
+
async postProcess(status, outputFile, time) {
|
|
115
|
+
// Since outputFile's content can be big, read it only if this task is "diagnosed".
|
|
116
|
+
if (this.shouldDiagnose) {
|
|
117
|
+
const content = fse.readFileSync(outputFile, 'utf-8');
|
|
118
|
+
this.diagnose(`content of ${outputFile} is ${content}`);
|
|
119
|
+
}
|
|
120
|
+
// TODO(imaman): cover (await is dropped)
|
|
121
|
+
await this.eventPublisher.publish('executionEnded', {
|
|
122
|
+
taskName: this.taskName,
|
|
123
|
+
status,
|
|
124
|
+
outputFile,
|
|
125
|
+
time,
|
|
126
|
+
pathInRepo: this.unit.pathInRepo.val,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async computeFingerprint() {
|
|
130
|
+
const fps = [];
|
|
131
|
+
const t = this.task;
|
|
132
|
+
// TODO(imaman): test coverage for the sort-by
|
|
133
|
+
// TODO(imaman): concurrent loop
|
|
134
|
+
this.diagnose(`deps are ${JSON.stringify(this.fingerprintDeps)}, info.deps=${JSON.stringify(t.taskInfo.deps)}`);
|
|
135
|
+
for (const d of this.fingerprintDeps) {
|
|
136
|
+
const dep = this.tracker.getTask(d);
|
|
137
|
+
fps.push(dep.getFingerprint());
|
|
138
|
+
}
|
|
139
|
+
const parts = {};
|
|
140
|
+
this.diagnose(`inputs are: ${t.inputs}`);
|
|
141
|
+
for (const loc of t.inputs) {
|
|
142
|
+
const fingerprint = await this.model.fingerprintOfDir(loc);
|
|
143
|
+
fps.push(fingerprint);
|
|
144
|
+
parts[loc.val] = fingerprint;
|
|
145
|
+
}
|
|
146
|
+
t.computeFingerprint(fps);
|
|
147
|
+
const ret = t.getFingerprint();
|
|
148
|
+
this.fingerprintLedger.updateTask(t.name, ret, parts);
|
|
149
|
+
return ret;
|
|
150
|
+
}
|
|
151
|
+
async validateOutputs() {
|
|
152
|
+
const t = this.task;
|
|
153
|
+
const missing = await (0, misc_1.promises)(t.outputLocations)
|
|
154
|
+
.filter(async (loc) => {
|
|
155
|
+
const resolved = this.model.rootDir.resolve(loc.pathInRepo);
|
|
156
|
+
const exists = await fse.pathExists(resolved);
|
|
157
|
+
return !exists;
|
|
158
|
+
})
|
|
159
|
+
.reify(100);
|
|
160
|
+
if (!missing.length) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const formatted = missing.map(at => ` - ${at.pathInRepo}`).join('\n');
|
|
164
|
+
this.logger.info(`missing outputs for task ${t.name}: ${JSON.stringify(missing)}`);
|
|
165
|
+
throw new build_failed_error_1.BuildFailedError(`Task ${this.taskName} failed to produce the following outputs:\n${formatted}`);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Exectues the task.
|
|
169
|
+
*/
|
|
170
|
+
async executeTask() {
|
|
171
|
+
try {
|
|
172
|
+
const t = this.task;
|
|
173
|
+
if (this.tracker.hasVerdict(t.name)) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
await this.runPhases();
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
this.logger.error(`Task ${this.taskName} is exiting with an error`, e);
|
|
180
|
+
throw e;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
get dir() {
|
|
184
|
+
return this.model.rootDir.resolve(this.unit.pathInRepo);
|
|
185
|
+
}
|
|
186
|
+
get fp() {
|
|
187
|
+
return this.fp_ ?? (0, misc_1.failMe)(`fingerprint was not set on task ${this.taskName}`);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Determines whether this executor can execute its task. It is possible that several executors will try to run the
|
|
191
|
+
* same task. This method ensures that exactly one such executor will actually execute it.
|
|
192
|
+
* @returns true if the task should be executed by this executor, false otherwise.
|
|
193
|
+
*/
|
|
194
|
+
grabExecutionRights() {
|
|
195
|
+
// This method cannot be async, because it should do a compare-and-set on the task's phase in an atomic manner.
|
|
196
|
+
// This atomicity ensures that a task will only be executed once.
|
|
197
|
+
if (this.task.hasPhase()) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
this.task.setPhase('UNSTARTED');
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
async runPhases() {
|
|
204
|
+
const rightsGrabbed = this.grabExecutionRights();
|
|
205
|
+
if (!rightsGrabbed) {
|
|
206
|
+
await this.eventPublisher.awaitFor('taskPhaseEnded', e => e.taskName === this.taskName && e.phase === 'TERMINAL');
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
this.tracker.changeStatus(this.taskName, 'RUNNING');
|
|
210
|
+
let phase = 'RUNNING';
|
|
211
|
+
while (true) {
|
|
212
|
+
this.task.setPhase(phase);
|
|
213
|
+
await this.eventPublisher.publish('taskPhaseEnded', { taskName: this.taskName, phase });
|
|
214
|
+
if (phase === 'TERMINAL') {
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
phase = await this.executePhase(phase);
|
|
218
|
+
await this.phasePublisher.publish('phase', phase);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async executePhase(phase) {
|
|
222
|
+
this.logger.info(`Running ${phase} of ${this.taskName}`);
|
|
223
|
+
this.diagnose(`Running phase ${phase}`);
|
|
224
|
+
const t = this.task;
|
|
225
|
+
// TODO(imaman): some of the phases are essentially a no-op and can be eliminated.
|
|
226
|
+
if (phase === 'UNSTARTED') {
|
|
227
|
+
return 'RUNNING';
|
|
228
|
+
}
|
|
229
|
+
if (phase === 'RUNNING') {
|
|
230
|
+
return 'COMPUTE_FINGERPRINT';
|
|
231
|
+
}
|
|
232
|
+
if (phase === 'COMPUTE_FINGERPRINT') {
|
|
233
|
+
this.fp_ = await this.computeFingerprint();
|
|
234
|
+
this.diagnose(`fingerprint is ${this.fp_}`);
|
|
235
|
+
return 'POSSIBLY_RESTORE_OUTPUTS';
|
|
236
|
+
}
|
|
237
|
+
if (phase === 'POSSIBLY_RESTORE_OUTPUTS') {
|
|
238
|
+
const earlierVerdict = await this.getVerdict();
|
|
239
|
+
this.diagnose(`earlierVerdict is ${earlierVerdict}`);
|
|
240
|
+
const useCaching = this.task.taskInfo.useCaching ?? true;
|
|
241
|
+
if (earlierVerdict === 'UNKNOWN' || (this.isTest && !this.testCaching) || !useCaching) {
|
|
242
|
+
await this.purgeOutputs(false);
|
|
243
|
+
return 'RUN_IT';
|
|
244
|
+
}
|
|
245
|
+
await this.purgeOutputs(true);
|
|
246
|
+
await this.restoreOutputs();
|
|
247
|
+
if (earlierVerdict === 'FAIL') {
|
|
248
|
+
return 'RUN_IT';
|
|
249
|
+
}
|
|
250
|
+
if (earlierVerdict === 'OK' || earlierVerdict === 'FLAKY') {
|
|
251
|
+
this.tracker.registerCachedVerdict(t.name, earlierVerdict);
|
|
252
|
+
return 'SKIP';
|
|
253
|
+
}
|
|
254
|
+
(0, misc_1.shouldNeverHappen)(earlierVerdict);
|
|
255
|
+
}
|
|
256
|
+
if (phase === 'SKIP') {
|
|
257
|
+
await this.eventPublisher.publish('executionSkipped', t.name);
|
|
258
|
+
return 'TERMINAL';
|
|
259
|
+
}
|
|
260
|
+
if (phase === 'RUN_IT') {
|
|
261
|
+
this.diagnose('running it');
|
|
262
|
+
await this.runIt();
|
|
263
|
+
return 'TERMINAL';
|
|
264
|
+
}
|
|
265
|
+
if (phase === 'TERMINAL') {
|
|
266
|
+
throw new Error(`task ${t.name} is already in state ${phase}`);
|
|
267
|
+
}
|
|
268
|
+
(0, misc_1.shouldNeverHappen)(phase);
|
|
269
|
+
}
|
|
270
|
+
async restoreOutputs() {
|
|
271
|
+
this.diagnose(`restoring outputs`);
|
|
272
|
+
const t = this.task;
|
|
273
|
+
await this.taskStore.restoreTask(t.name, this.fp);
|
|
274
|
+
this.diagnose(`task restored`);
|
|
275
|
+
}
|
|
276
|
+
async getVerdict() {
|
|
277
|
+
const earlierVerdict = await this.taskStore.checkVerdict(this.task.name, this.fp);
|
|
278
|
+
return earlierVerdict;
|
|
279
|
+
}
|
|
280
|
+
async runIt() {
|
|
281
|
+
const t = this.task;
|
|
282
|
+
const t0 = Date.now();
|
|
283
|
+
await this.eventPublisher.publish('executionStarted', t.name);
|
|
284
|
+
const outputFile = path.join(this.taskOutputDir, `${t.id}.stdout`);
|
|
285
|
+
const status = await this.repoProtocol.execute(t.name, outputFile, this.model.buildRunId);
|
|
286
|
+
await this.postProcess(status, outputFile, Date.now() - t0);
|
|
287
|
+
this.diagnose(`status=${status}`);
|
|
288
|
+
if (status === 'CRASH') {
|
|
289
|
+
throw new Error(`Task ${JSON.stringify(t.name)} crashed`);
|
|
290
|
+
}
|
|
291
|
+
const outputs = t.outputLocations.map(at => ({ isPublic: false, ...at }));
|
|
292
|
+
if (status === 'OK') {
|
|
293
|
+
await this.validateOutputs();
|
|
294
|
+
this.diagnose(`registering verdict`);
|
|
295
|
+
this.tracker.registerVerdict(t.name, status, outputFile);
|
|
296
|
+
this.diagnose(`recording outputs: ${JSON.stringify(outputs)}`);
|
|
297
|
+
await this.taskStore.recordTask(t.name, this.fp, outputs, 'OK');
|
|
298
|
+
this.diagnose(`...outputs recorded`);
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
if (status === 'FAIL') {
|
|
302
|
+
this.tracker.registerVerdict(t.name, status, outputFile);
|
|
303
|
+
// TODO(imaman): should not record outputs if task has failed.
|
|
304
|
+
await this.taskStore.recordTask(t.name, this.fp, outputs, status);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
(0, misc_1.shouldNeverHappen)(status);
|
|
308
|
+
}
|
|
309
|
+
async purgeOutputs(isRestore) {
|
|
310
|
+
if (isRestore) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
this.diagnose(`purging outputs`);
|
|
314
|
+
const taskNames = [this.taskName];
|
|
315
|
+
const tasks = taskNames.map(tn => this.tracker.getTask(tn));
|
|
316
|
+
await (0, misc_1.promises)(tasks).forEach(20, async (task) => {
|
|
317
|
+
await this.purger.purgeOutputsOfTask(task);
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrLWV4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJEQUFxRDtBQUNyRCw4Q0FBK0I7QUFFL0IsK0JBQTBFO0FBQzFFLDJDQUE0QjtBQUU1Qix5Q0FBb0M7QUFXcEM7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFDdkIsWUFDbUIsS0FBWSxFQUNaLE9BQW9CLEVBQ3BCLE1BQWMsRUFDZCxZQUEwQixFQUMxQixTQUFvQixFQUNwQixhQUFxQixFQUNyQixjQUFpRCxFQUNqRCxpQkFBb0MsRUFDcEMsTUFBYyxFQUNkLFdBQW9CLEVBQ3BCLGVBQXlCO1FBVnpCLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQztRQUNqRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBVTtJQUN6QyxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFrQixFQUFFLGVBQTJCO1FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUksa0JBQWtCLENBQ2hDLFFBQVEsRUFDUixlQUFlLEVBQ2YsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJ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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const core_types_1 = require("core-types");
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const logger_1 = require("logger");
|
|
39
|
+
const misc_1 = require("misc");
|
|
40
|
+
const os = __importStar(require("os"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const task_store_1 = require("./task-store");
|
|
43
|
+
function print(...args) {
|
|
44
|
+
console.log(...args); // eslint-disable-line no-console
|
|
45
|
+
}
|
|
46
|
+
async function main(args) {
|
|
47
|
+
if (args.length !== 3) {
|
|
48
|
+
print(`Usage: ${path.basename(__filename)} <blob-id>`);
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const sc = await misc_1.FilesystemStorageClient.create(path.join(os.homedir(), '.build-raptor/storage'));
|
|
53
|
+
const blobId = (0, task_store_1.BlobId)(args[2].trim());
|
|
54
|
+
const outputDir = path.join(process.cwd(), blobId);
|
|
55
|
+
const taskStore = new task_store_1.TaskStore((0, core_types_1.RepoRoot)(outputDir), sc, (0, logger_1.createNopLogger)());
|
|
56
|
+
fs.mkdirSync(outputDir);
|
|
57
|
+
await taskStore.restoreBlob(blobId);
|
|
58
|
+
print(`Blob restored to ${outputDir}`);
|
|
59
|
+
}
|
|
60
|
+
main(process.argv);
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1zdG9yZS1jbGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFzay1zdG9yZS1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsdUNBQXdCO0FBQ3hCLG1DQUF3QztBQUN4QywrQkFBOEM7QUFDOUMsdUNBQXdCO0FBQ3hCLDJDQUE0QjtBQUU1Qiw2Q0FBZ0Q7QUFFaEQsU0FBUyxLQUFLLENBQUMsR0FBRyxJQUFlO0lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQSxDQUFDLGlDQUFpQztBQUN4RCxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFjO0lBQ2hDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixLQUFLLENBQUMsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN0RCxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQTtRQUNwQixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sOEJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQTtJQUVqRyxNQUFNLE1BQU0sR0FBRyxJQUFBLG1CQUFNLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFFckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLElBQUEscUJBQVEsRUFBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBQSx3QkFBZSxHQUFFLENBQUMsQ0FBQTtJQUMzRSxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZCLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNuQyxLQUFLLENBQUMsb0JBQW9CLFNBQVMsRUFBRSxDQUFDLENBQUE7QUFDeEMsQ0FBQztBQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TaskName } from 'task-name';
|
|
2
|
+
export type TaskStoreEvent = {
|
|
3
|
+
taskStore: {
|
|
4
|
+
opcode: 'RECORDED' | 'RESTORED';
|
|
5
|
+
taskName: TaskName;
|
|
6
|
+
blobId: string;
|
|
7
|
+
fingerprint: string;
|
|
8
|
+
files: string[];
|
|
9
|
+
};
|
|
10
|
+
publicFiles: {
|
|
11
|
+
taskName: TaskName;
|
|
12
|
+
/**
|
|
13
|
+
* Maps path-in-repo to the hash of the contnet of the file
|
|
14
|
+
*/
|
|
15
|
+
publicFiles: Record<string, string>;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1zdG9yZS1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrLXN0b3JlLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Brand } from 'brand';
|
|
2
|
+
import { PathInRepo, RepoRoot } from 'core-types';
|
|
3
|
+
import { Logger } from 'logger';
|
|
4
|
+
import { StorageClient, TypedPublisher } from 'misc';
|
|
5
|
+
import { TaskName } from 'task-name';
|
|
6
|
+
import { Fingerprint } from './fingerprint';
|
|
7
|
+
import { TaskStoreEvent } from './task-store-event';
|
|
8
|
+
type OutputDescriptor = {
|
|
9
|
+
pathInRepo: PathInRepo;
|
|
10
|
+
isPublic: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type BlobId = Brand<string, 'BlobId'>;
|
|
13
|
+
export declare const BlobId: (s: string) => BlobId;
|
|
14
|
+
export declare class TaskStore {
|
|
15
|
+
readonly repoRootDir: RepoRoot;
|
|
16
|
+
private readonly client;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
private readonly publisher?;
|
|
19
|
+
private readonly trace?;
|
|
20
|
+
constructor(repoRootDir: RepoRoot, client: StorageClient, logger: Logger, publisher?: TypedPublisher<TaskStoreEvent> | undefined, trace?: string[] | undefined);
|
|
21
|
+
private putBlob;
|
|
22
|
+
private getBlob;
|
|
23
|
+
private getIfExists;
|
|
24
|
+
private putVerdict;
|
|
25
|
+
private getVerdict;
|
|
26
|
+
private bundle;
|
|
27
|
+
private unbundle;
|
|
28
|
+
/**
|
|
29
|
+
* Use only from tests
|
|
30
|
+
*/
|
|
31
|
+
recordTaskForTesting(taskName: TaskName, fingerprint: Fingerprint, outputs: PathInRepo[], verdict: 'OK' | 'FAIL'): Promise<void>;
|
|
32
|
+
recordTask(taskName: TaskName, fingerprint: Fingerprint, outputs: OutputDescriptor[], verdict: 'OK' | 'FAIL'): Promise<void>;
|
|
33
|
+
private recordBlob;
|
|
34
|
+
restoreTask(taskName: TaskName, fingerprint: Fingerprint): Promise<'FAIL' | 'OK' | 'FLAKY' | 'UNKNOWN'>;
|
|
35
|
+
restoreBlob(blobId: BlobId): Promise<{
|
|
36
|
+
files: PathInRepo[];
|
|
37
|
+
publicFiles: Record<string, string>;
|
|
38
|
+
}>;
|
|
39
|
+
checkVerdict(taskName: TaskName, fingerprint: Fingerprint): Promise<'FAIL' | 'OK' | 'FLAKY' | 'UNKNOWN'>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|