build-raptor 0.129.0 → 0.131.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.
Files changed (216) hide show
  1. package/build-raptor.js +7259 -0
  2. package/index.d.ts +22 -0
  3. package/index.js +7231 -0
  4. package/package.json +13 -17
  5. package/dist/deps/brand/brand.d.ts +0 -5
  6. package/dist/deps/brand/brand.js +0 -3
  7. package/dist/deps/brand/index.d.ts +0 -1
  8. package/dist/deps/brand/index.js +0 -18
  9. package/dist/deps/build-failed-error/build-failed-error.d.ts +0 -14
  10. package/dist/deps/build-failed-error/build-failed-error.js +0 -13
  11. package/dist/deps/build-failed-error/index.d.ts +0 -1
  12. package/dist/deps/build-failed-error/index.js +0 -18
  13. package/dist/deps/build-raptor-api/build-raptor-api.d.ts +0 -351
  14. package/dist/deps/build-raptor-api/build-raptor-api.js +0 -132
  15. package/dist/deps/build-raptor-api/index.d.ts +0 -2
  16. package/dist/deps/build-raptor-api/index.js +0 -19
  17. package/dist/deps/build-raptor-api/step-by-step-processor.d.ts +0 -35
  18. package/dist/deps/build-raptor-api/step-by-step-processor.js +0 -3
  19. package/dist/deps/build-raptor-core/breakdown.d.ts +0 -18
  20. package/dist/deps/build-raptor-core/breakdown.js +0 -99
  21. package/dist/deps/build-raptor-core/build-raptor-config.d.ts +0 -18
  22. package/dist/deps/build-raptor-core/build-raptor-config.js +0 -21
  23. package/dist/deps/build-raptor-core/default-asset-publisher.d.ts +0 -10
  24. package/dist/deps/build-raptor-core/default-asset-publisher.js +0 -16
  25. package/dist/deps/build-raptor-core/engine-bootstrapper.d.ts +0 -50
  26. package/dist/deps/build-raptor-core/engine-bootstrapper.js +0 -200
  27. package/dist/deps/build-raptor-core/engine-event-scheme.d.ts +0 -20
  28. package/dist/deps/build-raptor-core/engine-event-scheme.js +0 -3
  29. package/dist/deps/build-raptor-core/engine.d.ts +0 -66
  30. package/dist/deps/build-raptor-core/engine.js +0 -285
  31. package/dist/deps/build-raptor-core/examplify-zod.d.ts +0 -93
  32. package/dist/deps/build-raptor-core/examplify-zod.js +0 -257
  33. package/dist/deps/build-raptor-core/execution-plan.d.ts +0 -20
  34. package/dist/deps/build-raptor-core/execution-plan.js +0 -66
  35. package/dist/deps/build-raptor-core/execution-record.d.ts +0 -17
  36. package/dist/deps/build-raptor-core/execution-record.js +0 -3
  37. package/dist/deps/build-raptor-core/execution-type.d.ts +0 -2
  38. package/dist/deps/build-raptor-core/execution-type.js +0 -3
  39. package/dist/deps/build-raptor-core/find-repo-dir.d.ts +0 -1
  40. package/dist/deps/build-raptor-core/find-repo-dir.js +0 -27
  41. package/dist/deps/build-raptor-core/fingerprint-ledger.d.ts +0 -33
  42. package/dist/deps/build-raptor-core/fingerprint-ledger.js +0 -164
  43. package/dist/deps/build-raptor-core/fingerprint.d.ts +0 -3
  44. package/dist/deps/build-raptor-core/fingerprint.js +0 -13
  45. package/dist/deps/build-raptor-core/fingerprinter.d.ts +0 -14
  46. package/dist/deps/build-raptor-core/fingerprinter.js +0 -121
  47. package/dist/deps/build-raptor-core/hasher.d.ts +0 -21
  48. package/dist/deps/build-raptor-core/hasher.js +0 -93
  49. package/dist/deps/build-raptor-core/index.d.ts +0 -9
  50. package/dist/deps/build-raptor-core/index.js +0 -26
  51. package/dist/deps/build-raptor-core/model.d.ts +0 -17
  52. package/dist/deps/build-raptor-core/model.js +0 -40
  53. package/dist/deps/build-raptor-core/nop-asset-publisher.d.ts +0 -6
  54. package/dist/deps/build-raptor-core/nop-asset-publisher.js +0 -12
  55. package/dist/deps/build-raptor-core/performance-report.d.ts +0 -5
  56. package/dist/deps/build-raptor-core/performance-report.js +0 -3
  57. package/dist/deps/build-raptor-core/phase.d.ts +0 -1
  58. package/dist/deps/build-raptor-core/phase.js +0 -3
  59. package/dist/deps/build-raptor-core/planner.d.ts +0 -12
  60. package/dist/deps/build-raptor-core/planner.js +0 -43
  61. package/dist/deps/build-raptor-core/purger.d.ts +0 -11
  62. package/dist/deps/build-raptor-core/purger.js +0 -65
  63. package/dist/deps/build-raptor-core/slot-index.d.ts +0 -6
  64. package/dist/deps/build-raptor-core/slot-index.js +0 -17
  65. package/dist/deps/build-raptor-core/step-by-step-transmitter.d.ts +0 -15
  66. package/dist/deps/build-raptor-core/step-by-step-transmitter.js +0 -94
  67. package/dist/deps/build-raptor-core/tar-stream.d.ts +0 -20
  68. package/dist/deps/build-raptor-core/tar-stream.js +0 -194
  69. package/dist/deps/build-raptor-core/task-executor.d.ts +0 -32
  70. package/dist/deps/build-raptor-core/task-executor.js +0 -321
  71. package/dist/deps/build-raptor-core/task-store-cli.d.ts +0 -1
  72. package/dist/deps/build-raptor-core/task-store-cli.js +0 -61
  73. package/dist/deps/build-raptor-core/task-store-event.d.ts +0 -17
  74. package/dist/deps/build-raptor-core/task-store-event.js +0 -3
  75. package/dist/deps/build-raptor-core/task-store.d.ts +0 -41
  76. package/dist/deps/build-raptor-core/task-store.js +0 -302
  77. package/dist/deps/build-raptor-core/task-summary.d.ts +0 -12
  78. package/dist/deps/build-raptor-core/task-summary.js +0 -3
  79. package/dist/deps/build-raptor-core/task-tracker.d.ts +0 -23
  80. package/dist/deps/build-raptor-core/task-tracker.js +0 -97
  81. package/dist/deps/build-raptor-core/task.d.ts +0 -30
  82. package/dist/deps/build-raptor-core/task.js +0 -90
  83. package/dist/deps/build-raptor-core/updatable-task-output-registry.d.ts +0 -13
  84. package/dist/deps/build-raptor-core/updatable-task-output-registry.js +0 -75
  85. package/dist/deps/build-raptor-core/validate-task-infos.d.ts +0 -3
  86. package/dist/deps/build-raptor-core/validate-task-infos.js +0 -53
  87. package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.d.ts +0 -1
  88. package/dist/deps/build-raptor-core-testkit/build-raptor-core-testkit.js +0 -18
  89. package/dist/deps/build-raptor-core-testkit/driver.d.ts +0 -119
  90. package/dist/deps/build-raptor-core-testkit/driver.js +0 -305
  91. package/dist/deps/build-raptor-core-testkit/index.d.ts +0 -3
  92. package/dist/deps/build-raptor-core-testkit/index.js +0 -20
  93. package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.d.ts +0 -35
  94. package/dist/deps/build-raptor-core-testkit/repo-protocol-testkit.js +0 -226
  95. package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.d.ts +0 -27
  96. package/dist/deps/build-raptor-core-testkit/simple-node-repo-protocol.js +0 -140
  97. package/dist/deps/build-raptor-jest-reporter/index.d.ts +0 -0
  98. package/dist/deps/build-raptor-jest-reporter/index.js +0 -33
  99. package/dist/deps/build-run-id/build-run-id.d.ts +0 -3
  100. package/dist/deps/build-run-id/build-run-id.js +0 -13
  101. package/dist/deps/build-run-id/index.d.ts +0 -1
  102. package/dist/deps/build-run-id/index.js +0 -18
  103. package/dist/deps/core-types/core-types.d.ts +0 -29
  104. package/dist/deps/core-types/core-types.js +0 -81
  105. package/dist/deps/core-types/index.d.ts +0 -1
  106. package/dist/deps/core-types/index.js +0 -18
  107. package/dist/deps/logger/index.d.ts +0 -1
  108. package/dist/deps/logger/index.js +0 -18
  109. package/dist/deps/logger/logger.d.ts +0 -26
  110. package/dist/deps/logger/logger.js +0 -152
  111. package/dist/deps/misc/arrays.d.ts +0 -7
  112. package/dist/deps/misc/arrays.js +0 -67
  113. package/dist/deps/misc/camelize-record.d.ts +0 -6
  114. package/dist/deps/misc/camelize-record.js +0 -16
  115. package/dist/deps/misc/clean-directory.d.ts +0 -4
  116. package/dist/deps/misc/clean-directory.js +0 -80
  117. package/dist/deps/misc/constructs.d.ts +0 -106
  118. package/dist/deps/misc/constructs.js +0 -131
  119. package/dist/deps/misc/directory-scanner.d.ts +0 -49
  120. package/dist/deps/misc/directory-scanner.js +0 -165
  121. package/dist/deps/misc/executor.d.ts +0 -39
  122. package/dist/deps/misc/executor.js +0 -59
  123. package/dist/deps/misc/file-system-storage-client.d.ts +0 -23
  124. package/dist/deps/misc/file-system-storage-client.js +0 -93
  125. package/dist/deps/misc/folderify.d.ts +0 -8
  126. package/dist/deps/misc/folderify.js +0 -86
  127. package/dist/deps/misc/graph.d.ts +0 -29
  128. package/dist/deps/misc/graph.js +0 -200
  129. package/dist/deps/misc/in-memory-storage-client.d.ts +0 -21
  130. package/dist/deps/misc/in-memory-storage-client.js +0 -75
  131. package/dist/deps/misc/index.d.ts +0 -20
  132. package/dist/deps/misc/index.js +0 -37
  133. package/dist/deps/misc/int.d.ts +0 -10
  134. package/dist/deps/misc/int.js +0 -29
  135. package/dist/deps/misc/internal/graph-executor.d.ts +0 -15
  136. package/dist/deps/misc/internal/graph-executor.js +0 -93
  137. package/dist/deps/misc/maps.d.ts +0 -29
  138. package/dist/deps/misc/maps.js +0 -47
  139. package/dist/deps/misc/misc.d.ts +0 -23
  140. package/dist/deps/misc/misc.js +0 -94
  141. package/dist/deps/misc/object-map.d.ts +0 -10
  142. package/dist/deps/misc/object-map.js +0 -26
  143. package/dist/deps/misc/promises.d.ts +0 -39
  144. package/dist/deps/misc/promises.js +0 -78
  145. package/dist/deps/misc/records.d.ts +0 -11
  146. package/dist/deps/misc/records.js +0 -40
  147. package/dist/deps/misc/slurp-dir.d.ts +0 -1
  148. package/dist/deps/misc/slurp-dir.js +0 -14
  149. package/dist/deps/misc/storage-client.d.ts +0 -12
  150. package/dist/deps/misc/storage-client.js +0 -3
  151. package/dist/deps/misc/stream-to-buffer.d.ts +0 -2
  152. package/dist/deps/misc/stream-to-buffer.js +0 -26
  153. package/dist/deps/misc/strings.d.ts +0 -12
  154. package/dist/deps/misc/strings.js +0 -68
  155. package/dist/deps/misc/typed-publisher.d.ts +0 -17
  156. package/dist/deps/misc/typed-publisher.js +0 -65
  157. package/dist/deps/repo-protocol/index.d.ts +0 -3
  158. package/dist/deps/repo-protocol/index.js +0 -20
  159. package/dist/deps/repo-protocol/repo-protocol.d.ts +0 -49
  160. package/dist/deps/repo-protocol/repo-protocol.js +0 -3
  161. package/dist/deps/repo-protocol/task-info.d.ts +0 -18
  162. package/dist/deps/repo-protocol/task-info.js +0 -3
  163. package/dist/deps/repo-protocol/test-run-summary.d.ts +0 -54
  164. package/dist/deps/repo-protocol/test-run-summary.js +0 -32
  165. package/dist/deps/repo-protocol-toolbox/generate-task-infos.d.ts +0 -5
  166. package/dist/deps/repo-protocol-toolbox/generate-task-infos.js +0 -26
  167. package/dist/deps/repo-protocol-toolbox/index.d.ts +0 -3
  168. package/dist/deps/repo-protocol-toolbox/index.js +0 -20
  169. package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.d.ts +0 -10
  170. package/dist/deps/repo-protocol-toolbox/repo-protocol-toolbox.js +0 -90
  171. package/dist/deps/repo-protocol-toolbox/task-definition.d.ts +0 -14
  172. package/dist/deps/repo-protocol-toolbox/task-definition.js +0 -3
  173. package/dist/deps/reporter-output/index.d.ts +0 -1
  174. package/dist/deps/reporter-output/index.js +0 -18
  175. package/dist/deps/reporter-output/reporter-output.d.ts +0 -49
  176. package/dist/deps/reporter-output/reporter-output.js +0 -25
  177. package/dist/deps/s3-storage-client/creds.d.ts +0 -4
  178. package/dist/deps/s3-storage-client/creds.js +0 -3
  179. package/dist/deps/s3-storage-client/get-s3-storage-client-factory.d.ts +0 -3
  180. package/dist/deps/s3-storage-client/get-s3-storage-client-factory.js +0 -45
  181. package/dist/deps/s3-storage-client/index.d.ts +0 -2
  182. package/dist/deps/s3-storage-client/index.js +0 -19
  183. package/dist/deps/s3-storage-client/main.d.ts +0 -1
  184. package/dist/deps/s3-storage-client/main.js +0 -20
  185. package/dist/deps/s3-storage-client/s3-storage-client.d.ts +0 -25
  186. package/dist/deps/s3-storage-client/s3-storage-client.js +0 -134
  187. package/dist/deps/task-name/index.d.ts +0 -1
  188. package/dist/deps/task-name/index.js +0 -18
  189. package/dist/deps/task-name/task-name.d.ts +0 -17
  190. package/dist/deps/task-name/task-name.js +0 -44
  191. package/dist/deps/unit-metadata/index.d.ts +0 -1
  192. package/dist/deps/unit-metadata/index.js +0 -18
  193. package/dist/deps/unit-metadata/unit-metadata.d.ts +0 -14
  194. package/dist/deps/unit-metadata/unit-metadata.js +0 -32
  195. package/dist/deps/yarn-repo-protocol/build-task-record.d.ts +0 -61
  196. package/dist/deps/yarn-repo-protocol/build-task-record.js +0 -29
  197. package/dist/deps/yarn-repo-protocol/generate-test-run-summary.d.ts +0 -4
  198. package/dist/deps/yarn-repo-protocol/generate-test-run-summary.js +0 -26
  199. package/dist/deps/yarn-repo-protocol/index.d.ts +0 -2
  200. package/dist/deps/yarn-repo-protocol/index.js +0 -19
  201. package/dist/deps/yarn-repo-protocol/rerun-list.d.ts +0 -12
  202. package/dist/deps/yarn-repo-protocol/rerun-list.js +0 -6
  203. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.d.ts +0 -24
  204. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol-config.js +0 -33
  205. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.d.ts +0 -82
  206. package/dist/deps/yarn-repo-protocol/yarn-repo-protocol.js +0 -1036
  207. package/dist/src/build-raptor-cli.d.ts +0 -60
  208. package/dist/src/build-raptor-cli.js +0 -514
  209. package/dist/src/index.d.ts +0 -1
  210. package/dist/src/index.js +0 -20
  211. package/dist/src/main.d.ts +0 -2
  212. package/dist/src/main.js +0 -23
  213. package/dist/src/register-asset-request.d.ts +0 -18
  214. package/dist/src/register-asset-request.js +0 -11
  215. package/dist/src/task-execution-visualizer.d.ts +0 -17
  216. package/dist/src/task-execution-visualizer.js +0 -116
@@ -1,302 +0,0 @@
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.TaskStore = exports.BlobId = void 0;
37
- const build_failed_error_1 = require("build-failed-error");
38
- const core_types_1 = require("core-types");
39
- const fs = __importStar(require("fs"));
40
- const fs_1 = require("fs");
41
- const fse = __importStar(require("fs-extra"));
42
- const misc_1 = require("misc");
43
- const path = __importStar(require("path"));
44
- const stream = __importStar(require("stream"));
45
- const Tmp = __importStar(require("tmp-promise"));
46
- const util = __importStar(require("util"));
47
- const zlib = __importStar(require("zlib"));
48
- const zod_1 = require("zod");
49
- const tar_stream_1 = require("./tar-stream");
50
- const pipeline = util.promisify(stream.pipeline);
51
- const unzip = util.promisify(zlib.unzip);
52
- const Metadata = zod_1.z.object({
53
- /**
54
- * An array of output locations (paths in repo)
55
- */
56
- outputs: zod_1.z.string().array(),
57
- /**
58
- * A record that maps output locations (path in repo) to content hashes. Include output location that were defined in
59
- * the TaskInfo with isPublic: true. This allows downloading the content from a content-addressable storage.
60
- */
61
- publicFiles: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).default({}),
62
- });
63
- function validate(input) {
64
- if (input.length === 0) {
65
- throw new Error(`Bad BlobId: <${input}>`);
66
- }
67
- }
68
- const BlobId = (s) => {
69
- validate(s);
70
- return s;
71
- };
72
- exports.BlobId = BlobId;
73
- class TaskStore {
74
- constructor(repoRootDir, client, logger, publisher, trace) {
75
- this.repoRootDir = repoRootDir;
76
- this.client = client;
77
- this.logger = logger;
78
- this.publisher = publisher;
79
- this.trace = trace;
80
- this.logger.info(`TaskStore created`);
81
- }
82
- async putBlob(content, hint) {
83
- const ret = blobIdOf(content);
84
- if (content.length === 0) {
85
- return ret;
86
- }
87
- const key = { type: 'blob', blobId: ret };
88
- if (await this.client.objectExists(key)) {
89
- return ret;
90
- }
91
- this.trace?.push(`putting object: ${JSON.stringify(ret)} (hint: ${hint})=> ${content.length}`);
92
- await this.client.putObject(key, content);
93
- this.logger.info(`>>> uploaded ${hint}`);
94
- return ret;
95
- }
96
- async getBlob(blobId) {
97
- const nothing = emptyBuffer();
98
- if (blobId === blobIdOf(nothing)) {
99
- return nothing;
100
- }
101
- return await this.client.getObject({ type: 'blob', blobId }, 'buffer');
102
- }
103
- async getIfExists(k) {
104
- const exists = await this.client.objectExists(k);
105
- if (!exists) {
106
- return undefined;
107
- }
108
- return await this.client.getObject(k, 'string');
109
- }
110
- async putVerdict(taskName, fingerprint, verdict, blobId) {
111
- const key = { type: 'verdict', taskName, fingerprint, verdict, version: 2 };
112
- // we put the key in the content for debugging purposes: it allows humans to understand what this object is
113
- // about when inspecting underlying storage (the key underwhich the object is stored key is likely to be hashed so
114
- // it is totally unreadable).
115
- await this.client.putObject(key, JSON.stringify({ key, blobId }));
116
- }
117
- async getVerdict(taskName, fingerprint) {
118
- const baseKey = { type: 'verdict', taskName, fingerprint, version: 2 };
119
- const [ok, fail] = await Promise.all([
120
- this.getIfExists({ ...baseKey, verdict: 'OK' }),
121
- this.getIfExists({ ...baseKey, verdict: 'FAIL' }),
122
- ]);
123
- const getBlobId = (content) => {
124
- const parsed = JSON.parse(content);
125
- // TODO(imaman): use zod to validate parsed
126
- return (0, exports.BlobId)(parsed.blobId);
127
- };
128
- if (ok && fail) {
129
- return ['FLAKY', getBlobId(ok)];
130
- }
131
- if (ok) {
132
- return ['OK', getBlobId(ok)];
133
- }
134
- if (fail) {
135
- return ['FAIL', getBlobId(fail)];
136
- }
137
- return ['UNKNOWN', blobIdOf(emptyBuffer())];
138
- }
139
- async bundle(outputs) {
140
- if (!outputs.length) {
141
- return { buffer: emptyBuffer(), publicFiles: {} };
142
- }
143
- this.trace?.push(`bundling ${JSON.stringify(outputs)}`);
144
- const pairs = await (0, misc_1.promises)(outputs.filter(o => o.isPublic))
145
- .map(async (o) => {
146
- const resolved = this.repoRootDir.resolve(o.pathInRepo);
147
- const stat = fs.statSync(resolved);
148
- if (!stat.isFile()) {
149
- throw new build_failed_error_1.BuildFailedError(`cannot publish an output location that is not a file: "${o.pathInRepo.val}"`);
150
- }
151
- const content = fs.readFileSync(resolved);
152
- const h = await this.client.putContentAddressable(content);
153
- return [o.pathInRepo.val, h];
154
- })
155
- .reify(STORAGE_CONCURRENCY);
156
- const m = { outputs: outputs.map(o => o.pathInRepo.val), publicFiles: Object.fromEntries(pairs) };
157
- const metadataBuf = Buffer.from(JSON.stringify(Metadata.parse(m)), 'utf-8');
158
- if (metadataBuf.length > 100000) {
159
- // Just for sanity.
160
- throw new Error('metadata is too big');
161
- }
162
- const lenBuf = Buffer.alloc(LEN_BUF_SIZE);
163
- lenBuf.writeInt32BE(metadataBuf.length);
164
- const tempFile = await Tmp.file();
165
- const pack = tar_stream_1.TarStream.pack();
166
- const scanner = new misc_1.DirectoryScanner(this.repoRootDir.resolve());
167
- for (const curr of outputs.filter(o => !o.isPublic)) {
168
- const o = curr.pathInRepo;
169
- const exists = await fse.pathExists(this.repoRootDir.resolve(o));
170
- if (!exists) {
171
- // TODO(imaman): turn this into a user-build-error? move it out of this file?
172
- throw new Error(`Output location <${o}> does not exist (under <${this.repoRootDir}>)`);
173
- }
174
- await scanner.scanTree(o.val, (p, content, stat) => {
175
- if (stat.isDirectory()) {
176
- return;
177
- }
178
- if (!stat.isSymbolicLink() && !stat.isFile()) {
179
- throw new Error(`Cannot handle non-files in output: ${p} (under ${this.repoRootDir})`);
180
- }
181
- const resolved = this.repoRootDir.resolve((0, core_types_1.PathInRepo)(p));
182
- // the return value of fs.stat() and friends has counterintuitive behavior: .mtimeMs will undeterministically
183
- // include fractions of ms (e.g., 1690808418692.3323). Thus we're sticking with .mtime.getTime(). Similarly for
184
- // atime, ctime.
185
- const { mtime, atime, ctime } = fs.statSync(resolved);
186
- this.trace?.push(`adding an entry: ${stat.mode.toString(8)} ${p} ${mtime.toISOString()}`);
187
- if (stat.isSymbolicLink()) {
188
- const linkTarget = content.toString('utf-8');
189
- const resolved = path.isAbsolute(linkTarget) ? linkTarget : path.join(path.dirname(p), linkTarget);
190
- const normalized = path.normalize(resolved);
191
- pack.symlink({ from: p, mtime, to: normalized });
192
- }
193
- else {
194
- pack.entry({ path: p, mode: stat.mode, mtime, ctime, atime }, content);
195
- }
196
- });
197
- }
198
- const b = pack.toBuffer();
199
- this.trace?.push(`digest of b is ${(0, misc_1.computeObjectHash)({ data: b.toString('hex') })}`);
200
- const source = stream.Readable.from(b);
201
- const gzip = zlib.createGzip();
202
- const destination = (0, fs_1.createWriteStream)(tempFile.path);
203
- await pipeline(source, gzip, destination);
204
- const gzipped = await fse.readFile(tempFile.path);
205
- this.trace?.push(`gzipped is ${gzipped.length} long`);
206
- const ret = Buffer.concat([lenBuf, metadataBuf, gzipped]);
207
- this.trace?.push(`bundling digest of ret is ${(0, misc_1.computeObjectHash)({ data: ret.toString('hex') })}`);
208
- return { buffer: ret, publicFiles: m.publicFiles };
209
- }
210
- async unbundle(buf) {
211
- if (buf.length === 0) {
212
- return { files: [], publicFiles: {} };
213
- }
214
- const metadataLen = buf.slice(0, LEN_BUF_SIZE).readInt32BE();
215
- const unparsed = JSON.parse(buf.slice(LEN_BUF_SIZE, LEN_BUF_SIZE + metadataLen).toString('utf-8'));
216
- const metadata = Metadata.parse(unparsed);
217
- const outputs = metadata.outputs.map(at => (0, core_types_1.PathInRepo)(at));
218
- const removeOutputDir = async (o) => await fse.rm(this.repoRootDir.resolve(o), { recursive: true, force: true });
219
- await (0, misc_1.promises)(outputs)
220
- .map(async (o) => await removeOutputDir(o))
221
- .reify(20);
222
- const source = buf.slice(LEN_BUF_SIZE + metadataLen);
223
- const unzipped = await unzip(source);
224
- try {
225
- await tar_stream_1.TarStream.extract(unzipped, this.repoRootDir.resolve(), this.logger);
226
- }
227
- catch (e) {
228
- throw new Error(`unbundling a buffer (${buf.length} bytes) has failed: ${e}`);
229
- }
230
- await (0, misc_1.promises)(Object.keys(metadata.publicFiles)).forEach(STORAGE_CONCURRENCY, async (pir) => {
231
- const pathInRepo = (0, core_types_1.PathInRepo)(pir);
232
- const resolved = this.repoRootDir.resolve(pathInRepo);
233
- const hash = metadata.publicFiles[pathInRepo.val];
234
- if (!hash) {
235
- throw new Error(`hash not found for "${pathInRepo}"`);
236
- }
237
- const buf = await this.client.getContentAddressable(hash);
238
- fs.writeFileSync(resolved, buf);
239
- });
240
- return { files: outputs, publicFiles: metadata.publicFiles };
241
- }
242
- /**
243
- * Use only from tests
244
- */
245
- async recordTaskForTesting(taskName, fingerprint, outputs, verdict) {
246
- await this.recordTask(taskName, fingerprint, outputs.map(o => ({ pathInRepo: o, isPublic: false })), verdict);
247
- }
248
- async recordTask(taskName, fingerprint, outputs, verdict) {
249
- const { blobId, publicFiles } = await this.recordBlob(taskName, outputs);
250
- this.logger.info(`task=${taskName}, outputs=${JSON.stringify(outputs)}, publicFiles=${JSON.stringify(publicFiles)}`);
251
- this.putVerdict(taskName, fingerprint, verdict, blobId);
252
- await Promise.all([
253
- this.publisher?.publish('taskStore', {
254
- opcode: 'RECORDED',
255
- taskName,
256
- blobId,
257
- fingerprint,
258
- files: [...outputs.map(o => o.pathInRepo.val)],
259
- }),
260
- this.publisher?.publish('publicFiles', { taskName, publicFiles }),
261
- ]);
262
- }
263
- async recordBlob(taskName, outputs) {
264
- const { buffer, publicFiles } = await this.bundle(outputs);
265
- const blobId = await this.putBlob(buffer, taskName);
266
- return { blobId, publicFiles };
267
- }
268
- async restoreTask(taskName, fingerprint) {
269
- const [verdict, blobId] = await this.getVerdict(taskName, fingerprint);
270
- const { files, publicFiles } = await this.restoreBlob(blobId);
271
- await Promise.all([
272
- this.publisher?.publish('taskStore', {
273
- opcode: 'RESTORED',
274
- taskName,
275
- blobId,
276
- fingerprint,
277
- files: files.map(o => o.val),
278
- }),
279
- this.publisher?.publish('publicFiles', { taskName, publicFiles }),
280
- ]);
281
- return verdict;
282
- }
283
- async restoreBlob(blobId) {
284
- const buf = await this.getBlob(blobId);
285
- const ret = await this.unbundle(buf);
286
- return ret;
287
- }
288
- async checkVerdict(taskName, fingerprint) {
289
- const [verdict] = await this.getVerdict(taskName, fingerprint);
290
- return verdict;
291
- }
292
- }
293
- exports.TaskStore = TaskStore;
294
- function emptyBuffer() {
295
- return Buffer.from('');
296
- }
297
- function blobIdOf(buf) {
298
- return (0, exports.BlobId)((0, misc_1.computeHash)(buf));
299
- }
300
- const LEN_BUF_SIZE = 8;
301
- const STORAGE_CONCURRENCY = 100;
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDJEQUFxRDtBQUNyRCwyQ0FBaUQ7QUFDakQsdUNBQXdCO0FBQ3hCLDJCQUFzQztBQUN0Qyw4Q0FBK0I7QUFFL0IsK0JBQXFIO0FBQ3JILDJDQUE0QjtBQUM1QiwrQ0FBZ0M7QUFFaEMsaURBQWtDO0FBQ2xDLDJDQUE0QjtBQUM1QiwyQ0FBNEI7QUFDNUIsNkJBQXVCO0FBR3ZCLDZDQUF3QztBQUt4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUV4QyxNQUFNLFFBQVEsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hCOztPQUVHO0lBQ0gsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUU7SUFDM0I7OztPQUdHO0lBQ0gsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Q0FDMUQsQ0FBQyxDQUFBO0FBS0YsU0FBUyxRQUFRLENBQUMsS0FBYTtJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0FBQ0gsQ0FBQztBQUVNLE1BQU0sTUFBTSxHQUEwQixDQUFDLENBQVMsRUFBRSxFQUFFO0lBQ3pELFFBQVEsQ0FBQyxDQUFDLENB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
@@ -1,12 +0,0 @@
1
- import { TaskName } from 'task-name';
2
- import { ExecutionType } from './execution-type';
3
- import { SlotIndex } from './slot-index';
4
- export interface TaskSummary {
5
- taskName: TaskName;
6
- outputFile?: string;
7
- verdict: 'OK' | 'FAIL' | 'CRASH' | 'UNKNOWN';
8
- execution: ExecutionType;
9
- startedAt: SlotIndex;
10
- endedAt: SlotIndex;
11
- rootCause?: TaskName;
12
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1zdW1tYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rhc2stc3VtbWFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -1,23 +0,0 @@
1
- import { ExitStatus } from 'repo-protocol';
2
- import { TaskName } from 'task-name';
3
- import { ExecutionPlan } from './execution-plan';
4
- import { PerformanceReport } from './performance-report';
5
- import { Task } from './task';
6
- export declare class TaskTracker {
7
- private readonly plan;
8
- private numRunning;
9
- private readonly usedConcurrencyLevles;
10
- private numExecuted;
11
- private counter;
12
- constructor(plan: ExecutionPlan);
13
- tasks(): Task[];
14
- getDependencyTasks(tn: TaskName): Task[];
15
- hasVerdict(taskName: TaskName): boolean;
16
- getPerformanceReport(): PerformanceReport;
17
- changeStatus(taskName: TaskName, status: 'RUNNING' | 'DONE'): void;
18
- registerCachedVerdict(taskName: TaskName, cachedVerdict: 'OK' | 'FLAKY' | 'FAIL'): void;
19
- registerVerdict(taskName: TaskName, status: ExitStatus, outputFile: string): void;
20
- getTask(tn: TaskName): Task;
21
- get successful(): boolean;
22
- private propagateFailure;
23
- }
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TaskTracker = void 0;
4
- const misc_1 = require("misc");
5
- const slot_index_1 = require("./slot-index");
6
- class TaskTracker {
7
- constructor(plan) {
8
- this.plan = plan;
9
- this.numRunning = 0;
10
- this.usedConcurrencyLevles = [];
11
- this.numExecuted = 0;
12
- this.counter = (0, slot_index_1.SlotIndex)(0);
13
- }
14
- tasks() {
15
- return this.plan.tasks();
16
- }
17
- getDependencyTasks(tn) {
18
- return this.plan.taskGraph.neighborsOf(tn).map(tn => this.getTask(tn));
19
- }
20
- hasVerdict(taskName) {
21
- return (0, misc_1.switchOn)(this.getTask(taskName).record.verdict, {
22
- UNKNOWN: () => false,
23
- OK: () => true,
24
- FAIL: () => true,
25
- CRASH: () => true,
26
- });
27
- }
28
- getPerformanceReport() {
29
- return {
30
- maxUsedConcurrency: Math.max(...this.usedConcurrencyLevles),
31
- numExecuted: this.numExecuted,
32
- usedConcurrencyLevles: this.usedConcurrencyLevles,
33
- };
34
- }
35
- changeStatus(taskName, status) {
36
- const t = this.getTask(taskName);
37
- this.counter = (0, slot_index_1.SlotIndex)(this.counter, (0, misc_1.switchOn)(status, { RUNNING: () => (0, misc_1.Int)(0), DONE: () => (0, misc_1.Int)(1) }));
38
- t.changeStatus(status, this.counter);
39
- if (status === 'RUNNING') {
40
- this.numRunning += 1;
41
- this.numExecuted += 1;
42
- this.usedConcurrencyLevles.push(this.numRunning);
43
- return;
44
- }
45
- if (status === 'DONE') {
46
- this.numRunning -= 1;
47
- return;
48
- }
49
- (0, misc_1.shouldNeverHappen)(status);
50
- }
51
- registerCachedVerdict(taskName, cachedVerdict) {
52
- const task = this.getTask(taskName);
53
- if (cachedVerdict === 'OK' || cachedVerdict === 'FLAKY') {
54
- task.assignVerdict('OK', 'CACHED');
55
- return;
56
- }
57
- if (cachedVerdict == 'FAIL') {
58
- task.assignVerdict('FAIL', 'CACHED');
59
- this.propagateFailure(taskName);
60
- return;
61
- }
62
- (0, misc_1.shouldNeverHappen)(cachedVerdict);
63
- }
64
- registerVerdict(taskName, status, outputFile) {
65
- const task = this.getTask(taskName);
66
- task.assignVerdict(status, 'EXECUTED');
67
- (0, misc_1.switchOn)(status, {
68
- CRASH: () => { },
69
- FAIL: () => task.setOutputFile(outputFile),
70
- OK: () => task.setOutputFile(outputFile),
71
- });
72
- (0, misc_1.switchOn)(status, {
73
- CRASH: () => { },
74
- FAIL: () => this.propagateFailure(taskName),
75
- OK: () => { },
76
- });
77
- }
78
- getTask(tn) {
79
- return this.plan.getTask(tn);
80
- }
81
- get successful() {
82
- return this.tasks().every(t => t.record.verdict === 'OK');
83
- }
84
- propagateFailure(taskName) {
85
- const toFail = this.plan.errorPropagationGraph.traverseFrom(taskName, { direction: 'backwards' });
86
- for (const t of toFail) {
87
- if (t === taskName) {
88
- // TODO(imaman): not tested
89
- continue;
90
- }
91
- const r = this.getTask(t);
92
- r.assignVerdict('FAIL', 'CANNOT_START', taskName);
93
- }
94
- }
95
- }
96
- exports.TaskTracker = TaskTracker;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay10cmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rhc2stdHJhY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBdUQ7QUFNdkQsNkNBQXdDO0FBR3hDLE1BQWEsV0FBVztJQU10QixZQUE2QixJQUFtQjtRQUFuQixTQUFJLEdBQUosSUFBSSxDQUFlO1FBTHhDLGVBQVUsR0FBRyxDQUFDLENBQUE7UUFDTCwwQkFBcUIsR0FBYSxFQUFFLENBQUE7UUFDN0MsZ0JBQVcsR0FBRyxDQUFDLENBQUE7UUFDZixZQUFPLEdBQWMsSUFBQSxzQkFBUyxFQUFDLENBQUMsQ0FBQyxDQUFBO0lBRVUsQ0FBQztJQUVwRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFZO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN4RSxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWtCO1FBQzNCLE9BQU8sSUFBQSxlQUFRLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3JELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO1lBQ3BCLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO1lBQ2QsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDaEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7U0FDbEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPO1lBQ0wsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUMzRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtTQUNsRCxDQUFBO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFrQixFQUFFLE1BQTBCO1FBQ3pELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLHNCQUFTLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFBLGVBQVEsRUFBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBQSxVQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUEsVUFBRyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3ZHLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVwQyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQTtZQUNwQixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQTtZQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUNoRCxPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFBO1lBQ3BCLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBQSx3QkFBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQscUJBQXFCLENBQUMsUUFBa0IsRUFBRSxhQUFzQztRQUM5RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRW5DLElBQUksYUFBYSxLQUFLLElBQUksSUFBSSxhQUFhLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDbEMsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDL0IsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFBLHdCQUFpQixFQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBa0IsRUFBRSxNQUFrQixFQUFFLFVBQWtCO1FBQ3hFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFdEMsSUFBQSxlQUFRLEVBQUMsTUFBTSxFQUFFO1lBQ2YsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7WUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDMUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1NBQ3pDLENBQUMsQ0FBQTtRQUVGLElBQUEsZUFBUSxFQUFDLE1BQU0sRUFBRTtZQUNmLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDM0MsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDYixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQWtCO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ2pHLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ25CLDJCQUEyQjtnQkFDM0IsU0FBUTtZQUNWLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3pCLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNuRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUdELGtDQTBHQyJ9
@@ -1,30 +0,0 @@
1
- import { PathInRepo } from 'core-types';
2
- import { OutputLocation, TaskInfo } from 'repo-protocol';
3
- import { TaskName } from 'task-name';
4
- import { ExecutionRecord } from './execution-record';
5
- import { Fingerprint } from './fingerprint';
6
- import { Phase } from './phase';
7
- import { SlotIndex } from './slot-index';
8
- export declare class Task {
9
- private readonly buildRunId;
10
- readonly taskInfo: TaskInfo;
11
- readonly labels: readonly string[];
12
- readonly name: TaskName;
13
- readonly id: string;
14
- private fingerprint;
15
- private readonly executionRecord;
16
- readonly inputs: readonly PathInRepo[];
17
- constructor(buildRunId: string, taskInfo: TaskInfo, inputs: PathInRepo[], labels: readonly string[]);
18
- get unitId(): import("unit-metadata").UnitId;
19
- changeStatus(status: 'RUNNING' | 'DONE', counter: SlotIndex): void;
20
- getFingerprint(): Fingerprint;
21
- computeFingerprint(fingerprintsOfInputs: Fingerprint[]): void;
22
- setPhase(phase: Phase): void;
23
- getPhase(): Phase;
24
- hasPhase(): boolean;
25
- get record(): ExecutionRecord;
26
- get outputLocations(): OutputLocation[];
27
- assignVerdict(verdict: 'OK' | 'FAIL' | 'CRASH', executionType: 'EXECUTED' | 'CACHED' | 'CANNOT_START', rootCause?: TaskName): void;
28
- setOutputFile(outputFile: string): void;
29
- getDurationMillis(): number | undefined;
30
- }
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Task = void 0;
4
- const misc_1 = require("misc");
5
- const task_name_1 = require("task-name");
6
- const fingerprint_1 = require("./fingerprint");
7
- const slot_index_1 = require("./slot-index");
8
- class Task {
9
- constructor(buildRunId, taskInfo, inputs, labels) {
10
- this.buildRunId = buildRunId;
11
- this.taskInfo = taskInfo;
12
- this.labels = labels;
13
- this.inputs = (0, misc_1.uniqueBy)((0, misc_1.sortBy)(inputs, t => t.val), t => t.val);
14
- this.name = taskInfo.taskName;
15
- this.id = (0, misc_1.computeObjectHash)({ buildRunId: this.buildRunId, name: this.name });
16
- this.executionRecord = {
17
- verdict: 'UNKNOWN',
18
- executionType: 'UNKNOWN',
19
- startedAt: (0, slot_index_1.SlotIndex)(-1),
20
- endedAt: (0, slot_index_1.SlotIndex)(-1),
21
- phases: [],
22
- };
23
- }
24
- get unitId() {
25
- return (0, task_name_1.TaskName)().undo(this.name).unitId;
26
- }
27
- changeStatus(status, counter) {
28
- if (status === 'RUNNING') {
29
- this.executionRecord.startedAt = counter;
30
- }
31
- else if (status === 'DONE') {
32
- this.executionRecord.endedAt = counter;
33
- }
34
- else {
35
- (0, misc_1.shouldNeverHappen)(status);
36
- }
37
- }
38
- getFingerprint() {
39
- return this.fingerprint ?? (0, misc_1.failMe)(`fingerprint not set in ${this.name}`);
40
- }
41
- computeFingerprint(fingerprintsOfInputs) {
42
- if (this.fingerprint !== undefined) {
43
- throw new Error(`Fingerprint was already set in ${this.name}`);
44
- }
45
- const fp = (0, misc_1.computeObjectHash)({
46
- fingerprintsOfInputs,
47
- info: this.taskInfo, // eslint-disable-line @typescript-eslint/consistent-type-assertions
48
- });
49
- this.fingerprint = (0, fingerprint_1.Fingerprint)(fp);
50
- }
51
- setPhase(phase) {
52
- this.executionRecord.phases.push({ phase, timestampMillis: Date.now() });
53
- }
54
- getPhase() {
55
- const pos = this.executionRecord.phases.length - 1;
56
- return pos >= 0 ? this.executionRecord.phases[pos].phase : 'UNSTARTED';
57
- }
58
- hasPhase() {
59
- return this.executionRecord.phases.length > 0;
60
- }
61
- get record() {
62
- return this.executionRecord;
63
- }
64
- get outputLocations() {
65
- return this.taskInfo.outputLocations ?? [];
66
- }
67
- assignVerdict(verdict, executionType, rootCause) {
68
- this.executionRecord.verdict = verdict;
69
- this.executionRecord.executionType = executionType;
70
- this.executionRecord.rootCause = rootCause;
71
- }
72
- setOutputFile(outputFile) {
73
- this.executionRecord.outputFile = outputFile;
74
- }
75
- getDurationMillis() {
76
- const phases = this.executionRecord.phases;
77
- if (phases.length < 2) {
78
- return undefined;
79
- }
80
- // Find the first RUNNING phase and the last phase
81
- const runningPhase = phases.find(p => p.phase === 'RUNNING');
82
- const lastPhase = phases[phases.length - 1];
83
- if (!runningPhase) {
84
- return undefined;
85
- }
86
- return lastPhase.timestampMillis - runningPhase.timestampMillis;
87
- }
88
- }
89
- exports.Task = Task;
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtCQUErRjtBQUUvRix5Q0FBb0M7QUFJcEMsK0NBQTJDO0FBRTNDLDZDQUF3QztBQUV4QyxNQUFhLElBQUk7SUFPZixZQUNtQixVQUFrQixFQUMxQixRQUFrQixFQUMzQixNQUFvQixFQUNYLE1BQXlCO1FBSGpCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUVsQixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUVsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUEsZUFBUSxFQUNwQixJQUFBLGFBQU0sRUFBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQzFCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDWCxDQUFBO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFBO1FBQzdCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM3RSxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ3JCLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFNBQVMsRUFBRSxJQUFBLHNCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsT0FBTyxFQUFFLElBQUEsc0JBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFBLG9CQUFRLEdBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FB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
@@ -1,13 +0,0 @@
1
- import { PathInRepo } from 'core-types';
2
- import { TaskName } from 'task-name';
3
- export interface TaskOutputRegistry {
4
- lookup(outputLoc: PathInRepo): TaskName | undefined;
5
- wideLookup(outputLoc: PathInRepo): TaskName[];
6
- }
7
- export declare class UpdateableTaskOutputRegistry implements TaskOutputRegistry {
8
- private readonly map;
9
- constructor();
10
- add(taskName: TaskName, outputLoc: PathInRepo): void;
11
- lookup(outputLoc: PathInRepo): TaskName | undefined;
12
- wideLookup(outputLoc: PathInRepo): TaskName[];
13
- }