@mutmutco/cli 4.5.50 → 4.5.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.cjs +18 -9
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -17043,10 +17043,10 @@ var rollout_plan_default = {
17043
17043
  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)."
17044
17044
  },
17045
17045
  baseline: {
17046
- version: "4.5.50",
17047
- tag: "v4.5.50",
17048
- commit: "e6da6b845206",
17049
- npm: "@mutmutco/cli@4.5.50"
17046
+ version: "4.5.51",
17047
+ tag: "v4.5.51",
17048
+ commit: "401873b965ce",
17049
+ npm: "@mutmutco/cli@4.5.51"
17050
17050
  },
17051
17051
  exitCriterion: "fleet-n-of-n",
17052
17052
  hubOnlyShortcut: "forbidden",
@@ -17063,14 +17063,14 @@ var rollout_plan_default = {
17063
17063
  repo: "mutmutco/mmi-hub",
17064
17064
  role: "canary",
17065
17065
  schedule: "train",
17066
- v3Target: "v4.5.50"
17066
+ v3Target: "v4.5.51"
17067
17067
  }
17068
17068
  ],
17069
17069
  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.",
17070
17070
  rollback: {
17071
17071
  independent: true,
17072
- mechanism: "npm dist-tag latest -> 4.5.50 and redeploy the Hub Lambda from tag v4.5.50 (e6da6b845206); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17073
- v3Target: "v4.5.50 (@mutmutco/cli@4.5.50, tag commit e6da6b845206 \u2014 last known-good release carrying the repo-index v4-only contract)"
17072
+ mechanism: "npm dist-tag latest -> 4.5.51 and redeploy the Hub Lambda from tag v4.5.51 (401873b965ce); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17073
+ v3Target: "v4.5.51 (@mutmutco/cli@4.5.51, tag commit 401873b965ce \u2014 last known-good release carrying the repo-index v4-only contract)"
17074
17074
  }
17075
17075
  },
17076
17076
  {
@@ -35113,7 +35113,7 @@ async function carriedPins(deps, member, bundles) {
35113
35113
  }
35114
35114
  throw new Error(`${member.repo}: nothing new since rc, but no pinned MM-Work bundle carries development ${member.development.slice(0, 12)}; pin it before the suite cut`);
35115
35115
  }
35116
- function suiteAbandon(recordPath, ownerGo = false) {
35116
+ function suiteAbandon(recordPath, ownerGo = false, now = /* @__PURE__ */ new Date()) {
35117
35117
  const record = readSuiteCut(recordPath);
35118
35118
  if (!record) throw new Error("no suite cut record to abandon");
35119
35119
  if (record.leadReleased || record.members.some((m) => m.released)) {
@@ -35122,7 +35122,7 @@ function suiteAbandon(recordPath, ownerGo = false) {
35122
35122
  if (record.pinPr && !ownerGo) {
35123
35123
  throw new Error(`the cut already opened pin PR ${record.pinPr}; its pins may be visible, so resume it (suite rcand --owner-go), release it (suite release), or retire it with suite abandon --owner-go`);
35124
35124
  }
35125
- const archive = `${recordPath}.abandoned-${record.leadDevelopment.slice(0, 12)}.json`;
35125
+ const archive = `${recordPath}.abandoned-${record.leadDevelopment.slice(0, 12)}-${now.toISOString().replace(/[:.]/g, "")}.json`;
35126
35126
  if ((0, import_node_fs29.existsSync)(archive)) throw new Error(`abandoned-cut archive already exists at ${archive}; inspect before abandoning again`);
35127
35127
  (0, import_node_fs29.renameSync)(recordPath, archive);
35128
35128
  return { archive, orphanTags: record.members.filter((m) => m.tag).map((m) => `${m.repo}@${m.tag}`) };
@@ -45191,6 +45191,14 @@ async function gh(args) {
45191
45191
  function isMissingRef(message2) {
45192
45192
  return /404|Not Found|No commit found for SHA/.test(message2);
45193
45193
  }
45194
+ async function prepareRcCheckout(git3, repo) {
45195
+ if ((await git3(["status", "--porcelain"])).trim()) throw new Error(`${repo}: checkout has uncommitted changes; refuse to switch it to rc for release`);
45196
+ await git3(["fetch", "origin", "--tags"]);
45197
+ await git3(["switch", "rc"]);
45198
+ await git3(["merge", "--ff-only", "origin/rc"]);
45199
+ const [head, origin] = (await git3(["rev-parse", "HEAD", "origin/rc"])).trim().split(/\s+/);
45200
+ if (!head || head !== origin) throw new Error(`${repo}: local rc ${head?.slice(0, 12)} is not origin/rc ${origin?.slice(0, 12)}; stop`);
45201
+ }
45194
45202
  function rcRunCauseFromLog(log) {
45195
45203
  const causes = [...new Set([...log.matchAll(/##\[error\](?!Process completed with exit code)([^\r\n]+)/g)].map((m) => m[1].trim()).filter(Boolean))];
45196
45204
  return causes.length ? `: ${causes.join("; ")}` : "";
@@ -45293,6 +45301,7 @@ function suiteTrainIo(root, summaryFile) {
45293
45301
  }
45294
45302
  });
45295
45303
  const release = async (repo, expected, rcSha) => inTrain(repo, async (deps) => {
45304
+ await prepareRcCheckout((args) => deps.run("git", args), repo);
45296
45305
  const current = await tagSha(repo, expected);
45297
45306
  if (current) {
45298
45307
  await deps.run("git", ["fetch", "origin", "--tags"]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.50",
3
+ "version": "4.5.51",
4
4
  "description": "MMI Future CLI — the org dev toolbox and shared cross-IDE engine for every registry-declared MMI coding surface.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",