@git.zone/cli 6.0.1 → 6.1.1
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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/helpers.workflow.d.ts +2 -0
- package/dist_ts/helpers.workflow.js +96 -25
- package/dist_ts/mod_config/index.js +176 -88
- package/dist_ts/mod_release/classes.releasejournal.d.ts +60 -10
- package/dist_ts/mod_release/classes.releasejournal.js +513 -21
- package/dist_ts/mod_release/helpers.releasepublication.d.ts +5 -3
- package/dist_ts/mod_release/helpers.releasepublication.js +390 -13
- package/dist_ts/mod_release/helpers.tsdockerprotocol.d.ts +60 -0
- package/dist_ts/mod_release/helpers.tsdockerprotocol.js +442 -0
- package/dist_ts/mod_release/index.d.ts +1 -1
- package/dist_ts/mod_release/index.js +101 -19
- package/dist_ts/plugins.d.ts +5 -1
- package/dist_ts/plugins.js +5 -2
- package/package.json +2 -1
- package/readme.hints.md +43 -17
- package/readme.md +83 -75
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/helpers.workflow.ts +191 -49
- package/ts/mod_config/index.ts +320 -146
- package/ts/mod_release/classes.releasejournal.ts +939 -70
- package/ts/mod_release/helpers.releasepublication.ts +786 -49
- package/ts/mod_release/helpers.tsdockerprotocol.ts +806 -0
- package/ts/mod_release/index.ts +231 -74
- package/ts/plugins.ts +20 -0
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as plugins from "./mod.plugins.js";
|
|
2
2
|
import { InterProcessLock } from "../mod_services/classes.interprocesslock.js";
|
|
3
|
-
|
|
3
|
+
import { assertReleaseCleanupResult, assertReleasePromotionEvidence, assertReleaseQualificationRequest, assertReleaseQualificationResult, canonicalReleaseJson, classifyReleasePromotionEvidence, getReleasePromotionContexts, } from "./helpers.tsdockerprotocol.js";
|
|
4
|
+
export const releaseJournalStorageVersion = 1;
|
|
5
|
+
export const legacyReleaseJournalSchemaVersion = 1;
|
|
6
|
+
export const releaseJournalSchemaVersion = 2;
|
|
4
7
|
export const releaseArtifactFileName = "package.tgz";
|
|
5
8
|
export const releaseJournalFileName = "journal.json";
|
|
6
9
|
const releaseVersionRegex = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/;
|
|
@@ -126,7 +129,16 @@ const assertArtifact = (valueArg) => {
|
|
|
126
129
|
if (!isPlainObject(valueArg)) {
|
|
127
130
|
throw new Error("Release journal artifact must be an object or null.");
|
|
128
131
|
}
|
|
129
|
-
assertExactKeys(valueArg, [
|
|
132
|
+
assertExactKeys(valueArg, [
|
|
133
|
+
"kind",
|
|
134
|
+
"file",
|
|
135
|
+
"packageName",
|
|
136
|
+
"version",
|
|
137
|
+
"size",
|
|
138
|
+
"sha1",
|
|
139
|
+
"sha256",
|
|
140
|
+
"integrity",
|
|
141
|
+
], "Release journal artifact");
|
|
130
142
|
if (valueArg.kind !== "npm-tarball" ||
|
|
131
143
|
valueArg.file !== releaseArtifactFileName ||
|
|
132
144
|
typeof valueArg.packageName !== "string" ||
|
|
@@ -145,11 +157,22 @@ const assertArtifact = (valueArg) => {
|
|
|
145
157
|
}
|
|
146
158
|
return valueArg;
|
|
147
159
|
};
|
|
148
|
-
const isComplete = (journalArg) =>
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
160
|
+
const isComplete = (journalArg) => {
|
|
161
|
+
const commonComplete = [
|
|
162
|
+
journalArg.git.state,
|
|
163
|
+
...journalArg.npm.registries.map((registryArg) => registryArg.state),
|
|
164
|
+
].every((stateArg) => stateArg === "verified" || stateArg === "skipped");
|
|
165
|
+
if (!commonComplete ||
|
|
166
|
+
journalArg.schemaVersion === legacyReleaseJournalSchemaVersion) {
|
|
167
|
+
return commonComplete;
|
|
168
|
+
}
|
|
169
|
+
return (journalArg.docker.qualification.state === "verified" &&
|
|
170
|
+
journalArg.docker.promotions.length > 0 &&
|
|
171
|
+
journalArg.docker.promotions.every((promotionArg) => promotionArg.state === "verified") &&
|
|
172
|
+
journalArg.docker.cleanup.state === "verified");
|
|
173
|
+
};
|
|
152
174
|
const immutableJournalIdentity = (journalArg) => JSON.stringify({
|
|
175
|
+
schemaVersion: journalArg.schemaVersion,
|
|
153
176
|
release: journalArg.release,
|
|
154
177
|
artifact: journalArg.artifact,
|
|
155
178
|
git: {
|
|
@@ -163,8 +186,265 @@ const immutableJournalIdentity = (journalArg) => JSON.stringify({
|
|
|
163
186
|
alreadyPublished: journalArg.npm.alreadyPublished,
|
|
164
187
|
registries: journalArg.npm.registries.map((registryArg) => registryArg.registry),
|
|
165
188
|
},
|
|
189
|
+
docker: journalArg.schemaVersion === releaseJournalSchemaVersion
|
|
190
|
+
? {
|
|
191
|
+
engine: journalArg.docker.engine,
|
|
192
|
+
protocolVersion: journalArg.docker.protocolVersion,
|
|
193
|
+
request: journalArg.docker.request,
|
|
194
|
+
}
|
|
195
|
+
: undefined,
|
|
166
196
|
});
|
|
167
|
-
|
|
197
|
+
const assertReleaseJournalV1 = (valueArg) => {
|
|
198
|
+
if (!isPlainObject(valueArg)) {
|
|
199
|
+
throw new Error("Release journal root must be a JSON object.");
|
|
200
|
+
}
|
|
201
|
+
assertExactKeys(valueArg, [
|
|
202
|
+
"kind",
|
|
203
|
+
"schemaVersion",
|
|
204
|
+
"revision",
|
|
205
|
+
"release",
|
|
206
|
+
"artifact",
|
|
207
|
+
"git",
|
|
208
|
+
"npm",
|
|
209
|
+
"createdAt",
|
|
210
|
+
"updatedAt",
|
|
211
|
+
"completedAt",
|
|
212
|
+
], "Release journal");
|
|
213
|
+
if (valueArg.kind !== "gitzone-release-journal" ||
|
|
214
|
+
valueArg.schemaVersion !== legacyReleaseJournalSchemaVersion ||
|
|
215
|
+
!Number.isSafeInteger(valueArg.revision) ||
|
|
216
|
+
valueArg.revision < 1) {
|
|
217
|
+
throw new Error("Release journal header is invalid or unsupported.");
|
|
218
|
+
}
|
|
219
|
+
if (!isPlainObject(valueArg.release)) {
|
|
220
|
+
throw new Error("Release journal release identity is missing.");
|
|
221
|
+
}
|
|
222
|
+
assertExactKeys(valueArg.release, ["version", "tag", "mainOid", "tagOid"], "Release journal release");
|
|
223
|
+
if (typeof valueArg.release.version !== "string" ||
|
|
224
|
+
normalizeReleaseVersion(valueArg.release.version) !==
|
|
225
|
+
valueArg.release.version ||
|
|
226
|
+
valueArg.release.tag !== `v${valueArg.release.version}` ||
|
|
227
|
+
typeof valueArg.release.mainOid !== "string" ||
|
|
228
|
+
!gitOidRegex.test(valueArg.release.mainOid) ||
|
|
229
|
+
typeof valueArg.release.tagOid !== "string" ||
|
|
230
|
+
!gitOidRegex.test(valueArg.release.tagOid)) {
|
|
231
|
+
throw new Error("Release journal Git identity is invalid.");
|
|
232
|
+
}
|
|
233
|
+
const artifact = assertArtifact(valueArg.artifact);
|
|
234
|
+
if (artifact && artifact.version !== valueArg.release.version) {
|
|
235
|
+
throw new Error("Release journal artifact version does not match the release.");
|
|
236
|
+
}
|
|
237
|
+
if (!isPlainObject(valueArg.git)) {
|
|
238
|
+
throw new Error("Release journal Git target is missing.");
|
|
239
|
+
}
|
|
240
|
+
assertExactKeys(valueArg.git, [
|
|
241
|
+
"state",
|
|
242
|
+
"attempts",
|
|
243
|
+
"attempt",
|
|
244
|
+
"error",
|
|
245
|
+
"remote",
|
|
246
|
+
"destinationHash",
|
|
247
|
+
"expectedRemoteMainOid",
|
|
248
|
+
], "Release journal Git target");
|
|
249
|
+
assertTargetStatus(valueArg.git, "Release journal Git target");
|
|
250
|
+
if (valueArg.git.state === "skipped") {
|
|
251
|
+
if (valueArg.git.remote !== null ||
|
|
252
|
+
valueArg.git.destinationHash !== null ||
|
|
253
|
+
valueArg.git.expectedRemoteMainOid !== null) {
|
|
254
|
+
throw new Error("Skipped Git journal targets must not retain destination data.");
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else if (typeof valueArg.git.remote !== "string" ||
|
|
258
|
+
normalizeReleaseGitRemoteName(valueArg.git.remote) !==
|
|
259
|
+
valueArg.git.remote ||
|
|
260
|
+
typeof valueArg.git.destinationHash !== "string" ||
|
|
261
|
+
!sha256Regex.test(valueArg.git.destinationHash) ||
|
|
262
|
+
typeof valueArg.git.expectedRemoteMainOid !== "string" ||
|
|
263
|
+
!gitOidRegex.test(valueArg.git.expectedRemoteMainOid)) {
|
|
264
|
+
throw new Error("Active Git journal target destination data is invalid.");
|
|
265
|
+
}
|
|
266
|
+
if (!isPlainObject(valueArg.npm)) {
|
|
267
|
+
throw new Error("Release journal npm target is missing.");
|
|
268
|
+
}
|
|
269
|
+
assertExactKeys(valueArg.npm, ["access", "tag", "alreadyPublished", "registries"], "Release journal npm target");
|
|
270
|
+
if (valueArg.npm.access !== "public" ||
|
|
271
|
+
valueArg.npm.tag !== "latest" ||
|
|
272
|
+
(valueArg.npm.alreadyPublished !== "success" &&
|
|
273
|
+
valueArg.npm.alreadyPublished !== "error") ||
|
|
274
|
+
!Array.isArray(valueArg.npm.registries)) {
|
|
275
|
+
throw new Error("Release journal npm settings are invalid.");
|
|
276
|
+
}
|
|
277
|
+
const registryUrls = [];
|
|
278
|
+
for (const [index, rawRegistry] of valueArg.npm.registries.entries()) {
|
|
279
|
+
if (!isPlainObject(rawRegistry)) {
|
|
280
|
+
throw new Error(`Release journal npm registry ${index} must be an object.`);
|
|
281
|
+
}
|
|
282
|
+
assertExactKeys(rawRegistry, ["state", "attempts", "attempt", "error", "registry"], `Release journal npm registry ${index}`);
|
|
283
|
+
assertTargetStatus(rawRegistry, `Release journal npm registry ${index}`);
|
|
284
|
+
if (typeof rawRegistry.registry !== "string" ||
|
|
285
|
+
!isCanonicalRegistryUrl(rawRegistry.registry) ||
|
|
286
|
+
rawRegistry.state === "skipped") {
|
|
287
|
+
throw new Error(`Release journal npm registry ${index} URL is invalid.`);
|
|
288
|
+
}
|
|
289
|
+
registryUrls.push(rawRegistry.registry);
|
|
290
|
+
}
|
|
291
|
+
if (new Set(registryUrls).size !== registryUrls.length) {
|
|
292
|
+
throw new Error("Release journal npm registries must be unique.");
|
|
293
|
+
}
|
|
294
|
+
if (valueArg.npm.registries.length > 0 !== Boolean(artifact)) {
|
|
295
|
+
throw new Error("Release journal npm targets and artifact must exist together.");
|
|
296
|
+
}
|
|
297
|
+
const createdAt = assertIsoTimestamp(valueArg.createdAt, "Release journal createdAt");
|
|
298
|
+
const updatedAt = assertIsoTimestamp(valueArg.updatedAt, "Release journal updatedAt");
|
|
299
|
+
if (updatedAt < createdAt) {
|
|
300
|
+
throw new Error("Release journal updatedAt predates createdAt.");
|
|
301
|
+
}
|
|
302
|
+
if (valueArg.completedAt !== null) {
|
|
303
|
+
const completedAt = assertIsoTimestamp(valueArg.completedAt, "Release journal completedAt");
|
|
304
|
+
if (completedAt < createdAt ||
|
|
305
|
+
!isComplete(valueArg)) {
|
|
306
|
+
throw new Error("Release journal completion state is inconsistent.");
|
|
307
|
+
}
|
|
308
|
+
if (completedAt > updatedAt) {
|
|
309
|
+
throw new Error("Release journal completedAt exceeds updatedAt.");
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else if (isComplete(valueArg)) {
|
|
313
|
+
throw new Error("Complete release journal must record completedAt.");
|
|
314
|
+
}
|
|
315
|
+
return valueArg;
|
|
316
|
+
};
|
|
317
|
+
const assertDockerAttemptHistory = (statusArg, contextArg) => {
|
|
318
|
+
if (statusArg.state === "pending" && statusArg.attempts !== 0) {
|
|
319
|
+
throw new Error(`${contextArg} pending state cannot retain prior attempts.`);
|
|
320
|
+
}
|
|
321
|
+
if (statusArg.state !== "pending" && statusArg.attempts < 1) {
|
|
322
|
+
throw new Error(`${contextArg} state requires publication attempt history.`);
|
|
323
|
+
}
|
|
324
|
+
if ((statusArg.state === "conflict") !==
|
|
325
|
+
(statusArg.error === "destination-conflict")) {
|
|
326
|
+
throw new Error(`${contextArg} destination-conflict must be terminal conflict state.`);
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
export const getReleaseDockerPromotionContext = (journalArg, promotionIdArg) => {
|
|
330
|
+
const result = journalArg.docker.qualification.result;
|
|
331
|
+
if (!result) {
|
|
332
|
+
throw new Error("Docker qualification evidence is not available.");
|
|
333
|
+
}
|
|
334
|
+
const context = getReleasePromotionContexts(result).find((entryArg) => entryArg.promotionId === promotionIdArg);
|
|
335
|
+
if (!context) {
|
|
336
|
+
throw new Error("Docker promotion is not part of the qualification result.");
|
|
337
|
+
}
|
|
338
|
+
return context;
|
|
339
|
+
};
|
|
340
|
+
const assertDockerJournal = (valueArg, releaseArg) => {
|
|
341
|
+
if (!isPlainObject(valueArg)) {
|
|
342
|
+
throw new Error("Release journal Docker target is missing.");
|
|
343
|
+
}
|
|
344
|
+
assertExactKeys(valueArg, [
|
|
345
|
+
"engine",
|
|
346
|
+
"protocolVersion",
|
|
347
|
+
"request",
|
|
348
|
+
"qualification",
|
|
349
|
+
"promotions",
|
|
350
|
+
"cleanup",
|
|
351
|
+
], "Release journal Docker target");
|
|
352
|
+
if (valueArg.engine !== "tsdocker" ||
|
|
353
|
+
valueArg.protocolVersion !== 1 ||
|
|
354
|
+
!isPlainObject(valueArg.qualification) ||
|
|
355
|
+
!Array.isArray(valueArg.promotions) ||
|
|
356
|
+
!isPlainObject(valueArg.cleanup)) {
|
|
357
|
+
throw new Error("Release journal Docker target is invalid.");
|
|
358
|
+
}
|
|
359
|
+
const request = assertReleaseQualificationRequest(valueArg.request);
|
|
360
|
+
if (request.release.version !== releaseArg.version ||
|
|
361
|
+
request.release.revision !== releaseArg.mainOid) {
|
|
362
|
+
throw new Error("Release journal Docker request does not match the release.");
|
|
363
|
+
}
|
|
364
|
+
assertExactKeys(valueArg.qualification, ["state", "attempts", "attempt", "error", "result"], "Release journal Docker qualification");
|
|
365
|
+
assertTargetStatus(valueArg.qualification, "Release journal Docker qualification");
|
|
366
|
+
assertDockerAttemptHistory(valueArg.qualification, "Release journal Docker qualification");
|
|
367
|
+
if (valueArg.qualification.state === "skipped") {
|
|
368
|
+
throw new Error("Schema 2 Docker qualification cannot be skipped.");
|
|
369
|
+
}
|
|
370
|
+
const qualificationResult = valueArg.qualification.result === null
|
|
371
|
+
? null
|
|
372
|
+
: assertReleaseQualificationResult(valueArg.qualification.result, request);
|
|
373
|
+
if ((valueArg.qualification.state === "verified") !==
|
|
374
|
+
Boolean(qualificationResult)) {
|
|
375
|
+
throw new Error("Release journal Docker qualification result is inconsistent.");
|
|
376
|
+
}
|
|
377
|
+
const promotionContexts = qualificationResult
|
|
378
|
+
? getReleasePromotionContexts(qualificationResult)
|
|
379
|
+
: [];
|
|
380
|
+
if (valueArg.promotions.length !== promotionContexts.length) {
|
|
381
|
+
throw new Error("Release journal Docker promotions do not match qualification evidence.");
|
|
382
|
+
}
|
|
383
|
+
for (const [index, rawPromotion] of valueArg.promotions.entries()) {
|
|
384
|
+
if (!isPlainObject(rawPromotion)) {
|
|
385
|
+
throw new Error(`Release journal Docker promotion ${index} is invalid.`);
|
|
386
|
+
}
|
|
387
|
+
assertExactKeys(rawPromotion, ["state", "attempts", "attempt", "error", "promotionId", "evidence"], `Release journal Docker promotion ${index}`);
|
|
388
|
+
assertTargetStatus(rawPromotion, `Release journal Docker promotion ${index}`);
|
|
389
|
+
assertDockerAttemptHistory(rawPromotion, `Release journal Docker promotion ${index}`);
|
|
390
|
+
if (rawPromotion.state === "skipped" ||
|
|
391
|
+
rawPromotion.promotionId !== promotionContexts[index].promotionId ||
|
|
392
|
+
!Array.isArray(rawPromotion.evidence) ||
|
|
393
|
+
rawPromotion.evidence.length > 2) {
|
|
394
|
+
throw new Error(`Release journal Docker promotion ${index} is invalid.`);
|
|
395
|
+
}
|
|
396
|
+
const evidence = rawPromotion.evidence.map((entryArg) => assertReleasePromotionEvidence(entryArg, request, promotionContexts[index]));
|
|
397
|
+
const classifications = evidence.map(classifyReleasePromotionEvidence);
|
|
398
|
+
const verifiedEvidence = rawPromotion.state === "verified" &&
|
|
399
|
+
classifications.length === 1 &&
|
|
400
|
+
classifications[0] === "exact";
|
|
401
|
+
const initialConflictEvidence = rawPromotion.state === "conflict" &&
|
|
402
|
+
classifications.length === 1 &&
|
|
403
|
+
classifications[0] === "conflict";
|
|
404
|
+
const verifiedDriftEvidence = rawPromotion.state === "conflict" &&
|
|
405
|
+
classifications.length === 2 &&
|
|
406
|
+
classifications[0] === "exact" &&
|
|
407
|
+
(classifications[1] === "pending" || classifications[1] === "conflict");
|
|
408
|
+
const noEvidenceExpected = (rawPromotion.state === "pending" ||
|
|
409
|
+
rawPromotion.state === "publishing" ||
|
|
410
|
+
rawPromotion.state === "failed") &&
|
|
411
|
+
classifications.length === 0;
|
|
412
|
+
if ((!verifiedEvidence &&
|
|
413
|
+
!initialConflictEvidence &&
|
|
414
|
+
!verifiedDriftEvidence &&
|
|
415
|
+
!noEvidenceExpected) ||
|
|
416
|
+
(rawPromotion.state === "conflict" &&
|
|
417
|
+
rawPromotion.error !== "destination-conflict")) {
|
|
418
|
+
throw new Error(`Release journal Docker promotion ${index} evidence is inconsistent.`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
assertExactKeys(valueArg.cleanup, ["state", "attempts", "attempt", "error", "result"], "Release journal Docker cleanup");
|
|
422
|
+
assertTargetStatus(valueArg.cleanup, "Release journal Docker cleanup");
|
|
423
|
+
assertDockerAttemptHistory(valueArg.cleanup, "Release journal Docker cleanup");
|
|
424
|
+
if (valueArg.cleanup.state === "skipped" ||
|
|
425
|
+
valueArg.cleanup.state === "conflict") {
|
|
426
|
+
throw new Error("Release journal Docker cleanup state is invalid.");
|
|
427
|
+
}
|
|
428
|
+
const cleanupResult = valueArg.cleanup.result === null
|
|
429
|
+
? null
|
|
430
|
+
: assertReleaseCleanupResult(valueArg.cleanup.result, request);
|
|
431
|
+
if ((valueArg.cleanup.state === "verified") !== Boolean(cleanupResult)) {
|
|
432
|
+
throw new Error("Release journal Docker cleanup result is inconsistent.");
|
|
433
|
+
}
|
|
434
|
+
const promotionsVerified = valueArg.promotions.length > 0 &&
|
|
435
|
+
valueArg.promotions.every((promotionArg) => isPlainObject(promotionArg) && promotionArg.state === "verified");
|
|
436
|
+
const qualificationConflictCleanup = valueArg.qualification.state === "conflict" &&
|
|
437
|
+
valueArg.qualification.error === "destination-conflict" &&
|
|
438
|
+
valueArg.promotions.length === 0;
|
|
439
|
+
if ((valueArg.cleanup.state === "publishing" ||
|
|
440
|
+
valueArg.cleanup.state === "verified") &&
|
|
441
|
+
!promotionsVerified &&
|
|
442
|
+
!qualificationConflictCleanup) {
|
|
443
|
+
throw new Error("Release journal Docker cleanup requires verified promotions or a terminal qualification conflict.");
|
|
444
|
+
}
|
|
445
|
+
return valueArg;
|
|
446
|
+
};
|
|
447
|
+
const assertReleaseJournalV2 = (valueArg) => {
|
|
168
448
|
if (!isPlainObject(valueArg)) {
|
|
169
449
|
throw new Error("Release journal root must be a JSON object.");
|
|
170
450
|
}
|
|
@@ -176,6 +456,7 @@ export const assertReleaseJournal = (valueArg) => {
|
|
|
176
456
|
"artifact",
|
|
177
457
|
"git",
|
|
178
458
|
"npm",
|
|
459
|
+
"docker",
|
|
179
460
|
"createdAt",
|
|
180
461
|
"updatedAt",
|
|
181
462
|
"completedAt",
|
|
@@ -191,7 +472,8 @@ export const assertReleaseJournal = (valueArg) => {
|
|
|
191
472
|
}
|
|
192
473
|
assertExactKeys(valueArg.release, ["version", "tag", "mainOid", "tagOid"], "Release journal release");
|
|
193
474
|
if (typeof valueArg.release.version !== "string" ||
|
|
194
|
-
normalizeReleaseVersion(valueArg.release.version) !==
|
|
475
|
+
normalizeReleaseVersion(valueArg.release.version) !==
|
|
476
|
+
valueArg.release.version ||
|
|
195
477
|
valueArg.release.tag !== `v${valueArg.release.version}` ||
|
|
196
478
|
typeof valueArg.release.mainOid !== "string" ||
|
|
197
479
|
!gitOidRegex.test(valueArg.release.mainOid) ||
|
|
@@ -224,7 +506,8 @@ export const assertReleaseJournal = (valueArg) => {
|
|
|
224
506
|
}
|
|
225
507
|
}
|
|
226
508
|
else if (typeof valueArg.git.remote !== "string" ||
|
|
227
|
-
normalizeReleaseGitRemoteName(valueArg.git.remote) !==
|
|
509
|
+
normalizeReleaseGitRemoteName(valueArg.git.remote) !==
|
|
510
|
+
valueArg.git.remote ||
|
|
228
511
|
typeof valueArg.git.destinationHash !== "string" ||
|
|
229
512
|
!sha256Regex.test(valueArg.git.destinationHash) ||
|
|
230
513
|
typeof valueArg.git.expectedRemoteMainOid !== "string" ||
|
|
@@ -259,9 +542,20 @@ export const assertReleaseJournal = (valueArg) => {
|
|
|
259
542
|
if (new Set(registryUrls).size !== registryUrls.length) {
|
|
260
543
|
throw new Error("Release journal npm registries must be unique.");
|
|
261
544
|
}
|
|
262
|
-
if (
|
|
545
|
+
if (valueArg.npm.registries.length > 0 !== Boolean(artifact)) {
|
|
263
546
|
throw new Error("Release journal npm targets and artifact must exist together.");
|
|
264
547
|
}
|
|
548
|
+
const docker = assertDockerJournal(valueArg.docker, valueArg.release);
|
|
549
|
+
const activePublishers = [
|
|
550
|
+
valueArg.git,
|
|
551
|
+
...valueArg.npm.registries,
|
|
552
|
+
docker.qualification,
|
|
553
|
+
...docker.promotions,
|
|
554
|
+
docker.cleanup,
|
|
555
|
+
].filter((statusArg) => statusArg.state === "publishing");
|
|
556
|
+
if (activePublishers.length > 1) {
|
|
557
|
+
throw new Error("Schema 2 release journals permit at most one active publication owner.");
|
|
558
|
+
}
|
|
265
559
|
const createdAt = assertIsoTimestamp(valueArg.createdAt, "Release journal createdAt");
|
|
266
560
|
const updatedAt = assertIsoTimestamp(valueArg.updatedAt, "Release journal updatedAt");
|
|
267
561
|
if (updatedAt < createdAt) {
|
|
@@ -269,7 +563,8 @@ export const assertReleaseJournal = (valueArg) => {
|
|
|
269
563
|
}
|
|
270
564
|
if (valueArg.completedAt !== null) {
|
|
271
565
|
const completedAt = assertIsoTimestamp(valueArg.completedAt, "Release journal completedAt");
|
|
272
|
-
if (completedAt < createdAt ||
|
|
566
|
+
if (completedAt < createdAt ||
|
|
567
|
+
!isComplete(valueArg)) {
|
|
273
568
|
throw new Error("Release journal completion state is inconsistent.");
|
|
274
569
|
}
|
|
275
570
|
if (completedAt > updatedAt) {
|
|
@@ -281,7 +576,49 @@ export const assertReleaseJournal = (valueArg) => {
|
|
|
281
576
|
}
|
|
282
577
|
return valueArg;
|
|
283
578
|
};
|
|
284
|
-
export const
|
|
579
|
+
export const assertReleaseJournal = (valueArg) => {
|
|
580
|
+
if (!isPlainObject(valueArg)) {
|
|
581
|
+
throw new Error("Release journal root must be a JSON object.");
|
|
582
|
+
}
|
|
583
|
+
if (valueArg.schemaVersion === legacyReleaseJournalSchemaVersion) {
|
|
584
|
+
return assertReleaseJournalV1(valueArg);
|
|
585
|
+
}
|
|
586
|
+
if (valueArg.schemaVersion === releaseJournalSchemaVersion) {
|
|
587
|
+
return assertReleaseJournalV2(valueArg);
|
|
588
|
+
}
|
|
589
|
+
throw new Error("Release journal header is invalid or unsupported.");
|
|
590
|
+
};
|
|
591
|
+
const canonicalizeProtocolValue = (valueArg) => JSON.parse(canonicalReleaseJson(valueArg));
|
|
592
|
+
const prepareReleaseJournalSerialization = (journalArg) => {
|
|
593
|
+
const journal = assertReleaseJournal(journalArg);
|
|
594
|
+
if (journal.schemaVersion === legacyReleaseJournalSchemaVersion) {
|
|
595
|
+
return journal;
|
|
596
|
+
}
|
|
597
|
+
return {
|
|
598
|
+
...journal,
|
|
599
|
+
docker: {
|
|
600
|
+
...journal.docker,
|
|
601
|
+
request: canonicalizeProtocolValue(journal.docker.request),
|
|
602
|
+
qualification: {
|
|
603
|
+
...journal.docker.qualification,
|
|
604
|
+
result: journal.docker.qualification.result
|
|
605
|
+
? canonicalizeProtocolValue(journal.docker.qualification.result)
|
|
606
|
+
: null,
|
|
607
|
+
},
|
|
608
|
+
promotions: journal.docker.promotions.map((promotionArg) => ({
|
|
609
|
+
...promotionArg,
|
|
610
|
+
evidence: promotionArg.evidence.map(canonicalizeProtocolValue),
|
|
611
|
+
})),
|
|
612
|
+
cleanup: {
|
|
613
|
+
...journal.docker.cleanup,
|
|
614
|
+
result: journal.docker.cleanup.result
|
|
615
|
+
? canonicalizeProtocolValue(journal.docker.cleanup.result)
|
|
616
|
+
: null,
|
|
617
|
+
},
|
|
618
|
+
},
|
|
619
|
+
};
|
|
620
|
+
};
|
|
621
|
+
export const serializeReleaseJournal = (journalArg) => `${JSON.stringify(prepareReleaseJournalSerialization(journalArg), null, 2)}\n`;
|
|
285
622
|
export const parseReleaseJournal = (contentArg) => {
|
|
286
623
|
let parsed;
|
|
287
624
|
try {
|
|
@@ -296,6 +633,101 @@ export const parseReleaseJournal = (contentArg) => {
|
|
|
296
633
|
}
|
|
297
634
|
return journal;
|
|
298
635
|
};
|
|
636
|
+
const assertDockerStatusAppendOnly = (currentArg, nextArg, contextArg, optionsArg = {}) => {
|
|
637
|
+
if (currentArg.state === nextArg.state) {
|
|
638
|
+
if (canonicalReleaseJson(currentArg) !== canonicalReleaseJson(nextArg)) {
|
|
639
|
+
throw new Error(`${contextArg} cannot change without a state transition.`);
|
|
640
|
+
}
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
if ((currentArg.state === "pending" || currentArg.state === "failed") &&
|
|
644
|
+
nextArg.state === "publishing" &&
|
|
645
|
+
nextArg.attempts === currentArg.attempts + 1) {
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
if (currentArg.state === "publishing" &&
|
|
649
|
+
(nextArg.state === "verified" ||
|
|
650
|
+
nextArg.state === "failed" ||
|
|
651
|
+
nextArg.state === "conflict") &&
|
|
652
|
+
nextArg.attempts === currentArg.attempts) {
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
if (optionsArg.allowVerifiedConflict &&
|
|
656
|
+
currentArg.state === "verified" &&
|
|
657
|
+
nextArg.state === "conflict" &&
|
|
658
|
+
nextArg.attempts === currentArg.attempts) {
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
throw new Error(`${contextArg} state transition is not append-only.`);
|
|
662
|
+
};
|
|
663
|
+
const assertSchema2AppendOnlyTransition = (currentArg, nextArg) => {
|
|
664
|
+
const currentDocker = currentArg.docker;
|
|
665
|
+
const nextDocker = nextArg.docker;
|
|
666
|
+
if (currentDocker.qualification.state === "conflict" &&
|
|
667
|
+
canonicalReleaseJson(currentDocker.qualification) !==
|
|
668
|
+
canonicalReleaseJson(nextDocker.qualification)) {
|
|
669
|
+
throw new Error("Docker qualification conflict is terminal.");
|
|
670
|
+
}
|
|
671
|
+
assertDockerStatusAppendOnly(currentDocker.qualification, nextDocker.qualification, "Docker qualification");
|
|
672
|
+
if (currentDocker.qualification.result &&
|
|
673
|
+
canonicalReleaseJson(currentDocker.qualification.result) !==
|
|
674
|
+
canonicalReleaseJson(nextDocker.qualification.result)) {
|
|
675
|
+
throw new Error("Docker qualification evidence is append-only.");
|
|
676
|
+
}
|
|
677
|
+
if (currentDocker.qualification.result &&
|
|
678
|
+
nextDocker.qualification.state !== "verified") {
|
|
679
|
+
throw new Error("Verified Docker qualification cannot regress.");
|
|
680
|
+
}
|
|
681
|
+
if (!currentDocker.qualification.result &&
|
|
682
|
+
nextDocker.qualification.result &&
|
|
683
|
+
(currentDocker.qualification.state !== "publishing" ||
|
|
684
|
+
nextDocker.qualification.state !== "verified")) {
|
|
685
|
+
throw new Error("Docker qualification evidence requires its owned publishing transition.");
|
|
686
|
+
}
|
|
687
|
+
if (currentDocker.promotions.length === 0 &&
|
|
688
|
+
nextDocker.promotions.length > 0) {
|
|
689
|
+
if (currentDocker.qualification.state !== "publishing" ||
|
|
690
|
+
nextDocker.qualification.state !== "verified" ||
|
|
691
|
+
nextDocker.promotions.some((promotionArg) => promotionArg.state !== "pending" ||
|
|
692
|
+
promotionArg.attempts !== 0 ||
|
|
693
|
+
promotionArg.attempt !== null ||
|
|
694
|
+
promotionArg.error !== null ||
|
|
695
|
+
promotionArg.evidence.length !== 0)) {
|
|
696
|
+
throw new Error("Docker promotions must begin pending with no attempt or evidence.");
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
else if (currentDocker.promotions.length > 0) {
|
|
700
|
+
if (currentDocker.promotions.length !== nextDocker.promotions.length ||
|
|
701
|
+
currentDocker.promotions.some((promotionArg, indexArg) => promotionArg.promotionId !==
|
|
702
|
+
nextDocker.promotions[indexArg]?.promotionId)) {
|
|
703
|
+
throw new Error("Docker promotion identity is append-only.");
|
|
704
|
+
}
|
|
705
|
+
for (const [index, currentPromotion,] of currentDocker.promotions.entries()) {
|
|
706
|
+
const nextPromotion = nextDocker.promotions[index];
|
|
707
|
+
if (currentPromotion.state === "conflict" &&
|
|
708
|
+
canonicalReleaseJson(currentPromotion) !==
|
|
709
|
+
canonicalReleaseJson(nextPromotion)) {
|
|
710
|
+
throw new Error(`Docker promotion ${currentPromotion.promotionId} conflict is terminal.`);
|
|
711
|
+
}
|
|
712
|
+
assertDockerStatusAppendOnly(currentPromotion, nextPromotion, `Docker promotion ${currentPromotion.promotionId}`, { allowVerifiedConflict: true });
|
|
713
|
+
if (nextPromotion.evidence.length < currentPromotion.evidence.length ||
|
|
714
|
+
currentPromotion.evidence.some((evidenceArg, evidenceIndexArg) => canonicalReleaseJson(evidenceArg) !==
|
|
715
|
+
canonicalReleaseJson(nextPromotion.evidence[evidenceIndexArg]))) {
|
|
716
|
+
throw new Error(`Docker promotion ${currentPromotion.promotionId} evidence is append-only.`);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
assertDockerStatusAppendOnly(currentDocker.cleanup, nextDocker.cleanup, "Docker cleanup");
|
|
721
|
+
if (currentDocker.cleanup.result &&
|
|
722
|
+
canonicalReleaseJson(currentDocker.cleanup.result) !==
|
|
723
|
+
canonicalReleaseJson(nextDocker.cleanup.result)) {
|
|
724
|
+
throw new Error("Docker cleanup evidence is append-only.");
|
|
725
|
+
}
|
|
726
|
+
if (currentDocker.cleanup.state === "verified" &&
|
|
727
|
+
canonicalReleaseJson(currentDocker) !== canonicalReleaseJson(nextDocker)) {
|
|
728
|
+
throw new Error("Completed Docker publication state is terminal.");
|
|
729
|
+
}
|
|
730
|
+
};
|
|
299
731
|
export const createReleaseAttempt = () => ({
|
|
300
732
|
id: plugins.crypto.randomBytes(16).toString("hex"),
|
|
301
733
|
pid: process.pid,
|
|
@@ -331,7 +763,7 @@ export class ReleaseJournalStore {
|
|
|
331
763
|
if (!plugins.path.isAbsolute(gitCommonDirectoryArg)) {
|
|
332
764
|
throw new Error("Release journal storage requires an absolute Git common directory.");
|
|
333
765
|
}
|
|
334
|
-
this.rootPath = plugins.path.join(plugins.path.resolve(gitCommonDirectoryArg), "gitzone", "releases", `v${
|
|
766
|
+
this.rootPath = plugins.path.join(plugins.path.resolve(gitCommonDirectoryArg), "gitzone", "releases", `v${releaseJournalStorageVersion}`);
|
|
335
767
|
}
|
|
336
768
|
getReleaseDirectory(versionArg) {
|
|
337
769
|
const version = normalizeReleaseVersion(versionArg);
|
|
@@ -350,7 +782,14 @@ export class ReleaseJournalStore {
|
|
|
350
782
|
const filePath = plugins.path.join(this.getReleaseDirectory(version), releaseJournalFileName);
|
|
351
783
|
let content;
|
|
352
784
|
try {
|
|
353
|
-
|
|
785
|
+
const bytes = await plugins.fs.readFile(filePath);
|
|
786
|
+
if (bytes.byteLength >= 3 &&
|
|
787
|
+
bytes[0] === 0xef &&
|
|
788
|
+
bytes[1] === 0xbb &&
|
|
789
|
+
bytes[2] === 0xbf) {
|
|
790
|
+
throw new Error("Release journal must not contain a UTF-8 byte-order mark.");
|
|
791
|
+
}
|
|
792
|
+
content = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
354
793
|
}
|
|
355
794
|
catch (error) {
|
|
356
795
|
if (error.code === "ENOENT") {
|
|
@@ -369,7 +808,9 @@ export class ReleaseJournalStore {
|
|
|
369
808
|
async list() {
|
|
370
809
|
let entries;
|
|
371
810
|
try {
|
|
372
|
-
entries = await plugins.fs.readdir(this.rootPath, {
|
|
811
|
+
entries = await plugins.fs.readdir(this.rootPath, {
|
|
812
|
+
withFileTypes: true,
|
|
813
|
+
});
|
|
373
814
|
}
|
|
374
815
|
catch (error) {
|
|
375
816
|
if (error.code === "ENOENT") {
|
|
@@ -393,9 +834,33 @@ export class ReleaseJournalStore {
|
|
|
393
834
|
if (journal.revision !== 1) {
|
|
394
835
|
throw new Error("New release journals must start at revision 1.");
|
|
395
836
|
}
|
|
837
|
+
if (journal.schemaVersion === releaseJournalSchemaVersion) {
|
|
838
|
+
const commonTargets = [journal.git, ...journal.npm.registries];
|
|
839
|
+
const commonTargetsUnclaimed = commonTargets.every((targetArg) => (targetArg.state === "pending" || targetArg.state === "skipped") &&
|
|
840
|
+
targetArg.attempts === 0 &&
|
|
841
|
+
targetArg.attempt === null &&
|
|
842
|
+
targetArg.error === null);
|
|
843
|
+
if (!commonTargetsUnclaimed ||
|
|
844
|
+
journal.completedAt !== null ||
|
|
845
|
+
journal.docker.qualification.state !== "pending" ||
|
|
846
|
+
journal.docker.qualification.attempts !== 0 ||
|
|
847
|
+
journal.docker.qualification.attempt !== null ||
|
|
848
|
+
journal.docker.qualification.error !== null ||
|
|
849
|
+
journal.docker.qualification.result !== null ||
|
|
850
|
+
journal.docker.promotions.length !== 0 ||
|
|
851
|
+
journal.docker.cleanup.state !== "pending" ||
|
|
852
|
+
journal.docker.cleanup.attempts !== 0 ||
|
|
853
|
+
journal.docker.cleanup.attempt !== null ||
|
|
854
|
+
journal.docker.cleanup.error !== null ||
|
|
855
|
+
journal.docker.cleanup.result !== null) {
|
|
856
|
+
throw new Error("New schema 2 release journals must start with unclaimed publication targets.");
|
|
857
|
+
}
|
|
858
|
+
}
|
|
396
859
|
const temporaryDirectory = plugins.path.resolve(temporaryDirectoryArg);
|
|
397
860
|
if (plugins.path.dirname(temporaryDirectory) !== this.rootPath ||
|
|
398
|
-
!plugins.path
|
|
861
|
+
!plugins.path
|
|
862
|
+
.basename(temporaryDirectory)
|
|
863
|
+
.startsWith(`.v${journal.release.version}.tmp-`)) {
|
|
399
864
|
throw new Error("Prepared release directory is outside canonical storage.");
|
|
400
865
|
}
|
|
401
866
|
if (journal.artifact) {
|
|
@@ -406,10 +871,14 @@ export class ReleaseJournalStore {
|
|
|
406
871
|
}
|
|
407
872
|
const artifactBytes = await plugins.fs.readFile(artifactPath);
|
|
408
873
|
if (artifactBytes.byteLength !== journal.artifact.size ||
|
|
409
|
-
plugins.crypto
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
journal.artifact.
|
|
874
|
+
plugins.crypto
|
|
875
|
+
.createHash("sha1")
|
|
876
|
+
.update(artifactBytes)
|
|
877
|
+
.digest("hex") !== journal.artifact.sha1 ||
|
|
878
|
+
plugins.crypto
|
|
879
|
+
.createHash("sha256")
|
|
880
|
+
.update(artifactBytes)
|
|
881
|
+
.digest("hex") !== journal.artifact.sha256 ||
|
|
413
882
|
`sha512-${plugins.crypto.createHash("sha512").update(artifactBytes).digest("base64")}` !==
|
|
414
883
|
journal.artifact.integrity) {
|
|
415
884
|
throw new Error("Prepared release artifact does not match its journal identity.");
|
|
@@ -468,6 +937,10 @@ export class ReleaseJournalStore {
|
|
|
468
937
|
if (immutableJournalIdentity(next) !== immutableJournalIdentity(current)) {
|
|
469
938
|
throw new Error("Release journal immutable identity changed during a transaction.");
|
|
470
939
|
}
|
|
940
|
+
if (current.schemaVersion === releaseJournalSchemaVersion &&
|
|
941
|
+
next.schemaVersion === releaseJournalSchemaVersion) {
|
|
942
|
+
assertSchema2AppendOnlyTransition(current, next);
|
|
943
|
+
}
|
|
471
944
|
await this.writeAtomic(version, next);
|
|
472
945
|
return next;
|
|
473
946
|
});
|
|
@@ -501,6 +974,25 @@ export const createInitialTargetStatus = (enabledArg) => ({
|
|
|
501
974
|
attempt: null,
|
|
502
975
|
error: null,
|
|
503
976
|
});
|
|
977
|
+
export const createInitialReleaseDockerJournal = (requestArg) => ({
|
|
978
|
+
engine: "tsdocker",
|
|
979
|
+
protocolVersion: 1,
|
|
980
|
+
request: assertReleaseQualificationRequest(requestArg),
|
|
981
|
+
qualification: {
|
|
982
|
+
...createInitialTargetStatus(true),
|
|
983
|
+
result: null,
|
|
984
|
+
},
|
|
985
|
+
promotions: [],
|
|
986
|
+
cleanup: {
|
|
987
|
+
...createInitialTargetStatus(true),
|
|
988
|
+
result: null,
|
|
989
|
+
},
|
|
990
|
+
});
|
|
991
|
+
export const createReleaseDockerPromotions = (resultArg) => getReleasePromotionContexts(resultArg).map((contextArg) => ({
|
|
992
|
+
...createInitialTargetStatus(true),
|
|
993
|
+
promotionId: contextArg.promotionId,
|
|
994
|
+
evidence: [],
|
|
995
|
+
}));
|
|
504
996
|
export const finalizeJournalCompletion = (journalArg, completedAtArg = new Date().toISOString()) => {
|
|
505
997
|
const completed = isComplete(journalArg);
|
|
506
998
|
return {
|
|
@@ -508,4 +1000,4 @@ export const finalizeJournalCompletion = (journalArg, completedAtArg = new Date(
|
|
|
508
1000
|
completedAt: completed ? journalArg.completedAt || completedAtArg : null,
|
|
509
1001
|
};
|
|
510
1002
|
};
|
|
511
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZWxlYXNlam91cm5hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21vZF9yZWxlYXNlL2NsYXNzZXMucmVsZWFzZWpvdXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFVLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsYUFBc0IsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxjQUF1QixDQUFDO0FBMkU5RCxNQUFNLG1CQUFtQixHQUFHLGtEQUFrRCxDQUFDO0FBQy9FLE1BQU0sV0FBVyxHQUFHLGlDQUFpQyxDQUFDO0FBQ3RELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDO0FBQ25DLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO0FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsK0JBQStCLENBQUM7QUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyx3RUFBd0UsQ0FBQztBQUNsRyxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFDO0FBQzNELE1BQU0sWUFBWSxHQUEwQjtJQUMxQyxTQUFTO0lBQ1QsWUFBWTtJQUNaLFVBQVU7SUFDVixRQUFRO0lBQ1IsVUFBVTtJQUNWLFNBQVM7Q0FDVixDQUFDO0FBQ0YsTUFBTSxVQUFVLEdBQXdCO0lBQ3RDLGdCQUFnQjtJQUNoQiwyQkFBMkI7SUFDM0IsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsMkJBQTJCO0NBQzVCLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQWlCLEVBQXVDLEVBQUUsQ0FDL0UsT0FBTyxRQUFRLEtB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
|
|
1003
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZWxlYXNlam91cm5hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21vZF9yZWxlYXNlL2NsYXNzZXMucmVsZWFzZWpvdXJuYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUM5QixpQ0FBaUMsRUFDakMsZ0NBQWdDLEVBQ2hDLG9CQUFvQixFQUNwQixnQ0FBZ0MsRUFDaEMsMkJBQTJCLEdBTTVCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBVSxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQVUsQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFVLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsYUFBc0IsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxjQUF1QixDQUFDO0FBc0g5RCxNQUFNLG1CQUFtQixHQUFHLGtEQUFrRCxDQUFDO0FBQy9FLE1BQU0sV0FBVyxHQUFHLGlDQUFpQyxDQUFDO0FBQ3RELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDO0FBQ25DLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO0FBQ3JDLE1BQU0sb0JBQW9CLEdBQUcsK0JBQStCLENBQUM7QUFDN0QsTUFBTSxnQkFBZ0IsR0FDcEIsd0VBQXdFLENBQUM7QUFDM0UsTUFBTSxrQkFBa0IsR0FBRywrQkFBK0IsQ0FBQztBQUMzRCxNQUFNLFlBQVksR0FBMEI7SUFDMUMsU0FBUztJQUNULFlBQVk7SUFDWixVQUFV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
|