@reddoorla/maintenance 0.65.0 → 0.65.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/README.md +17 -10
- package/dist/airtable-JUPGAI4R.js +9 -0
- package/dist/{announce-GFLKAPTT.js → announce-WXWOHR2I.js} +24 -9
- package/dist/announce-WXWOHR2I.js.map +1 -0
- package/dist/{bump-deps-3QQHYDKJ.js → bump-deps-2MAMI7DB.js} +6 -4
- package/dist/bump-deps-2MAMI7DB.js.map +1 -0
- package/dist/{chunk-MQM5YP4J.js → chunk-ARHDSMFK.js} +2 -2
- package/dist/{chunk-FUD4I2ZW.js → chunk-BTEBRTW4.js} +2 -2
- package/dist/{chunk-7RGQ4KLE.js → chunk-CCXVX5JN.js} +5 -1
- package/dist/chunk-CCXVX5JN.js.map +1 -0
- package/dist/{chunk-4A5PYCGB.js → chunk-IMMB64VH.js} +2 -2
- package/dist/{chunk-UATHDNWP.js → chunk-IRRZG66U.js} +13 -6
- package/dist/chunk-IRRZG66U.js.map +1 -0
- package/dist/{chunk-OQPMZ6BM.js → chunk-J7SZQUCW.js} +10 -2
- package/dist/{chunk-OQPMZ6BM.js.map → chunk-J7SZQUCW.js.map} +1 -1
- package/dist/{chunk-M5LX2VSR.js → chunk-JWA4FO2J.js} +3 -3
- package/dist/{chunk-FX3QBSUF.js → chunk-LCKKIJ22.js} +3 -3
- package/dist/{chunk-LM42CATB.js → chunk-MEP6PR32.js} +5 -4
- package/dist/chunk-MEP6PR32.js.map +1 -0
- package/dist/{chunk-CSTLFSGM.js → chunk-N5MZ6WRX.js} +2 -2
- package/dist/{chunk-OYN6H4CX.js → chunk-PMIKXAPF.js} +4 -4
- package/dist/{chunk-U3MF6RCS.js → chunk-SYTPVYIK.js} +13 -14
- package/dist/chunk-SYTPVYIK.js.map +1 -0
- package/dist/chunk-VPJ7N6P7.js +27 -0
- package/dist/chunk-VPJ7N6P7.js.map +1 -0
- package/dist/{chunk-FH7WQHD7.js → chunk-VUKSRWRD.js} +2 -2
- package/dist/{chunk-TC7Z5LG7.js → chunk-WCN54744.js} +30 -16
- package/dist/{chunk-TC7Z5LG7.js.map → chunk-WCN54744.js.map} +1 -1
- package/dist/{chunk-QSL3EJGI.js → chunk-WXNSLK4Q.js} +3 -3
- package/dist/{chunk-4GACMVNE.js → chunk-YEGHUODU.js} +17 -1
- package/dist/chunk-YEGHUODU.js.map +1 -0
- package/dist/{chunk-O65I7G7G.js → chunk-ZO7WNY57.js} +2 -2
- package/dist/cli/bin.js +14 -14
- package/dist/cli/commands/audit.js +7 -7
- package/dist/{convert-to-pnpm-ZO673UFB.js → convert-to-pnpm-3OEHYF76.js} +6 -4
- package/dist/convert-to-pnpm-3OEHYF76.js.map +1 -0
- package/dist/{digest-R3ROSGLP.js → digest-BTHXYYQZ.js} +3 -3
- package/dist/{github-signals-N5JGWHW2.js → github-signals-H7VU4EOH.js} +5 -5
- package/dist/index.d.ts +29 -7
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/{init-FOHNISF2.js → init-VA3H4OHM.js} +26 -9
- package/dist/init-VA3H4OHM.js.map +1 -0
- package/dist/{launch-TM3IHSSU.js → launch-OMHMW5OK.js} +9 -9
- package/dist/{lighthouse-airtable-5FHELRCA.js → lighthouse-airtable-4KWC3P72.js} +3 -3
- package/dist/{onboard-K2EL4MSG.js → onboard-2PLVVJWN.js} +10 -6
- package/dist/onboard-2PLVVJWN.js.map +1 -0
- package/dist/{orchestrate-OX3Z4DUI.js → orchestrate-6PKHJXLF.js} +4 -4
- package/dist/{renovate-dispatch-H25CQ36P.js → renovate-dispatch-K6VO5KWM.js} +3 -3
- package/dist/{report-UEYKO6WH.js → report-X3XPBRBO.js} +6 -6
- package/dist/reports/maintenance-email/assets/blurredTests.jpg +0 -0
- package/dist/{self-updating-YXOGQWH5.js → self-updating-VXVJSV5T.js} +8 -6
- package/dist/self-updating-VXVJSV5T.js.map +1 -0
- package/dist/{selftest-VE7CSGWE.js → selftest-FV4MO7TX.js} +6 -6
- package/dist/{svelte-codemods-745QM25J.js → svelte-codemods-5RXRRTMK.js} +8 -6
- package/dist/svelte-codemods-5RXRRTMK.js.map +1 -0
- package/dist/{sync-configs-NYC3Z625.js → sync-configs-TPJMRNRU.js} +10 -4
- package/dist/sync-configs-TPJMRNRU.js.map +1 -0
- package/dist/{upgrade-UBPPJ6HN.js → upgrade-7TN2XPFK.js} +8 -10
- package/dist/upgrade-7TN2XPFK.js.map +1 -0
- package/dist/{websites-CSVLSEVL.js → websites-EIPNY4DY.js} +2 -2
- package/dist/{write-audits-to-airtable-JCV7FYAW.js → write-audits-to-airtable-WVWFESZW.js} +4 -4
- package/package.json +1 -1
- package/dist/airtable-GGZJUGQB.js +0 -9
- package/dist/announce-GFLKAPTT.js.map +0 -1
- package/dist/bump-deps-3QQHYDKJ.js.map +0 -1
- package/dist/chunk-4GACMVNE.js.map +0 -1
- package/dist/chunk-7RGQ4KLE.js.map +0 -1
- package/dist/chunk-LM42CATB.js.map +0 -1
- package/dist/chunk-U3MF6RCS.js.map +0 -1
- package/dist/chunk-UATHDNWP.js.map +0 -1
- package/dist/convert-to-pnpm-ZO673UFB.js.map +0 -1
- package/dist/init-FOHNISF2.js.map +0 -1
- package/dist/onboard-K2EL4MSG.js.map +0 -1
- package/dist/self-updating-YXOGQWH5.js.map +0 -1
- package/dist/svelte-codemods-745QM25J.js.map +0 -1
- package/dist/sync-configs-NYC3Z625.js.map +0 -1
- package/dist/upgrade-UBPPJ6HN.js.map +0 -1
- /package/dist/{airtable-GGZJUGQB.js.map → airtable-JUPGAI4R.js.map} +0 -0
- /package/dist/{chunk-MQM5YP4J.js.map → chunk-ARHDSMFK.js.map} +0 -0
- /package/dist/{chunk-FUD4I2ZW.js.map → chunk-BTEBRTW4.js.map} +0 -0
- /package/dist/{chunk-4A5PYCGB.js.map → chunk-IMMB64VH.js.map} +0 -0
- /package/dist/{chunk-M5LX2VSR.js.map → chunk-JWA4FO2J.js.map} +0 -0
- /package/dist/{chunk-FX3QBSUF.js.map → chunk-LCKKIJ22.js.map} +0 -0
- /package/dist/{chunk-CSTLFSGM.js.map → chunk-N5MZ6WRX.js.map} +0 -0
- /package/dist/{chunk-OYN6H4CX.js.map → chunk-PMIKXAPF.js.map} +0 -0
- /package/dist/{chunk-FH7WQHD7.js.map → chunk-VUKSRWRD.js.map} +0 -0
- /package/dist/{chunk-QSL3EJGI.js.map → chunk-WXNSLK4Q.js.map} +0 -0
- /package/dist/{chunk-O65I7G7G.js.map → chunk-ZO7WNY57.js.map} +0 -0
- /package/dist/{digest-R3ROSGLP.js.map → digest-BTHXYYQZ.js.map} +0 -0
- /package/dist/{github-signals-N5JGWHW2.js.map → github-signals-H7VU4EOH.js.map} +0 -0
- /package/dist/{launch-TM3IHSSU.js.map → launch-OMHMW5OK.js.map} +0 -0
- /package/dist/{lighthouse-airtable-5FHELRCA.js.map → lighthouse-airtable-4KWC3P72.js.map} +0 -0
- /package/dist/{orchestrate-OX3Z4DUI.js.map → orchestrate-6PKHJXLF.js.map} +0 -0
- /package/dist/{renovate-dispatch-H25CQ36P.js.map → renovate-dispatch-K6VO5KWM.js.map} +0 -0
- /package/dist/{report-UEYKO6WH.js.map → report-X3XPBRBO.js.map} +0 -0
- /package/dist/{selftest-VE7CSGWE.js.map → selftest-FV4MO7TX.js.map} +0 -0
- /package/dist/{websites-CSVLSEVL.js.map → websites-EIPNY4DY.js.map} +0 -0
- /package/dist/{write-audits-to-airtable-JCV7FYAW.js.map → write-audits-to-airtable-WVWFESZW.js.map} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {
|
|
2
|
+
siteLabel
|
|
3
|
+
} from "./chunk-XXTZBPUY.js";
|
|
4
|
+
|
|
5
|
+
// src/cli/fleet/run-recipe-over-sites.ts
|
|
6
|
+
async function runRecipeOverSites(recipe, sites, run) {
|
|
7
|
+
const results = [];
|
|
8
|
+
for (const s of sites) {
|
|
9
|
+
try {
|
|
10
|
+
results.push(await run(s));
|
|
11
|
+
} catch (err) {
|
|
12
|
+
results.push({
|
|
13
|
+
recipe,
|
|
14
|
+
site: siteLabel(s),
|
|
15
|
+
status: "failed",
|
|
16
|
+
commits: [],
|
|
17
|
+
notes: `unexpected error: ${err instanceof Error ? err.message : String(err)}`
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return results;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
runRecipeOverSites
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=chunk-VPJ7N6P7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/fleet/run-recipe-over-sites.ts"],"sourcesContent":["import type { RecipeName, RecipeResult, Site } from \"../../types.js\";\nimport { siteLabel } from \"../../util/site.js\";\n\n/**\n * Run a recipe across a fleet of sites with PER-SITE failure isolation.\n *\n * The recipes run SEQUENTIALLY (they do git/filesystem work that isn't safe to\n * parallelize), and a throw from any one site is caught and converted into a\n * `failed` RecipeResult so the remaining sites still run. This mirrors how\n * `prepareFleetSites` isolates a bad row during the clone/prep phase — but one\n * layer up, at recipe execution.\n *\n * Without this, the bare `for (const s of sites) results.push(await recipe(s))`\n * loop the fleet commands used to share would abort the WHOLE `--fleet` run the\n * moment one site threw: the recipes throw on a non-clean working tree (and on\n * transient git errors), so a single dirty checkout silently skipped every\n * subsequent site and surfaced as a crash rather than a per-site report.\n *\n * @param recipe the recipe name, used to label a synthesized `failed` result\n * when `run` throws (the recipe never returned its own result in that case).\n */\nexport async function runRecipeOverSites(\n recipe: RecipeName,\n sites: Site[],\n run: (site: Site) => Promise<RecipeResult>,\n): Promise<RecipeResult[]> {\n const results: RecipeResult[] = [];\n for (const s of sites) {\n try {\n results.push(await run(s));\n } catch (err) {\n results.push({\n recipe,\n site: siteLabel(s),\n status: \"failed\",\n commits: [],\n notes: `unexpected error: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n }\n return results;\n}\n"],"mappings":";;;;;AAqBA,eAAsB,mBACpB,QACA,OACA,KACyB;AACzB,QAAM,UAA0B,CAAC;AACjC,aAAW,KAAK,OAAO;AACrB,QAAI;AACF,cAAQ,KAAK,MAAM,IAAI,CAAC,CAAC;AAAA,IAC3B,SAAS,KAAK;AACZ,cAAQ,KAAK;AAAA,QACX;AAAA,QACA,MAAM,UAAU,CAAC;AAAA,QACjB,QAAQ;AAAA,QACR,SAAS,CAAC;AAAA,QACV,OAAO,qBAAqB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,MAC9E,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
@@ -30,7 +30,7 @@ async function resolveSites(input) {
|
|
|
30
30
|
}
|
|
31
31
|
if (input.fleet === "airtable") {
|
|
32
32
|
const { openBase, readAirtableConfig } = await import("./client-EPVO3FEH.js");
|
|
33
|
-
const { fromAirtableBase } = await import("./airtable-
|
|
33
|
+
const { fromAirtableBase } = await import("./airtable-JUPGAI4R.js");
|
|
34
34
|
const base = openBase(readAirtableConfig());
|
|
35
35
|
const provider = fromAirtableBase(base, input.workdir ? { workdir: input.workdir } : {});
|
|
36
36
|
return provider();
|
|
@@ -61,4 +61,4 @@ async function resolveSites(input) {
|
|
|
61
61
|
export {
|
|
62
62
|
resolveSites
|
|
63
63
|
};
|
|
64
|
-
//# sourceMappingURL=chunk-
|
|
64
|
+
//# sourceMappingURL=chunk-VUKSRWRD.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-GASBX52O.js";
|
|
7
7
|
import {
|
|
8
8
|
assertUrlSegment
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YEGHUODU.js";
|
|
10
10
|
import {
|
|
11
11
|
defaultSpawn
|
|
12
12
|
} from "./chunk-HVOOCK6L.js";
|
|
@@ -1366,11 +1366,7 @@ function isFailedState(state) {
|
|
|
1366
1366
|
return state !== null && FAILED_STATES.has(state);
|
|
1367
1367
|
}
|
|
1368
1368
|
async function checkNetlifyDeploy(siteId, deps) {
|
|
1369
|
-
|
|
1370
|
-
if (!fetched) {
|
|
1371
|
-
return { state: null, deployedAt: null, logUrl: null, errorMessage: null };
|
|
1372
|
-
}
|
|
1373
|
-
return fetched;
|
|
1369
|
+
return deps.fetchLatestProductionDeploy(siteId).catch(() => ({ ok: false }));
|
|
1374
1370
|
}
|
|
1375
1371
|
function str(raw) {
|
|
1376
1372
|
if (typeof raw !== "string") return null;
|
|
@@ -1388,26 +1384,35 @@ function defaultNetlifyDeployDeps(token, now, fetchImpl = fetch) {
|
|
|
1388
1384
|
headers: { Authorization: `Bearer ${token}` }
|
|
1389
1385
|
});
|
|
1390
1386
|
} catch {
|
|
1391
|
-
return
|
|
1387
|
+
return { ok: false };
|
|
1392
1388
|
}
|
|
1393
|
-
if (!res.ok) return
|
|
1389
|
+
if (!res.ok) return { ok: false };
|
|
1394
1390
|
let body;
|
|
1395
1391
|
try {
|
|
1396
1392
|
body = await res.json();
|
|
1397
1393
|
} catch {
|
|
1398
|
-
return
|
|
1394
|
+
return { ok: false };
|
|
1395
|
+
}
|
|
1396
|
+
if (!Array.isArray(body)) return { ok: false };
|
|
1397
|
+
if (body.length === 0) {
|
|
1398
|
+
return {
|
|
1399
|
+
ok: true,
|
|
1400
|
+
deploy: { state: null, deployedAt: null, logUrl: null, errorMessage: null }
|
|
1401
|
+
};
|
|
1399
1402
|
}
|
|
1400
|
-
if (!Array.isArray(body) || body.length === 0) return null;
|
|
1401
1403
|
const d = body[0];
|
|
1402
1404
|
const state = str(d["state"]);
|
|
1403
1405
|
const deployedAt = str(d["published_at"]) ?? str(d["created_at"]);
|
|
1404
1406
|
const logUrl = str(d["deploy_ssl_url"]) ?? str(d["admin_url"]) ?? str(d["deploy_url"]);
|
|
1405
1407
|
const errorMessage = str(d["error_message"]);
|
|
1406
1408
|
return {
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1409
|
+
ok: true,
|
|
1410
|
+
deploy: {
|
|
1411
|
+
state: state ? state.toLowerCase() : null,
|
|
1412
|
+
deployedAt,
|
|
1413
|
+
logUrl,
|
|
1414
|
+
errorMessage
|
|
1415
|
+
}
|
|
1411
1416
|
};
|
|
1412
1417
|
}
|
|
1413
1418
|
};
|
|
@@ -1424,7 +1429,16 @@ async function netlifyDeployAudit(ctx) {
|
|
|
1424
1429
|
}
|
|
1425
1430
|
const now = ctx.now ?? /* @__PURE__ */ new Date();
|
|
1426
1431
|
const deps = ctx.netlifyDeployDeps ?? defaultNetlifyDeployDeps(token, now);
|
|
1427
|
-
const
|
|
1432
|
+
const fetched = await checkNetlifyDeploy(site.netlifyId, deps);
|
|
1433
|
+
if (!fetched.ok) {
|
|
1434
|
+
return {
|
|
1435
|
+
audit: "netlify-deploy",
|
|
1436
|
+
site: label,
|
|
1437
|
+
status: "warn",
|
|
1438
|
+
summary: "deploy status unavailable (Netlify API unreachable)"
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1441
|
+
const check = fetched.deploy;
|
|
1428
1442
|
const checkedAt = now.toISOString();
|
|
1429
1443
|
const status = isReadyState(check.state) ? "pass" : isFailedState(check.state) ? "fail" : "warn";
|
|
1430
1444
|
const summary = check.state === null ? "no deploy found" : isFailedState(check.state) ? `deploy ${check.state}${check.errorMessage ? ` \u2014 ${check.errorMessage}` : ""}` : `deploy ${check.state}`;
|
|
@@ -1496,4 +1510,4 @@ export {
|
|
|
1496
1510
|
runAudits,
|
|
1497
1511
|
runAuditsAcross
|
|
1498
1512
|
};
|
|
1499
|
-
//# sourceMappingURL=chunk-
|
|
1513
|
+
//# sourceMappingURL=chunk-WCN54744.js.map
|