@mutmutco/cli 4.5.218 → 4.5.220
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 +19 -10
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -27056,10 +27056,10 @@ var rollout_plan_default = {
|
|
|
27056
27056
|
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)."
|
|
27057
27057
|
},
|
|
27058
27058
|
baseline: {
|
|
27059
|
-
version: "4.5.
|
|
27060
|
-
tag: "v4.5.
|
|
27061
|
-
commit: "
|
|
27062
|
-
npm: "@mutmutco/cli@4.5.
|
|
27059
|
+
version: "4.5.220",
|
|
27060
|
+
tag: "v4.5.220",
|
|
27061
|
+
commit: "0a675c7c17a2",
|
|
27062
|
+
npm: "@mutmutco/cli@4.5.220"
|
|
27063
27063
|
},
|
|
27064
27064
|
exitCriterion: "fleet-n-of-n",
|
|
27065
27065
|
hubOnlyShortcut: "forbidden",
|
|
@@ -27076,14 +27076,14 @@ var rollout_plan_default = {
|
|
|
27076
27076
|
repo: "mutmutco/mmi-hub",
|
|
27077
27077
|
role: "canary",
|
|
27078
27078
|
schedule: "train",
|
|
27079
|
-
v3Target: "v4.5.
|
|
27079
|
+
v3Target: "v4.5.220"
|
|
27080
27080
|
}
|
|
27081
27081
|
],
|
|
27082
27082
|
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.",
|
|
27083
27083
|
rollback: {
|
|
27084
27084
|
independent: true,
|
|
27085
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
27086
|
-
v3Target: "v4.5.
|
|
27085
|
+
mechanism: "npm dist-tag latest -> 4.5.220 and redeploy the Hub Lambda from tag v4.5.220 (0a675c7c17a2); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
27086
|
+
v3Target: "v4.5.220 (@mutmutco/cli@4.5.220, tag commit 0a675c7c17a2 \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
27087
27087
|
}
|
|
27088
27088
|
},
|
|
27089
27089
|
{
|
|
@@ -46641,6 +46641,7 @@ function suiteMembers(raw) {
|
|
|
46641
46641
|
for (const item of raw) {
|
|
46642
46642
|
if (!item || typeof item !== "object") throw new Error("invalid MM-Work module registry row");
|
|
46643
46643
|
const row = item;
|
|
46644
|
+
if (row.repository === void 0 && row.bundles === void 0) continue;
|
|
46644
46645
|
const repo = typeof row.repository === "string" && /^[\w.-]+\/[\w.-]+$/.test(row.repository) ? row.repository : typeof row.id === "string" ? REPOS[row.id] : void 0;
|
|
46645
46646
|
if (!repo || !row.bundles || typeof row.bundles !== "object") throw new Error(`unknown MM-Work module registry id: ${String(row.id)}`);
|
|
46646
46647
|
members.push({ repo, id: row.id, bundles: row.bundles });
|
|
@@ -47100,6 +47101,10 @@ async function suiteRcandRun(deps, opts) {
|
|
|
47100
47101
|
if (opts.dryRun) {
|
|
47101
47102
|
const existing = readSuiteCut(deps.recordPath);
|
|
47102
47103
|
if (existing) plan.push(`existing cut record: ${deps.recordPath} (${existingCutDescription(existing)})`);
|
|
47104
|
+
if (existing && !existing.leadReleased && (existing.pinPr || existing.leadRcTag || existing.members.some((m) => m.tag))) {
|
|
47105
|
+
const why = !heldMatches(existing.heldMembers ?? [], held) ? "suite hold changed since cut began" : existing.members.length !== active.length || active.some((m) => !existing.members.some((r) => r.repo === m.repo && r.id === m.id)) ? "suite roster changed since cut began" : "";
|
|
47106
|
+
if (why) plan.push(`the real run resumes that record and refuses (${why}); retire it first with mmi-cli devops suite abandon --owner-go`);
|
|
47107
|
+
}
|
|
47103
47108
|
plan.push(...await Promise.all(modules.map(async (m) => `${m.repo}: ${heldById.has(m.id) ? "HELD" : await dryRunStatus(deps, m)}`)));
|
|
47104
47109
|
return { plan };
|
|
47105
47110
|
}
|
|
@@ -58805,9 +58810,9 @@ function suiteTrainIo(root, summaryFile, memberSummaryFiles = {}, summaryFileTr,
|
|
|
58805
58810
|
bundleKit: async (url) => {
|
|
58806
58811
|
try {
|
|
58807
58812
|
const res = await fetch(url, { signal: AbortSignal.timeout(GH_TIMEOUT) });
|
|
58808
|
-
return res.ok ? kitFromBundle(await res.text()) :
|
|
58813
|
+
return res.ok ? kitFromBundle(await res.text()) : `unreadable (HTTP ${res.status})`;
|
|
58809
58814
|
} catch {
|
|
58810
|
-
return
|
|
58815
|
+
return "unreadable (unreachable)";
|
|
58811
58816
|
}
|
|
58812
58817
|
},
|
|
58813
58818
|
// #7738: a member hotfixes as suite-solo; the lead hotfixes under its suite-lead capability (inTrain sets it).
|
|
@@ -62379,7 +62384,11 @@ async function readRunLog(id, o, runner) {
|
|
|
62379
62384
|
const jobs = pages.flatMap((page) => page.jobs);
|
|
62380
62385
|
const selected = jobs.filter((job) => jobName === void 0 ? FAILED2.has(job.conclusion ?? "") : job.name === jobName);
|
|
62381
62386
|
const result = { runId, repo, jobs: [] };
|
|
62382
|
-
if (!selected.length) return { result, exitCode: 1, message: `read run log: no matching job for run ${runId} in ${repo}; conclusions seen: ${[...new Set(jobs.map((j) => j.conclusion ?? "pending"))].join(", ") || "none"}` };
|
|
62387
|
+
if (!selected.length && jobName === void 0) return { result, exitCode: 1, message: `read run log: no matching job for run ${runId} in ${repo}; conclusions seen: ${[...new Set(jobs.map((j) => j.conclusion ?? "pending"))].join(", ") || "none"}` };
|
|
62388
|
+
if (!selected.length) {
|
|
62389
|
+
const listed = jobs.slice(0, 30).map((j) => `${j.name} (${j.id})`).join(", ");
|
|
62390
|
+
return { result, exitCode: 1, message: `read run log: --job takes the exact job name, not its id; jobs in run ${runId}: ${listed || "none"}${jobs.length > 30 ? `, \u2026+${jobs.length - 30} more` : ""}` };
|
|
62391
|
+
}
|
|
62383
62392
|
for (const job of selected) {
|
|
62384
62393
|
const text = await readAppApi(`repos/${repo}/actions/jobs/${parseBrokerId(String(job.id), "job id")}/logs`, runner);
|
|
62385
62394
|
result.jobs.push({ id: job.id, name: job.name, conclusion: job.conclusion, failedStep: job.steps?.find((s) => s.conclusion === "failure")?.name ?? null, ...sliceRunLog(text, tail) });
|
package/package.json
CHANGED