@mutmutco/cli 4.5.131 → 4.5.133
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/main.cjs +29 -13
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -18274,10 +18274,10 @@ var rollout_plan_default = {
|
|
|
18274
18274
|
note: "The v4.0.0 stamp happens at cut time (D6e #4463); until then the candidate is the origin/development head artifacts (built cli/dist + npm pack), identity proven by dist content hash (D6a)."
|
|
18275
18275
|
},
|
|
18276
18276
|
baseline: {
|
|
18277
|
-
version: "4.5.
|
|
18278
|
-
tag: "v4.5.
|
|
18279
|
-
commit: "
|
|
18280
|
-
npm: "@mutmutco/cli@4.5.
|
|
18277
|
+
version: "4.5.133",
|
|
18278
|
+
tag: "v4.5.133",
|
|
18279
|
+
commit: "1b86fb08bbf0",
|
|
18280
|
+
npm: "@mutmutco/cli@4.5.133"
|
|
18281
18281
|
},
|
|
18282
18282
|
exitCriterion: "fleet-n-of-n",
|
|
18283
18283
|
hubOnlyShortcut: "forbidden",
|
|
@@ -18294,14 +18294,14 @@ var rollout_plan_default = {
|
|
|
18294
18294
|
repo: "mutmutco/mmi-hub",
|
|
18295
18295
|
role: "canary",
|
|
18296
18296
|
schedule: "train",
|
|
18297
|
-
v3Target: "v4.5.
|
|
18297
|
+
v3Target: "v4.5.133"
|
|
18298
18298
|
}
|
|
18299
18299
|
],
|
|
18300
18300
|
rollbackTrigger: "Any red inside the post-contract soak window: `devops train gate` FAIL attributable to the v4 doors, Hub endpoint health probe failure, a pre-v4 client admitted instead of receiving actionable HTTP 426, or npm consumer install/doctor failure on the v4-only dist.",
|
|
18301
18301
|
rollback: {
|
|
18302
18302
|
independent: true,
|
|
18303
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
18304
|
-
v3Target: "v4.5.
|
|
18303
|
+
mechanism: "npm dist-tag latest -> 4.5.133 and redeploy the Hub Lambda from tag v4.5.133 (1b86fb08bbf0); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
18304
|
+
v3Target: "v4.5.133 (@mutmutco/cli@4.5.133, tag commit 1b86fb08bbf0 \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
18305
18305
|
}
|
|
18306
18306
|
},
|
|
18307
18307
|
{
|
|
@@ -22897,6 +22897,15 @@ Resume it: ${resumeCommand}
|
|
|
22897
22897
|
function preOneZeroInForce(meta) {
|
|
22898
22898
|
return !!meta?.suite && meta.preOneZero !== false;
|
|
22899
22899
|
}
|
|
22900
|
+
function assertSuiteAutoVersion(repo, meta, env, namesRcCycle) {
|
|
22901
|
+
if (!meta?.suite) return;
|
|
22902
|
+
const intent = (env.MMI_BUMP_INTENT ?? "").trim();
|
|
22903
|
+
const target = (env.MMI_RELEASE_VERSION ?? "").trim();
|
|
22904
|
+
const hand = intent && intent !== "patch" ? `MMI_BUMP_INTENT=${intent}` : target && !namesRcCycle ? `MMI_RELEASE_VERSION=${target}` : "";
|
|
22905
|
+
if (hand) {
|
|
22906
|
+
throw new Error(`${repo} is a ${meta.suite} suite project: its versions auto-mint as the next patch and carry no meaning (#8224). Unset ${hand}. For a big change, release with \`suite release --owner-go --revamp ${repo}\`.`);
|
|
22907
|
+
}
|
|
22908
|
+
}
|
|
22900
22909
|
function assertPreOneZero(repo, meta, tag) {
|
|
22901
22910
|
if (preOneZeroInForce(meta) && /^v?[1-9]\d*\./.test(tag)) {
|
|
22902
22911
|
throw new Error(`${repo} is a ${meta.suite} suite member held on 0.x.y; ${tag} would be major >= 1. Only the owner lifts this: set registry META preOneZero to false. If the tag came from a stale scripts/next-version.mjs, propagate the current seed first (#7699).`);
|
|
@@ -28676,6 +28685,7 @@ async function runTrainApplyLocked(command, deps, options = {}) {
|
|
|
28676
28685
|
const bumpIntent = await resolveTrainBumpIntent(deps, process.env, void 0, preOneZeroInForce(meta));
|
|
28677
28686
|
const branchHints = await loadReleaseTrackBranchHints(deps);
|
|
28678
28687
|
const directTrack = isHubControlRepo(ctx.repo) || resolveReleaseTrack(meta, branchHints) === "direct";
|
|
28688
|
+
assertSuiteAutoVersion(ctx.repo, meta, process.env, command === "release" && !directTrack);
|
|
28679
28689
|
if (command === "release" && meta.suite === "mm-work") await requireSuiteReleaseSummary(deps, options.announceSummaryFile);
|
|
28680
28690
|
const pipelineInput = { deps, ctx, command, meta, branchHints, watch, options, bumpIntent };
|
|
28681
28691
|
if (command === "rcand") {
|
|
@@ -37539,10 +37549,13 @@ ${failures.join("\n")}`);
|
|
|
37539
37549
|
await reapplyRulesets(deps, record, "rc");
|
|
37540
37550
|
return { plan, record };
|
|
37541
37551
|
}
|
|
37542
|
-
async function suiteRelease(deps, ownerGo,
|
|
37552
|
+
async function suiteRelease(deps, ownerGo, revamp = []) {
|
|
37543
37553
|
if (!ownerGo) throw new Error("suite release requires --owner-go; nothing was written");
|
|
37544
37554
|
const record = readSuiteCut(deps.recordPath);
|
|
37545
37555
|
if (!record?.pinMerged || !record.leadRcTag) throw new Error("no completed suite rc cut and merged pin PR; release refused");
|
|
37556
|
+
const isRevamp = (repo) => revamp.some((r) => r.toLowerCase() === repo.toLowerCase());
|
|
37557
|
+
const unknown = revamp.filter((r) => r.toLowerCase() !== SUITE_REPO.toLowerCase() && !record.members.some((m) => m.repo.toLowerCase() === r.toLowerCase()));
|
|
37558
|
+
if (unknown.length) throw new Error(`--revamp names repos outside this cut: ${unknown.join(", ")}; nothing was written`);
|
|
37546
37559
|
const members = trainModules(suiteMembers(await deps.registry()));
|
|
37547
37560
|
const { active, held } = await holdSplit(deps, members);
|
|
37548
37561
|
if (!heldMatches(record.heldMembers ?? [], held)) throw new Error("suite hold changed after the cut; release refused");
|
|
@@ -37596,7 +37609,7 @@ Each member's live release must serve <data>/main/module.js at its main pin path
|
|
|
37596
37609
|
console.warn(`${member.repo}: released as ${member.releasedAs ?? suiteReleaseTag(member.tag)} and hotfixed to ${member.hotfixedTo}, which is live; recorded as released (#7482)`);
|
|
37597
37610
|
} else {
|
|
37598
37611
|
if (member.releasedAs && member.releasedAs !== suiteReleaseTag(member.tag)) console.warn(`${member.repo}: its rc already shipped as ${member.releasedAs}, not ${suiteReleaseTag(member.tag)}; finishing that release (#7464)`);
|
|
37599
|
-
await deps.release(member.repo, member.releasedAs ?? suiteReleaseTag(member.tag), member.sha, { suiteTag: suiteReleaseTag(record.leadRcTag) });
|
|
37612
|
+
await deps.release(member.repo, member.releasedAs ?? suiteReleaseTag(member.tag), member.sha, { suiteTag: suiteReleaseTag(record.leadRcTag), ...isRevamp(member.repo) ? { big: true } : {} });
|
|
37600
37613
|
}
|
|
37601
37614
|
member.released = true;
|
|
37602
37615
|
writeSuiteCut(deps.recordPath, record);
|
|
@@ -37609,7 +37622,7 @@ Each member's live release must serve <data>/main/module.js at its main pin path
|
|
|
37609
37622
|
}
|
|
37610
37623
|
await reapplyRulesets(deps, record, "main");
|
|
37611
37624
|
if (!record.leadReleased) {
|
|
37612
|
-
await deps.release(SUITE_REPO, suiteReleaseTag(record.leadRcTag), record.leadRcSha, { big });
|
|
37625
|
+
await deps.release(SUITE_REPO, suiteReleaseTag(record.leadRcTag), record.leadRcSha, { big: isRevamp(SUITE_REPO) });
|
|
37613
37626
|
record.leadReleased = true;
|
|
37614
37627
|
writeSuiteCut(deps.recordPath, record);
|
|
37615
37628
|
}
|
|
@@ -47910,7 +47923,7 @@ function registerTrainOperationsCommands(program3, runProjectInfoSyncCallback) {
|
|
|
47910
47923
|
{ flags: "--supersede-deploy", description: "with --apply, master-approved closure of a content-caused failed deploy leg on a PUBLISHED release whose immutable tag can never deploy green \u2014 the next patch train then carries the fix (#6553); combined with --supersede-publish it closes BOTH content-caused legs in one approved closure (#6752)" },
|
|
47911
47924
|
{ flags: "--supersede-publish", description: "with --apply, master-approved closure of a content-caused failed publish leg on a fully PROMOTED release whose immutable tag can never publish green \u2014 a deferred Jerv-Hub operator-host Gateway deploy leg is run and verified as part of the closure \u2014 the next patch train then carries the fix (#6638/#6742); combined with --supersede-deploy it closes BOTH content-caused legs in one approved closure (#6752)" },
|
|
47912
47925
|
{ flags: "--retry-publish <run-id>", description: "with --apply, retry one proven failed or cancelled Hub publish release run (#3949/#5797)" },
|
|
47913
|
-
{ flags: "--big", description: "marks this release
|
|
47926
|
+
{ flags: "--big", description: "marks this release an owner-approved revamp in the mm-work suite `## In plain words` section (#7510); the only big signal, since suite versions carry no meaning (#8224); requires --owner-go" }
|
|
47914
47927
|
];
|
|
47915
47928
|
for (const f of RELEASE_ONLY_FLAGS) {
|
|
47916
47929
|
if (commandName === "release") {
|
|
@@ -47945,6 +47958,9 @@ function registerTrainOperationsCommands(program3, runProjectInfoSyncCallback) {
|
|
|
47945
47958
|
if (o.big && commandName !== "release") {
|
|
47946
47959
|
return fail(`${commandName}: --big applies only to release \u2014 it marks the mm-work suite plain-words section, which only a Release carries. Run: mmi-cli devops release --big`);
|
|
47947
47960
|
}
|
|
47961
|
+
if (o.big && !o.ownerGo) {
|
|
47962
|
+
return fail(`${commandName}: --big marks an owner-approved revamp and requires --owner-go (#8224)`);
|
|
47963
|
+
}
|
|
47948
47964
|
if (o.abort && commandName !== "release") {
|
|
47949
47965
|
return fail(`${commandName}: --abort applies only to release \u2014 it rolls back a proven unpublished release tag. Run: mmi-cli devops release --abort --apply`);
|
|
47950
47966
|
}
|
|
@@ -48973,7 +48989,7 @@ function registerSuiteCommands(program3) {
|
|
|
48973
48989
|
return fail(`suite abandon: ${e.message}`);
|
|
48974
48990
|
}
|
|
48975
48991
|
});
|
|
48976
|
-
suite.command("release").description("verify the cut and unchanged live backends, ship members then MM-Work, announce once").option("--owner-go", "explicit owner approval to release the tested candidate").option("--announce-summary-file <path>", "curated suite announcement, posted once after the train; also this cut's plain-words summary for MM-Work itself").option("--member-summary-file <owner/repo=path>", "repeatable: required title + 2\u20135 notes for each member being released; carried members need none", (val, prev = []) => [...prev, val], []).option("--announce-summary-file-tr <path>", "Turkish plain-words summary for MM-Work itself").option("--member-summary-file-tr <owner/repo=path>", "repeatable: a member's own Turkish plain-words summary", (val, prev = []) => [...prev, val], []).option("--
|
|
48992
|
+
suite.command("release").description("verify the cut and unchanged live backends, ship members then MM-Work, announce once").option("--owner-go", "explicit owner approval to release the tested candidate").option("--announce-summary-file <path>", "curated suite announcement, posted once after the train; also this cut's plain-words summary for MM-Work itself").option("--member-summary-file <owner/repo=path>", "repeatable: required title + 2\u20135 notes for each member being released; carried members need none", (val, prev = []) => [...prev, val], []).option("--announce-summary-file-tr <path>", "Turkish plain-words summary for MM-Work itself").option("--member-summary-file-tr <owner/repo=path>", "repeatable: a member's own Turkish plain-words summary", (val, prev = []) => [...prev, val], []).option("--revamp <owner/repo>", `repeatable: marks that repo's release an owner-approved revamp in the plain-words section \u2014 the only "big" signal; versions carry no meaning (#8224)`, (val, prev = []) => [...prev, val], []).option("--big", "alias for --revamp mutmutco/MM-Work (#7510)").option("--json", "structured receipt").action(async (o) => {
|
|
48977
48993
|
try {
|
|
48978
48994
|
if (!o.ownerGo) throw new Error("suite release requires --owner-go; nothing was written");
|
|
48979
48995
|
const memberSummaryFiles = parseMemberSummaryFiles(o.memberSummaryFile ?? []);
|
|
@@ -48982,7 +48998,7 @@ function registerSuiteCommands(program3) {
|
|
|
48982
48998
|
const unlock = await acquireTrainWriterLock(root, "suite release");
|
|
48983
48999
|
let result;
|
|
48984
49000
|
try {
|
|
48985
|
-
result = await suiteRelease(suiteTrainIo(root, o.announceSummaryFile, memberSummaryFiles, o.announceSummaryFileTr, memberSummaryFilesTr), true, o.big
|
|
49001
|
+
result = await suiteRelease(suiteTrainIo(root, o.announceSummaryFile, memberSummaryFiles, o.announceSummaryFileTr, memberSummaryFilesTr), true, [...o.revamp ?? [], ...o.big ? ["mutmutco/MM-Work"] : []]);
|
|
48986
49002
|
} finally {
|
|
48987
49003
|
await unlock();
|
|
48988
49004
|
}
|
package/package.json
CHANGED