@git.zone/cli 6.0.0 → 6.1.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_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.npmartifact.js +4 -2
- package/dist_ts/mod_release/helpers.releasepublication.d.ts +5 -3
- package/dist_ts/mod_release/helpers.releasepublication.js +386 -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.npmartifact.ts +3 -1
- package/ts/mod_release/helpers.releasepublication.ts +780 -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,7 +1,8 @@
|
|
|
1
1
|
import * as plugins from "./mod.plugins.js";
|
|
2
|
-
import { ReleaseJournalStore, createReleaseAttempt, finalizeJournalCompletion, } from "./classes.releasejournal.js";
|
|
2
|
+
import { ReleaseJournalStore, createReleaseAttempt, createReleaseDockerPromotions, finalizeJournalCompletion, getReleaseDockerPromotionContext, } from "./classes.releasejournal.js";
|
|
3
3
|
import { probeAnonymousNpmArtifact, publishNpmArtifact, verifyStoredNpmArtifact, waitForAnonymousNpmArtifact, } from "./helpers.npmartifact.js";
|
|
4
4
|
import { releaseGitEnv } from "./helpers.releasebranch.js";
|
|
5
|
+
import { TsdockerReleaseCommandError, TsdockerReleaseRequestCleanupError, assertReleaseCleanupResult, assertReleaseProbeResult, assertReleasePromotionResult, assertReleaseQualificationResult, classifyReleasePromotionEvidence, } from "./helpers.tsdockerprotocol.js";
|
|
5
6
|
const gitProbeTimeoutMs = 60_000;
|
|
6
7
|
const gitPushTimeoutMs = 5 * 60_000;
|
|
7
8
|
export function buildReleaseGitPushArgs(optionsArg) {
|
|
@@ -26,6 +27,28 @@ const getTargetStatus = (journalArg, selectorArg) => {
|
|
|
26
27
|
if (selectorArg.kind === "git") {
|
|
27
28
|
return journalArg.git;
|
|
28
29
|
}
|
|
30
|
+
if (selectorArg.kind === "docker-qualification") {
|
|
31
|
+
if (journalArg.schemaVersion !== 2) {
|
|
32
|
+
throw new Error("Release journal does not contain Docker qualification.");
|
|
33
|
+
}
|
|
34
|
+
return journalArg.docker.qualification;
|
|
35
|
+
}
|
|
36
|
+
if (selectorArg.kind === "docker-cleanup") {
|
|
37
|
+
if (journalArg.schemaVersion !== 2) {
|
|
38
|
+
throw new Error("Release journal does not contain Docker cleanup.");
|
|
39
|
+
}
|
|
40
|
+
return journalArg.docker.cleanup;
|
|
41
|
+
}
|
|
42
|
+
if (selectorArg.kind === "docker-promotion") {
|
|
43
|
+
if (journalArg.schemaVersion !== 2) {
|
|
44
|
+
throw new Error("Release journal does not contain Docker promotions.");
|
|
45
|
+
}
|
|
46
|
+
const promotion = journalArg.docker.promotions.find((promotionArg) => promotionArg.promotionId === selectorArg.promotionId);
|
|
47
|
+
if (!promotion) {
|
|
48
|
+
throw new Error(`Release journal does not contain Docker promotion ${selectorArg.promotionId}.`);
|
|
49
|
+
}
|
|
50
|
+
return promotion;
|
|
51
|
+
}
|
|
29
52
|
const registry = journalArg.npm.registries.find((registryArg) => registryArg.registry === selectorArg.registry);
|
|
30
53
|
if (!registry) {
|
|
31
54
|
throw new Error(`Release journal does not contain npm registry ${selectorArg.registry}.`);
|
|
@@ -80,13 +103,7 @@ const recoverPublishingTarget = async (storeArg, journalArg, selectorArg, recove
|
|
|
80
103
|
};
|
|
81
104
|
const inspectRemoteRelease = async (smartshellArg, cwdArg, destinationArg, journalArg) => {
|
|
82
105
|
const tagRef = `refs/tags/${journalArg.release.tag}`;
|
|
83
|
-
const result = await smartshellArg.execSpawn("git", [
|
|
84
|
-
"ls-remote",
|
|
85
|
-
destinationArg,
|
|
86
|
-
"refs/heads/main",
|
|
87
|
-
tagRef,
|
|
88
|
-
`${tagRef}^{}`,
|
|
89
|
-
], {
|
|
106
|
+
const result = await smartshellArg.execSpawn("git", ["ls-remote", destinationArg, "refs/heads/main", tagRef, `${tagRef}^{}`], {
|
|
90
107
|
cwd: cwdArg,
|
|
91
108
|
env: releaseGitEnv,
|
|
92
109
|
silent: true,
|
|
@@ -197,9 +214,7 @@ const executeGitTarget = async (optionsArg, journalArg) => {
|
|
|
197
214
|
await finishPublishingTarget(optionsArg.store, journal, selector, "conflict", "destination-conflict");
|
|
198
215
|
throw new Error("Git publication produced conflicting remote refs.");
|
|
199
216
|
}
|
|
200
|
-
await finishPublishingTarget(optionsArg.store, journal, selector, "failed", pushResult.exitCode === 0
|
|
201
|
-
? "verification-inconclusive"
|
|
202
|
-
: "command-failed");
|
|
217
|
+
await finishPublishingTarget(optionsArg.store, journal, selector, "failed", pushResult.exitCode === 0 ? "verification-inconclusive" : "command-failed");
|
|
203
218
|
throw new Error("Git publication did not produce verifiable remote refs.");
|
|
204
219
|
};
|
|
205
220
|
const probeNpm = async (journalArg, registryArg, optionsArg, waitArg = false) => {
|
|
@@ -215,7 +230,10 @@ const markNpmProbeFailure = async (optionsArg, journalArg, selectorArg, expected
|
|
|
215
230
|
return markUnclaimedTarget(optionsArg.store, journalArg, selectorArg, expectedStatesArg, conflict ? "conflict" : "failed", conflict ? "artifact-conflict" : "verification-inconclusive");
|
|
216
231
|
};
|
|
217
232
|
const executeNpmRegistry = async (optionsArg, journalArg, registryArg) => {
|
|
218
|
-
const selector = {
|
|
233
|
+
const selector = {
|
|
234
|
+
kind: "npm",
|
|
235
|
+
registry: registryArg,
|
|
236
|
+
};
|
|
219
237
|
let journal = journalArg;
|
|
220
238
|
let status = getTargetStatus(journal, selector);
|
|
221
239
|
let probe = await probeNpm(journal, registryArg, optionsArg);
|
|
@@ -278,8 +296,356 @@ const executeNpmRegistry = async (optionsArg, journalArg, registryArg) => {
|
|
|
278
296
|
: "command-failed");
|
|
279
297
|
throw new Error(`npm publication could not be verified: ${registryArg}`);
|
|
280
298
|
};
|
|
299
|
+
const requireTsdocker = (optionsArg) => {
|
|
300
|
+
if (!optionsArg.tsdocker) {
|
|
301
|
+
throw new Error("Docker release journal requires the verified project-local tSDocker protocol client.");
|
|
302
|
+
}
|
|
303
|
+
return optionsArg.tsdocker;
|
|
304
|
+
};
|
|
305
|
+
const getDockerRequestDirectory = (optionsArg, journalArg) => optionsArg.store.getReleaseDirectory(journalArg.release.version);
|
|
306
|
+
const assertDockerRecoveryAttempt = (statusArg, recoveryAttemptIdArg) => {
|
|
307
|
+
const attemptId = statusArg.attempt?.id;
|
|
308
|
+
if (!attemptId || recoveryAttemptIdArg !== attemptId) {
|
|
309
|
+
throw new Error(`Release target has unresolved publication attempt ${attemptId || "unknown"}. ` +
|
|
310
|
+
`After proving its publisher stopped, retry with --recover-attempt=${attemptId || "<attempt-id>"}.`);
|
|
311
|
+
}
|
|
312
|
+
return attemptId;
|
|
313
|
+
};
|
|
314
|
+
const reclaimDockerRequestOwnership = async (optionsArg, journalArg, statusArg) => {
|
|
315
|
+
const attemptId = assertDockerRecoveryAttempt(statusArg, optionsArg.recoveryAttemptId);
|
|
316
|
+
await requireTsdocker(optionsArg).reclaimRequestFiles(getDockerRequestDirectory(optionsArg, journalArg), [attemptId]);
|
|
317
|
+
return attemptId;
|
|
318
|
+
};
|
|
319
|
+
const recoverRequestCleanupOutcome = async (optionsArg, journalArg, ownerIdArg, errorArg, assertResultArg) => {
|
|
320
|
+
if (!(errorArg instanceof TsdockerReleaseRequestCleanupError)) {
|
|
321
|
+
throw errorArg;
|
|
322
|
+
}
|
|
323
|
+
try {
|
|
324
|
+
await requireTsdocker(optionsArg).reclaimRequestFiles(getDockerRequestDirectory(optionsArg, journalArg), [ownerIdArg]);
|
|
325
|
+
}
|
|
326
|
+
catch (reclamationError) {
|
|
327
|
+
errorArg.reclamationError = reclamationError;
|
|
328
|
+
throw errorArg;
|
|
329
|
+
}
|
|
330
|
+
if (errorArg.result !== undefined) {
|
|
331
|
+
return assertResultArg(errorArg.result);
|
|
332
|
+
}
|
|
333
|
+
if (errorArg.commandError !== undefined) {
|
|
334
|
+
throw errorArg.commandError;
|
|
335
|
+
}
|
|
336
|
+
throw errorArg;
|
|
337
|
+
};
|
|
338
|
+
const finishDockerQualification = async (optionsArg, journalArg, resultArg, stateArg, errorArg) => {
|
|
339
|
+
const attemptId = journalArg.docker.qualification.attempt?.id;
|
|
340
|
+
if (!attemptId) {
|
|
341
|
+
throw new Error("Docker qualification has no active publication attempt.");
|
|
342
|
+
}
|
|
343
|
+
return (await optionsArg.store.transact(journalArg.release.version, journalArg.revision, (currentArg) => {
|
|
344
|
+
if (currentArg.schemaVersion !== 2) {
|
|
345
|
+
throw new Error("Docker qualification requires journal schema 2.");
|
|
346
|
+
}
|
|
347
|
+
const qualification = currentArg.docker.qualification;
|
|
348
|
+
if (qualification.state !== "publishing" ||
|
|
349
|
+
qualification.attempt?.id !== attemptId) {
|
|
350
|
+
throw new Error("Docker qualification ownership changed concurrently.");
|
|
351
|
+
}
|
|
352
|
+
qualification.state = stateArg;
|
|
353
|
+
qualification.attempt = null;
|
|
354
|
+
qualification.error = errorArg;
|
|
355
|
+
qualification.result = resultArg;
|
|
356
|
+
if (resultArg) {
|
|
357
|
+
currentArg.docker.promotions = createReleaseDockerPromotions(resultArg);
|
|
358
|
+
}
|
|
359
|
+
return finalizeJournalCompletion(currentArg);
|
|
360
|
+
}));
|
|
361
|
+
};
|
|
362
|
+
const finishDockerCleanup = async (optionsArg, journalArg, resultArg) => {
|
|
363
|
+
const attemptId = journalArg.docker.cleanup.attempt?.id;
|
|
364
|
+
if (!attemptId) {
|
|
365
|
+
throw new Error("Docker cleanup has no active publication attempt.");
|
|
366
|
+
}
|
|
367
|
+
return (await optionsArg.store.transact(journalArg.release.version, journalArg.revision, (currentArg) => {
|
|
368
|
+
if (currentArg.schemaVersion !== 2) {
|
|
369
|
+
throw new Error("Docker cleanup requires journal schema 2.");
|
|
370
|
+
}
|
|
371
|
+
const cleanup = currentArg.docker.cleanup;
|
|
372
|
+
if (cleanup.state !== "publishing" || cleanup.attempt?.id !== attemptId) {
|
|
373
|
+
throw new Error("Docker cleanup ownership changed concurrently.");
|
|
374
|
+
}
|
|
375
|
+
cleanup.state = "verified";
|
|
376
|
+
cleanup.attempt = null;
|
|
377
|
+
cleanup.error = null;
|
|
378
|
+
cleanup.result = resultArg;
|
|
379
|
+
return finalizeJournalCompletion(currentArg);
|
|
380
|
+
}));
|
|
381
|
+
};
|
|
382
|
+
const runClaimedDockerCleanup = async (optionsArg, journalArg) => {
|
|
383
|
+
const client = requireTsdocker(optionsArg);
|
|
384
|
+
const ownerId = journalArg.docker.cleanup.attempt?.id;
|
|
385
|
+
if (!ownerId) {
|
|
386
|
+
throw new Error("Docker cleanup has no active publication attempt.");
|
|
387
|
+
}
|
|
388
|
+
let result;
|
|
389
|
+
try {
|
|
390
|
+
result = await client.cleanup(journalArg.docker.request, getDockerRequestDirectory(optionsArg, journalArg), ownerId);
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
result = await recoverRequestCleanupOutcome(optionsArg, journalArg, ownerId, error, (valueArg) => assertReleaseCleanupResult(valueArg, journalArg.docker.request));
|
|
394
|
+
}
|
|
395
|
+
return finishDockerCleanup(optionsArg, journalArg, result);
|
|
396
|
+
};
|
|
397
|
+
const executeDockerCleanup = async (optionsArg, journalArg) => {
|
|
398
|
+
let journal = journalArg;
|
|
399
|
+
if (journal.docker.cleanup.state === "verified")
|
|
400
|
+
return journal;
|
|
401
|
+
const qualificationConflict = journal.docker.qualification.state === "conflict" &&
|
|
402
|
+
journal.docker.qualification.error === "destination-conflict" &&
|
|
403
|
+
journal.docker.promotions.length === 0;
|
|
404
|
+
const promotionsVerified = journal.docker.promotions.length > 0 &&
|
|
405
|
+
journal.docker.promotions.every((promotionArg) => promotionArg.state === "verified");
|
|
406
|
+
if (!qualificationConflict && !promotionsVerified) {
|
|
407
|
+
throw new Error("Docker candidate cleanup requires verified promotions or a terminal qualification conflict.");
|
|
408
|
+
}
|
|
409
|
+
if (journal.docker.cleanup.state === "publishing") {
|
|
410
|
+
await reclaimDockerRequestOwnership(optionsArg, journal, journal.docker.cleanup);
|
|
411
|
+
journal = (await finishPublishingTarget(optionsArg.store, journal, { kind: "docker-cleanup" }, "failed", "attempt-recovery-required"));
|
|
412
|
+
}
|
|
413
|
+
if (journal.docker.cleanup.state === "conflict") {
|
|
414
|
+
throw new Error("Docker cleanup is in conflict.");
|
|
415
|
+
}
|
|
416
|
+
if (!qualificationConflict) {
|
|
417
|
+
await optionsArg.ensurePublicationState(journal.release.mainOid);
|
|
418
|
+
}
|
|
419
|
+
journal = (await claimTarget(optionsArg.store, journal, {
|
|
420
|
+
kind: "docker-cleanup",
|
|
421
|
+
}));
|
|
422
|
+
return runClaimedDockerCleanup(optionsArg, journal);
|
|
423
|
+
};
|
|
424
|
+
const cleanupIncompleteQualificationPreparation = async (optionsArg, journalArg) => {
|
|
425
|
+
const ownerId = journalArg.docker.qualification.attempt?.id;
|
|
426
|
+
if (!ownerId) {
|
|
427
|
+
throw new Error("Docker qualification has no active publication attempt.");
|
|
428
|
+
}
|
|
429
|
+
const client = requireTsdocker(optionsArg);
|
|
430
|
+
try {
|
|
431
|
+
await client.cleanup(journalArg.docker.request, getDockerRequestDirectory(optionsArg, journalArg), ownerId);
|
|
432
|
+
}
|
|
433
|
+
catch (error) {
|
|
434
|
+
await recoverRequestCleanupOutcome(optionsArg, journalArg, ownerId, error, (valueArg) => assertReleaseCleanupResult(valueArg, journalArg.docker.request));
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
const runClaimedDockerQualification = async (optionsArg, journalArg, incompletePreparationCleanupAvailableArg) => {
|
|
438
|
+
const client = requireTsdocker(optionsArg);
|
|
439
|
+
const ownerId = journalArg.docker.qualification.attempt?.id;
|
|
440
|
+
if (!ownerId) {
|
|
441
|
+
throw new Error("Docker qualification has no active publication attempt.");
|
|
442
|
+
}
|
|
443
|
+
let result;
|
|
444
|
+
try {
|
|
445
|
+
result = await client.qualify(journalArg.docker.request, getDockerRequestDirectory(optionsArg, journalArg), ownerId);
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
try {
|
|
449
|
+
result = await recoverRequestCleanupOutcome(optionsArg, journalArg, ownerId, error, (valueArg) => assertReleaseQualificationResult(valueArg, journalArg.docker.request));
|
|
450
|
+
}
|
|
451
|
+
catch (commandError) {
|
|
452
|
+
if (commandError instanceof TsdockerReleaseCommandError &&
|
|
453
|
+
commandError.code === "DESTINATION_DIGEST_CONFLICT") {
|
|
454
|
+
return finishDockerQualification(optionsArg, journalArg, null, "conflict", "destination-conflict");
|
|
455
|
+
}
|
|
456
|
+
if (incompletePreparationCleanupAvailableArg &&
|
|
457
|
+
commandError instanceof TsdockerReleaseCommandError &&
|
|
458
|
+
commandError.code === "RECOVERY_REQUIRED") {
|
|
459
|
+
await cleanupIncompleteQualificationPreparation(optionsArg, journalArg);
|
|
460
|
+
let journal = (await finishPublishingTarget(optionsArg.store, journalArg, { kind: "docker-qualification" }, "failed", "attempt-recovery-required"));
|
|
461
|
+
journal = (await claimTarget(optionsArg.store, journal, {
|
|
462
|
+
kind: "docker-qualification",
|
|
463
|
+
}));
|
|
464
|
+
return runClaimedDockerQualification(optionsArg, journal, false);
|
|
465
|
+
}
|
|
466
|
+
throw commandError;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
return finishDockerQualification(optionsArg, journalArg, result, "verified", null);
|
|
470
|
+
};
|
|
471
|
+
const executeDockerQualification = async (optionsArg, journalArg) => {
|
|
472
|
+
let journal = journalArg;
|
|
473
|
+
if (journal.docker.qualification.state === "verified") {
|
|
474
|
+
return journal;
|
|
475
|
+
}
|
|
476
|
+
if (journal.docker.qualification.state === "conflict") {
|
|
477
|
+
await executeDockerCleanup(optionsArg, journal);
|
|
478
|
+
throw new Error("Docker qualification destination conflict is terminal; the candidate was cleaned and Git/npm publication was not attempted.");
|
|
479
|
+
}
|
|
480
|
+
if (journal.docker.qualification.state === "publishing") {
|
|
481
|
+
await reclaimDockerRequestOwnership(optionsArg, journal, journal.docker.qualification);
|
|
482
|
+
journal = (await finishPublishingTarget(optionsArg.store, journal, { kind: "docker-qualification" }, "failed", "attempt-recovery-required"));
|
|
483
|
+
}
|
|
484
|
+
await optionsArg.ensurePublicationState(journal.git.expectedRemoteMainOid || undefined);
|
|
485
|
+
journal = (await claimTarget(optionsArg.store, journal, {
|
|
486
|
+
kind: "docker-qualification",
|
|
487
|
+
}));
|
|
488
|
+
journal = await runClaimedDockerQualification(optionsArg, journal, true);
|
|
489
|
+
if (journal.docker.qualification.state === "conflict") {
|
|
490
|
+
await executeDockerCleanup(optionsArg, journal);
|
|
491
|
+
throw new Error("Docker qualification destination conflict is terminal; the candidate was cleaned and Git/npm publication was not attempted.");
|
|
492
|
+
}
|
|
493
|
+
return journal;
|
|
494
|
+
};
|
|
495
|
+
const recordDockerPromotion = async (optionsArg, journalArg, promotionIdArg, expectedStatesArg, expectedAttemptIdArg, stateArg, errorArg, evidenceArg) => (await optionsArg.store.transact(journalArg.release.version, journalArg.revision, (currentArg) => {
|
|
496
|
+
if (currentArg.schemaVersion !== 2) {
|
|
497
|
+
throw new Error("Docker promotion requires journal schema 2.");
|
|
498
|
+
}
|
|
499
|
+
const promotion = currentArg.docker.promotions.find((promotionArg) => promotionArg.promotionId === promotionIdArg);
|
|
500
|
+
if (!promotion ||
|
|
501
|
+
!expectedStatesArg.includes(promotion.state) ||
|
|
502
|
+
(promotion.attempt?.id || null) !== expectedAttemptIdArg) {
|
|
503
|
+
throw new Error("Docker promotion ownership changed concurrently.");
|
|
504
|
+
}
|
|
505
|
+
promotion.state = stateArg;
|
|
506
|
+
promotion.attempt = null;
|
|
507
|
+
promotion.error = errorArg;
|
|
508
|
+
if (evidenceArg)
|
|
509
|
+
promotion.evidence.push(evidenceArg);
|
|
510
|
+
return finalizeJournalCompletion(currentArg);
|
|
511
|
+
}));
|
|
512
|
+
const probeDockerPromotion = async (optionsArg, journalArg, promotionIdArg, ownerIdArg) => {
|
|
513
|
+
const context = getReleaseDockerPromotionContext(journalArg, promotionIdArg);
|
|
514
|
+
try {
|
|
515
|
+
return await requireTsdocker(optionsArg).probe(journalArg.docker.request, context, ownerIdArg
|
|
516
|
+
? getDockerRequestDirectory(optionsArg, journalArg)
|
|
517
|
+
: undefined, ownerIdArg);
|
|
518
|
+
}
|
|
519
|
+
catch (error) {
|
|
520
|
+
if (!ownerIdArg)
|
|
521
|
+
throw error;
|
|
522
|
+
return recoverRequestCleanupOutcome(optionsArg, journalArg, ownerIdArg, error, (valueArg) => assertReleaseProbeResult(valueArg, journalArg.docker.request, context));
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
const executeDockerPromotion = async (optionsArg, journalArg, promotionIdArg) => {
|
|
526
|
+
let journal = journalArg;
|
|
527
|
+
let promotion = journal.docker.promotions.find((promotionArg) => promotionArg.promotionId === promotionIdArg);
|
|
528
|
+
if (!promotion) {
|
|
529
|
+
throw new Error(`Docker promotion ${promotionIdArg} is not journaled.`);
|
|
530
|
+
}
|
|
531
|
+
if (promotion.state === "conflict") {
|
|
532
|
+
throw new Error(`Docker promotion ${promotionIdArg} is in conflict.`);
|
|
533
|
+
}
|
|
534
|
+
if (promotion.state === "verified") {
|
|
535
|
+
const probe = await probeDockerPromotion(optionsArg, journal, promotionIdArg);
|
|
536
|
+
const classification = classifyReleasePromotionEvidence(probe);
|
|
537
|
+
if (classification === "exact")
|
|
538
|
+
return journal;
|
|
539
|
+
if (classification === "inconclusive") {
|
|
540
|
+
throw new Error(`Previously verified Docker promotion cannot currently be verified: ${promotionIdArg}`);
|
|
541
|
+
}
|
|
542
|
+
await recordDockerPromotion(optionsArg, journal, promotionIdArg, ["verified"], null, "conflict", "destination-conflict", probe);
|
|
543
|
+
throw new Error(`Previously verified Docker promotion drifted: ${promotionIdArg}`);
|
|
544
|
+
}
|
|
545
|
+
let recoveredPublishingAttempt = false;
|
|
546
|
+
if (promotion.state === "publishing") {
|
|
547
|
+
await reclaimDockerRequestOwnership(optionsArg, journal, promotion);
|
|
548
|
+
recoveredPublishingAttempt = true;
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
await optionsArg.ensurePublicationState(journal.release.mainOid);
|
|
552
|
+
journal = (await claimTarget(optionsArg.store, journal, {
|
|
553
|
+
kind: "docker-promotion",
|
|
554
|
+
promotionId: promotionIdArg,
|
|
555
|
+
}));
|
|
556
|
+
promotion = journal.docker.promotions.find((promotionArg) => promotionArg.promotionId === promotionIdArg);
|
|
557
|
+
}
|
|
558
|
+
let attemptId = promotion.attempt?.id;
|
|
559
|
+
if (!attemptId) {
|
|
560
|
+
throw new Error("Docker promotion has no active publication attempt.");
|
|
561
|
+
}
|
|
562
|
+
let probe;
|
|
563
|
+
try {
|
|
564
|
+
probe = await probeDockerPromotion(optionsArg, journal, promotionIdArg, attemptId);
|
|
565
|
+
}
|
|
566
|
+
catch (error) {
|
|
567
|
+
throw error;
|
|
568
|
+
}
|
|
569
|
+
let classification = classifyReleasePromotionEvidence(probe);
|
|
570
|
+
if (classification === "exact") {
|
|
571
|
+
return recordDockerPromotion(optionsArg, journal, promotionIdArg, ["publishing"], attemptId, "verified", null, probe);
|
|
572
|
+
}
|
|
573
|
+
if (classification === "conflict") {
|
|
574
|
+
await recordDockerPromotion(optionsArg, journal, promotionIdArg, ["publishing"], attemptId, "conflict", "destination-conflict", probe);
|
|
575
|
+
throw new Error(`Docker promotion conflicted: ${promotionIdArg}`);
|
|
576
|
+
}
|
|
577
|
+
if (classification === "inconclusive") {
|
|
578
|
+
if (!recoveredPublishingAttempt) {
|
|
579
|
+
await recordDockerPromotion(optionsArg, journal, promotionIdArg, ["publishing"], attemptId, "failed", "verification-inconclusive");
|
|
580
|
+
}
|
|
581
|
+
throw new Error(`Docker promotion probe is inconclusive: ${promotionIdArg}`);
|
|
582
|
+
}
|
|
583
|
+
if (recoveredPublishingAttempt) {
|
|
584
|
+
journal = (await finishPublishingTarget(optionsArg.store, journal, { kind: "docker-promotion", promotionId: promotionIdArg }, "failed", "attempt-recovery-required"));
|
|
585
|
+
promotion = journal.docker.promotions.find((promotionArg) => promotionArg.promotionId === promotionIdArg);
|
|
586
|
+
await optionsArg.ensurePublicationState(journal.release.mainOid);
|
|
587
|
+
journal = (await claimTarget(optionsArg.store, journal, {
|
|
588
|
+
kind: "docker-promotion",
|
|
589
|
+
promotionId: promotionIdArg,
|
|
590
|
+
}));
|
|
591
|
+
promotion = journal.docker.promotions.find((promotionArg) => promotionArg.promotionId === promotionIdArg);
|
|
592
|
+
attemptId = promotion.attempt.id;
|
|
593
|
+
}
|
|
594
|
+
const context = getReleaseDockerPromotionContext(journal, promotionIdArg);
|
|
595
|
+
let result;
|
|
596
|
+
try {
|
|
597
|
+
result = await requireTsdocker(optionsArg).promote(journal.docker.request, context, getDockerRequestDirectory(optionsArg, journal), attemptId);
|
|
598
|
+
}
|
|
599
|
+
catch (error) {
|
|
600
|
+
let commandError = error;
|
|
601
|
+
if (error instanceof TsdockerReleaseRequestCleanupError) {
|
|
602
|
+
try {
|
|
603
|
+
result = await recoverRequestCleanupOutcome(optionsArg, journal, attemptId, error, (valueArg) => assertReleasePromotionResult(valueArg, journal.docker.request, context));
|
|
604
|
+
commandError = undefined;
|
|
605
|
+
}
|
|
606
|
+
catch (recoveredError) {
|
|
607
|
+
commandError = recoveredError;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
if (commandError instanceof TsdockerReleaseRequestCleanupError &&
|
|
611
|
+
commandError.reclamationError !== undefined) {
|
|
612
|
+
throw commandError;
|
|
613
|
+
}
|
|
614
|
+
if (commandError === undefined) {
|
|
615
|
+
classification = classifyReleasePromotionEvidence(result);
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
try {
|
|
619
|
+
const reconciliation = await probeDockerPromotion(optionsArg, journal, promotionIdArg, attemptId);
|
|
620
|
+
const reconciled = classifyReleasePromotionEvidence(reconciliation);
|
|
621
|
+
if (reconciled === "exact") {
|
|
622
|
+
return recordDockerPromotion(optionsArg, journal, promotionIdArg, ["publishing"], attemptId, "verified", null, reconciliation);
|
|
623
|
+
}
|
|
624
|
+
if (reconciled === "conflict") {
|
|
625
|
+
await recordDockerPromotion(optionsArg, journal, promotionIdArg, ["publishing"], attemptId, "conflict", "destination-conflict", reconciliation);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
catch {
|
|
629
|
+
// Preserve publishing ownership when post-command reconciliation is unavailable.
|
|
630
|
+
}
|
|
631
|
+
throw commandError;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
classification = classifyReleasePromotionEvidence(result);
|
|
635
|
+
if (classification === "exact") {
|
|
636
|
+
return recordDockerPromotion(optionsArg, journal, promotionIdArg, ["publishing"], attemptId, "verified", null, result);
|
|
637
|
+
}
|
|
638
|
+
if (classification === "conflict") {
|
|
639
|
+
await recordDockerPromotion(optionsArg, journal, promotionIdArg, ["publishing"], attemptId, "conflict", "destination-conflict", result);
|
|
640
|
+
throw new Error(`Docker promotion conflicted: ${promotionIdArg}`);
|
|
641
|
+
}
|
|
642
|
+
throw new Error(`Docker promotion outcome is inconclusive: ${promotionIdArg}`);
|
|
643
|
+
};
|
|
281
644
|
export const executeReleasePublication = async (optionsArg) => {
|
|
282
645
|
let journal = optionsArg.journal;
|
|
646
|
+
if (journal.schemaVersion === 2) {
|
|
647
|
+
journal = await executeDockerQualification(optionsArg, journal);
|
|
648
|
+
}
|
|
283
649
|
journal = await executeGitTarget(optionsArg, journal);
|
|
284
650
|
const expectedRemoteMainOid = journal.git.state === "verified"
|
|
285
651
|
? journal.release.mainOid
|
|
@@ -288,6 +654,13 @@ export const executeReleasePublication = async (optionsArg) => {
|
|
|
288
654
|
await optionsArg.ensurePublicationState(expectedRemoteMainOid);
|
|
289
655
|
journal = await executeNpmRegistry(optionsArg, journal, registry.registry);
|
|
290
656
|
}
|
|
657
|
+
if (journal.schemaVersion === 2 &&
|
|
658
|
+
journal.docker.cleanup.state !== "verified") {
|
|
659
|
+
for (const promotion of journal.docker.promotions) {
|
|
660
|
+
journal = await executeDockerPromotion(optionsArg, journal, promotion.promotionId);
|
|
661
|
+
}
|
|
662
|
+
journal = await executeDockerCleanup(optionsArg, journal);
|
|
663
|
+
}
|
|
291
664
|
return journal;
|
|
292
665
|
};
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5yZWxlYXNlcHVibGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfcmVsZWFzZS9oZWxwZXJzLnJlbGVhc2VwdWJsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHlCQUF5QixHQUsxQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QiwyQkFBMkIsR0FHNUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBWXBDLE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsVUFBMkM7SUFFM0MsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQzlCLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsSUFBSSxDQUNYLEdBQUcsVUFBVSxDQUFDLE1BQU0sZUFBZSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQzNELENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUMxQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxV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
|
|
666
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5yZWxlYXNlcHVibGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb2RfcmVsZWFzZS9oZWxwZXJzLnJlbGVhc2VwdWJsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLDZCQUE2QixFQUM3Qix5QkFBeUIsRUFDekIsZ0NBQWdDLEdBTWpDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLDJCQUEyQixHQUc1QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGtDQUFrQyxFQUNsQywwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1QixnQ0FBZ0MsRUFDaEMsZ0NBQWdDLEdBSWpDLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBWXBDLE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsVUFBMkM7SUFFM0MsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQzlCLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sZUFBZSxVQUFVLENBQUMsVUFBVSxF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
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as plugins from "./mod.plugins.js";
|
|
2
|
+
import type { IReleaseCapabilitiesResult, IReleaseCleanupResult, IReleaseDestinationEvidence, IReleaseProbeResult, IReleasePromotionContext, IReleasePromotionResult, IReleaseQualificationRequest, IReleaseQualificationResult, IReleaseValidationResult, TReleasePromotionEvidence, TReleaseProtocolCommand } from "./mod.plugins.js";
|
|
3
|
+
export type { IReleaseCapabilitiesResult, IReleaseCleanupResult, IReleaseDestinationEvidence, IReleaseProbeResult, IReleasePromotionContext, IReleasePromotionResult, IReleaseQualificationRequest, IReleaseQualificationResult, IReleaseValidationResult, TReleasePromotionEvidence, TReleaseProtocolCommand, } from "./mod.plugins.js";
|
|
4
|
+
export declare const assertReleaseCleanupResult: (valueArg: unknown, requestArg: Pick<IReleaseQualificationRequest, "candidateId" | "projectId">) => IReleaseCleanupResult;
|
|
5
|
+
export declare const assertReleasePromotionEvidence: (valueArg: unknown, requestArg: IReleaseQualificationRequest, contextArg: IReleasePromotionContext) => TReleasePromotionEvidence;
|
|
6
|
+
export declare const assertReleaseProbeResult: (valueArg: unknown, requestArg: IReleaseQualificationRequest, contextArg: IReleasePromotionContext) => IReleaseProbeResult;
|
|
7
|
+
export declare const assertReleasePromotionResult: (valueArg: unknown, requestArg: IReleaseQualificationRequest, contextArg: IReleasePromotionContext) => IReleasePromotionResult;
|
|
8
|
+
export declare const assertReleaseQualificationRequest: (valueArg: unknown) => IReleaseQualificationRequest;
|
|
9
|
+
export declare const assertReleaseQualificationResult: (valueArg: unknown, requestArg: IReleaseQualificationRequest) => IReleaseQualificationResult;
|
|
10
|
+
export declare const canonicalReleaseJson: (valueArg: unknown) => string;
|
|
11
|
+
export declare const canonicalReleaseJsonDocument: (valueArg: unknown) => string;
|
|
12
|
+
export declare const classifyReleasePromotionEvidence: (evidenceArg: TReleasePromotionEvidence) => "exact" | "pending" | "conflict" | "inconclusive";
|
|
13
|
+
export declare const createReleaseProjectId: (cwdArg: string) => string;
|
|
14
|
+
export declare const createReleasePromotionId: (candidateIdArg: string, imageIdArg: string, destinationArg: Pick<IReleaseDestinationEvidence, "registry" | "repository" | "alias">) => string;
|
|
15
|
+
export declare const createReleaseQualificationRequest: (optionsArg: import("@git.zone/tsdocker/dist_ts/interfaces/index.js").ICreateReleaseQualificationRequestOptions) => IReleaseQualificationRequest;
|
|
16
|
+
export declare const getReleasePromotionContexts: (resultArg: IReleaseQualificationResult) => IReleasePromotionContext[];
|
|
17
|
+
export declare class TsdockerReleaseCommandError extends Error {
|
|
18
|
+
readonly command: TReleaseProtocolCommand;
|
|
19
|
+
readonly code: string;
|
|
20
|
+
constructor(command: TReleaseProtocolCommand, code: string, messageArg: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class TsdockerReleaseRequestCleanupError extends Error {
|
|
23
|
+
readonly command: TReleaseProtocolCommand;
|
|
24
|
+
readonly requestPath: string;
|
|
25
|
+
readonly commandError: unknown | undefined;
|
|
26
|
+
readonly result: unknown | undefined;
|
|
27
|
+
readonly cleanupError: unknown;
|
|
28
|
+
reclamationError: unknown | undefined;
|
|
29
|
+
constructor(command: TReleaseProtocolCommand, requestPath: string, commandError: unknown | undefined, result: unknown | undefined, cleanupError: unknown);
|
|
30
|
+
}
|
|
31
|
+
export interface ITsdockerReleaseClient {
|
|
32
|
+
assertCapabilities: () => Promise<IReleaseCapabilitiesResult>;
|
|
33
|
+
validate: (requestArg: IReleaseQualificationRequest, requestDirectoryArg?: string) => Promise<IReleaseValidationResult>;
|
|
34
|
+
qualify: (requestArg: IReleaseQualificationRequest, requestDirectoryArg: string, requestOwnerIdArg: string) => Promise<IReleaseQualificationResult>;
|
|
35
|
+
probe: (requestArg: IReleaseQualificationRequest, contextArg: IReleasePromotionContext, requestDirectoryArg?: string, requestOwnerIdArg?: string) => Promise<IReleaseProbeResult>;
|
|
36
|
+
promote: (requestArg: IReleaseQualificationRequest, contextArg: IReleasePromotionContext, requestDirectoryArg: string, requestOwnerIdArg: string) => Promise<IReleasePromotionResult>;
|
|
37
|
+
cleanup: (requestArg: IReleaseQualificationRequest, requestDirectoryArg: string, requestOwnerIdArg: string) => Promise<IReleaseCleanupResult>;
|
|
38
|
+
reclaimRequestFiles: (requestDirectoryArg: string, retiredOwnerIdsArg: string[]) => Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export declare class TsdockerReleaseClient implements ITsdockerReleaseClient {
|
|
41
|
+
private readonly smartshell;
|
|
42
|
+
private readonly binaryPath;
|
|
43
|
+
private readonly cwd;
|
|
44
|
+
private readonly packageJsonPath;
|
|
45
|
+
constructor(smartshell: plugins.smartshell.Smartshell, cwdArg: string);
|
|
46
|
+
assertCapabilities(): Promise<IReleaseCapabilitiesResult>;
|
|
47
|
+
validate(requestArg: IReleaseQualificationRequest, requestDirectoryArg?: string): Promise<IReleaseValidationResult>;
|
|
48
|
+
qualify(requestArg: IReleaseQualificationRequest, requestDirectoryArg: string, requestOwnerIdArg: string): Promise<IReleaseQualificationResult>;
|
|
49
|
+
probe(requestArg: IReleaseQualificationRequest, contextArg: IReleasePromotionContext, requestDirectoryArg?: string, requestOwnerIdArg?: string): Promise<IReleaseProbeResult>;
|
|
50
|
+
promote(requestArg: IReleaseQualificationRequest, contextArg: IReleasePromotionContext, requestDirectoryArg: string, requestOwnerIdArg: string): Promise<IReleasePromotionResult>;
|
|
51
|
+
cleanup(requestArg: IReleaseQualificationRequest, requestDirectoryArg: string, requestOwnerIdArg: string): Promise<IReleaseCleanupResult>;
|
|
52
|
+
reclaimRequestFiles(requestDirectoryArg: string, retiredOwnerIdsArg: string[]): Promise<void>;
|
|
53
|
+
private readInstalledVersion;
|
|
54
|
+
private assertRequestForProject;
|
|
55
|
+
private assertPromotionInvocation;
|
|
56
|
+
private createPromotionRequest;
|
|
57
|
+
private assertRequestDirectory;
|
|
58
|
+
private runWithTemporaryRequestDirectory;
|
|
59
|
+
private run;
|
|
60
|
+
}
|