@mutmutco/cli 4.5.1 → 4.5.3
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 +21 -12
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -15998,10 +15998,10 @@ var rollout_plan_default = {
|
|
|
15998
15998
|
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)."
|
|
15999
15999
|
},
|
|
16000
16000
|
baseline: {
|
|
16001
|
-
version: "4.5.
|
|
16002
|
-
tag: "v4.5.
|
|
16003
|
-
commit: "
|
|
16004
|
-
npm: "@mutmutco/cli@4.5.
|
|
16001
|
+
version: "4.5.3",
|
|
16002
|
+
tag: "v4.5.3",
|
|
16003
|
+
commit: "69b2bc590f08",
|
|
16004
|
+
npm: "@mutmutco/cli@4.5.3"
|
|
16005
16005
|
},
|
|
16006
16006
|
exitCriterion: "fleet-n-of-n",
|
|
16007
16007
|
hubOnlyShortcut: "forbidden",
|
|
@@ -16018,14 +16018,14 @@ var rollout_plan_default = {
|
|
|
16018
16018
|
repo: "mutmutco/mmi-hub",
|
|
16019
16019
|
role: "canary",
|
|
16020
16020
|
schedule: "train",
|
|
16021
|
-
v3Target: "v4.5.
|
|
16021
|
+
v3Target: "v4.5.3"
|
|
16022
16022
|
}
|
|
16023
16023
|
],
|
|
16024
16024
|
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.",
|
|
16025
16025
|
rollback: {
|
|
16026
16026
|
independent: true,
|
|
16027
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
16028
|
-
v3Target: "v4.5.
|
|
16027
|
+
mechanism: "npm dist-tag latest -> 4.5.3 and redeploy the Hub Lambda from tag v4.5.3 (69b2bc590f08); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
16028
|
+
v3Target: "v4.5.3 (@mutmutco/cli@4.5.3, tag commit 69b2bc590f08 \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
16029
16029
|
}
|
|
16030
16030
|
},
|
|
16031
16031
|
{
|
|
@@ -18814,19 +18814,20 @@ function expectedInstallerLogin(family, division) {
|
|
|
18814
18814
|
return String(division ?? "").trim().toLowerCase() === "mmi" ? "github" : "google";
|
|
18815
18815
|
}
|
|
18816
18816
|
function installerVersionUrl(installer) {
|
|
18817
|
+
if (typeof installer.gate === "string" && installer.gate) return `${installer.gate.replace(/\/+$/, "")}/release/version`;
|
|
18817
18818
|
return `https://${INSTALLER_FAMILY_HOSTS[installer.family]}/${installer.product}/release/version`;
|
|
18818
18819
|
}
|
|
18819
18820
|
function installerDeclarationError(value, division) {
|
|
18820
18821
|
if (value === void 0 || value === null) return null;
|
|
18821
18822
|
if (typeof value !== "object" || Array.isArray(value)) {
|
|
18822
|
-
return "installer must be an object {product, family, login?}";
|
|
18823
|
+
return "installer must be an object {product, family, login?, gate?}";
|
|
18823
18824
|
}
|
|
18824
18825
|
const record = (
|
|
18825
18826
|
/** @type {Record<string, unknown>} */
|
|
18826
18827
|
value
|
|
18827
18828
|
);
|
|
18828
18829
|
for (const key of Object.keys(record)) {
|
|
18829
|
-
if (!["product", "family", "login"].includes(key)) return `installer.${key} is not a field \u2014 expected product, family and optionally login`;
|
|
18830
|
+
if (!["product", "family", "login", "gate"].includes(key)) return `installer.${key} is not a field \u2014 expected product, family and optionally login and gate`;
|
|
18830
18831
|
}
|
|
18831
18832
|
if (typeof record.product !== "string" || !PRODUCT_RE.test(record.product)) {
|
|
18832
18833
|
return "installer.product must be a lowercase kebab name (e.g. mm-strategy) \u2014 it is the /<product> path on the family host";
|
|
@@ -18837,6 +18838,9 @@ function installerDeclarationError(value, division) {
|
|
|
18837
18838
|
)) {
|
|
18838
18839
|
return `installer.family must be one of: ${INSTALLER_FAMILIES.join(", ")} (jerv \u2192 ${INSTALLER_FAMILY_HOSTS.jerv}, mmi \u2192 ${INSTALLER_FAMILY_HOSTS.mmi})`;
|
|
18839
18840
|
}
|
|
18841
|
+
if (record.gate !== void 0 && (typeof record.gate !== "string" || !/^https:\/\/[a-z0-9.-]+\.[a-z]{2,}(\/[A-Za-z0-9._\/-]*)?$/.test(record.gate))) {
|
|
18842
|
+
return "installer.gate must be the https origin of the product's own sign-in server (e.g. https://strategy.mutmut.work)";
|
|
18843
|
+
}
|
|
18840
18844
|
if (record.login !== void 0 && !INSTALLER_LOGINS.includes(
|
|
18841
18845
|
/** @type {string} */
|
|
18842
18846
|
record.login
|
|
@@ -19288,8 +19292,9 @@ var SERVED_CHANNELS = {
|
|
|
19288
19292
|
"mutmutco/jerv-jervcode": {
|
|
19289
19293
|
product: "jervcode",
|
|
19290
19294
|
url: "https://get.jerv.ai/jervcode/release/version",
|
|
19291
|
-
|
|
19292
|
-
|
|
19295
|
+
// Jerv-JervCode#6456: JervCode's own publish.yml `serve` job moves and proves this pointer.
|
|
19296
|
+
mover: "JervCode's own release (publish.yml `serve` job: `jerv-gate fetch-release --product jervcode` on jerv-central)",
|
|
19297
|
+
remedy: "re-run the `serve` job of the JervCode release's publish.yml run (`gh run rerun <run-id> --job serve --repo mutmutco/Jerv-JervCode`), or `gh workflow run publish.yml --repo mutmutco/Jerv-JervCode -f tag=<tag>`"
|
|
19293
19298
|
}
|
|
19294
19299
|
};
|
|
19295
19300
|
function servedChannelFor(repo, installer) {
|
|
@@ -30014,6 +30019,10 @@ function registerBootstrapCommands(program3) {
|
|
|
30014
30019
|
await gh(["api", "-X", "POST", `repos/${repo}/git/refs`, "-f", `ref=refs/heads/${seedPlan.branch}`, "-f", `sha=${headSha}`]);
|
|
30015
30020
|
} catch (e) {
|
|
30016
30021
|
if (!/Reference already exists|already exists/i.test(String(e.message ?? ""))) throw e;
|
|
30022
|
+
const open2 = await gh(["pr", "list", "--repo", repo, "--head", seedPlan.branch, "--base", baseBranch, "--state", "open", "--json", "number,url"]);
|
|
30023
|
+
if (decideSeedPrAction(JSON.parse(open2.stdout || "[]")).action !== "reuse") {
|
|
30024
|
+
await gh(["api", "-X", "PATCH", `repos/${repo}/git/refs/heads/${seedPlan.branch}`, "-f", `sha=${headSha}`, "-F", "force=true"]);
|
|
30025
|
+
}
|
|
30017
30026
|
}
|
|
30018
30027
|
}
|
|
30019
30028
|
}
|
|
@@ -31346,7 +31355,7 @@ var SETTABLE_VAR_HINTS = {
|
|
|
31346
31355
|
consumesDesignSystem: '"fofu"',
|
|
31347
31356
|
runtimeVaultOnly: "true|false",
|
|
31348
31357
|
seedCanary: "true|false",
|
|
31349
|
-
installer: "JSON {product,family:jerv|mmi,login?:github|google} \u2014 the repo ships a one-line installer on get.jerv.ai or get.mutmut.work",
|
|
31358
|
+
installer: "JSON {product,family:jerv|mmi,login?:github|google,gate?:https origin of its own sign-in server} \u2014 the repo ships a one-line installer on get.jerv.ai or get.mutmut.work",
|
|
31350
31359
|
repos: 'JSON array, e.g. ["mutmutco/mm-foo"]',
|
|
31351
31360
|
oauth: "JSON {subdomains,domains,callbackPath,extraCallbackPaths}",
|
|
31352
31361
|
requiredGcpApis: "comma-string",
|
package/package.json
CHANGED