@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.
Files changed (99) hide show
  1. package/README.md +17 -10
  2. package/dist/airtable-JUPGAI4R.js +9 -0
  3. package/dist/{announce-GFLKAPTT.js → announce-WXWOHR2I.js} +24 -9
  4. package/dist/announce-WXWOHR2I.js.map +1 -0
  5. package/dist/{bump-deps-3QQHYDKJ.js → bump-deps-2MAMI7DB.js} +6 -4
  6. package/dist/bump-deps-2MAMI7DB.js.map +1 -0
  7. package/dist/{chunk-MQM5YP4J.js → chunk-ARHDSMFK.js} +2 -2
  8. package/dist/{chunk-FUD4I2ZW.js → chunk-BTEBRTW4.js} +2 -2
  9. package/dist/{chunk-7RGQ4KLE.js → chunk-CCXVX5JN.js} +5 -1
  10. package/dist/chunk-CCXVX5JN.js.map +1 -0
  11. package/dist/{chunk-4A5PYCGB.js → chunk-IMMB64VH.js} +2 -2
  12. package/dist/{chunk-UATHDNWP.js → chunk-IRRZG66U.js} +13 -6
  13. package/dist/chunk-IRRZG66U.js.map +1 -0
  14. package/dist/{chunk-OQPMZ6BM.js → chunk-J7SZQUCW.js} +10 -2
  15. package/dist/{chunk-OQPMZ6BM.js.map → chunk-J7SZQUCW.js.map} +1 -1
  16. package/dist/{chunk-M5LX2VSR.js → chunk-JWA4FO2J.js} +3 -3
  17. package/dist/{chunk-FX3QBSUF.js → chunk-LCKKIJ22.js} +3 -3
  18. package/dist/{chunk-LM42CATB.js → chunk-MEP6PR32.js} +5 -4
  19. package/dist/chunk-MEP6PR32.js.map +1 -0
  20. package/dist/{chunk-CSTLFSGM.js → chunk-N5MZ6WRX.js} +2 -2
  21. package/dist/{chunk-OYN6H4CX.js → chunk-PMIKXAPF.js} +4 -4
  22. package/dist/{chunk-U3MF6RCS.js → chunk-SYTPVYIK.js} +13 -14
  23. package/dist/chunk-SYTPVYIK.js.map +1 -0
  24. package/dist/chunk-VPJ7N6P7.js +27 -0
  25. package/dist/chunk-VPJ7N6P7.js.map +1 -0
  26. package/dist/{chunk-FH7WQHD7.js → chunk-VUKSRWRD.js} +2 -2
  27. package/dist/{chunk-TC7Z5LG7.js → chunk-WCN54744.js} +30 -16
  28. package/dist/{chunk-TC7Z5LG7.js.map → chunk-WCN54744.js.map} +1 -1
  29. package/dist/{chunk-QSL3EJGI.js → chunk-WXNSLK4Q.js} +3 -3
  30. package/dist/{chunk-4GACMVNE.js → chunk-YEGHUODU.js} +17 -1
  31. package/dist/chunk-YEGHUODU.js.map +1 -0
  32. package/dist/{chunk-O65I7G7G.js → chunk-ZO7WNY57.js} +2 -2
  33. package/dist/cli/bin.js +14 -14
  34. package/dist/cli/commands/audit.js +7 -7
  35. package/dist/{convert-to-pnpm-ZO673UFB.js → convert-to-pnpm-3OEHYF76.js} +6 -4
  36. package/dist/convert-to-pnpm-3OEHYF76.js.map +1 -0
  37. package/dist/{digest-R3ROSGLP.js → digest-BTHXYYQZ.js} +3 -3
  38. package/dist/{github-signals-N5JGWHW2.js → github-signals-H7VU4EOH.js} +5 -5
  39. package/dist/index.d.ts +29 -7
  40. package/dist/index.js +16 -16
  41. package/dist/index.js.map +1 -1
  42. package/dist/{init-FOHNISF2.js → init-VA3H4OHM.js} +26 -9
  43. package/dist/init-VA3H4OHM.js.map +1 -0
  44. package/dist/{launch-TM3IHSSU.js → launch-OMHMW5OK.js} +9 -9
  45. package/dist/{lighthouse-airtable-5FHELRCA.js → lighthouse-airtable-4KWC3P72.js} +3 -3
  46. package/dist/{onboard-K2EL4MSG.js → onboard-2PLVVJWN.js} +10 -6
  47. package/dist/onboard-2PLVVJWN.js.map +1 -0
  48. package/dist/{orchestrate-OX3Z4DUI.js → orchestrate-6PKHJXLF.js} +4 -4
  49. package/dist/{renovate-dispatch-H25CQ36P.js → renovate-dispatch-K6VO5KWM.js} +3 -3
  50. package/dist/{report-UEYKO6WH.js → report-X3XPBRBO.js} +6 -6
  51. package/dist/reports/maintenance-email/assets/blurredTests.jpg +0 -0
  52. package/dist/{self-updating-YXOGQWH5.js → self-updating-VXVJSV5T.js} +8 -6
  53. package/dist/self-updating-VXVJSV5T.js.map +1 -0
  54. package/dist/{selftest-VE7CSGWE.js → selftest-FV4MO7TX.js} +6 -6
  55. package/dist/{svelte-codemods-745QM25J.js → svelte-codemods-5RXRRTMK.js} +8 -6
  56. package/dist/svelte-codemods-5RXRRTMK.js.map +1 -0
  57. package/dist/{sync-configs-NYC3Z625.js → sync-configs-TPJMRNRU.js} +10 -4
  58. package/dist/sync-configs-TPJMRNRU.js.map +1 -0
  59. package/dist/{upgrade-UBPPJ6HN.js → upgrade-7TN2XPFK.js} +8 -10
  60. package/dist/upgrade-7TN2XPFK.js.map +1 -0
  61. package/dist/{websites-CSVLSEVL.js → websites-EIPNY4DY.js} +2 -2
  62. package/dist/{write-audits-to-airtable-JCV7FYAW.js → write-audits-to-airtable-WVWFESZW.js} +4 -4
  63. package/package.json +1 -1
  64. package/dist/airtable-GGZJUGQB.js +0 -9
  65. package/dist/announce-GFLKAPTT.js.map +0 -1
  66. package/dist/bump-deps-3QQHYDKJ.js.map +0 -1
  67. package/dist/chunk-4GACMVNE.js.map +0 -1
  68. package/dist/chunk-7RGQ4KLE.js.map +0 -1
  69. package/dist/chunk-LM42CATB.js.map +0 -1
  70. package/dist/chunk-U3MF6RCS.js.map +0 -1
  71. package/dist/chunk-UATHDNWP.js.map +0 -1
  72. package/dist/convert-to-pnpm-ZO673UFB.js.map +0 -1
  73. package/dist/init-FOHNISF2.js.map +0 -1
  74. package/dist/onboard-K2EL4MSG.js.map +0 -1
  75. package/dist/self-updating-YXOGQWH5.js.map +0 -1
  76. package/dist/svelte-codemods-745QM25J.js.map +0 -1
  77. package/dist/sync-configs-NYC3Z625.js.map +0 -1
  78. package/dist/upgrade-UBPPJ6HN.js.map +0 -1
  79. /package/dist/{airtable-GGZJUGQB.js.map → airtable-JUPGAI4R.js.map} +0 -0
  80. /package/dist/{chunk-MQM5YP4J.js.map → chunk-ARHDSMFK.js.map} +0 -0
  81. /package/dist/{chunk-FUD4I2ZW.js.map → chunk-BTEBRTW4.js.map} +0 -0
  82. /package/dist/{chunk-4A5PYCGB.js.map → chunk-IMMB64VH.js.map} +0 -0
  83. /package/dist/{chunk-M5LX2VSR.js.map → chunk-JWA4FO2J.js.map} +0 -0
  84. /package/dist/{chunk-FX3QBSUF.js.map → chunk-LCKKIJ22.js.map} +0 -0
  85. /package/dist/{chunk-CSTLFSGM.js.map → chunk-N5MZ6WRX.js.map} +0 -0
  86. /package/dist/{chunk-OYN6H4CX.js.map → chunk-PMIKXAPF.js.map} +0 -0
  87. /package/dist/{chunk-FH7WQHD7.js.map → chunk-VUKSRWRD.js.map} +0 -0
  88. /package/dist/{chunk-QSL3EJGI.js.map → chunk-WXNSLK4Q.js.map} +0 -0
  89. /package/dist/{chunk-O65I7G7G.js.map → chunk-ZO7WNY57.js.map} +0 -0
  90. /package/dist/{digest-R3ROSGLP.js.map → digest-BTHXYYQZ.js.map} +0 -0
  91. /package/dist/{github-signals-N5JGWHW2.js.map → github-signals-H7VU4EOH.js.map} +0 -0
  92. /package/dist/{launch-TM3IHSSU.js.map → launch-OMHMW5OK.js.map} +0 -0
  93. /package/dist/{lighthouse-airtable-5FHELRCA.js.map → lighthouse-airtable-4KWC3P72.js.map} +0 -0
  94. /package/dist/{orchestrate-OX3Z4DUI.js.map → orchestrate-6PKHJXLF.js.map} +0 -0
  95. /package/dist/{renovate-dispatch-H25CQ36P.js.map → renovate-dispatch-K6VO5KWM.js.map} +0 -0
  96. /package/dist/{report-UEYKO6WH.js.map → report-X3XPBRBO.js.map} +0 -0
  97. /package/dist/{selftest-VE7CSGWE.js.map → selftest-FV4MO7TX.js.map} +0 -0
  98. /package/dist/{websites-CSVLSEVL.js.map → websites-EIPNY4DY.js.map} +0 -0
  99. /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-GGZJUGQB.js");
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-FH7WQHD7.js.map
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-4GACMVNE.js";
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
- const fetched = await deps.fetchLatestProductionDeploy(siteId).catch(() => null);
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 null;
1387
+ return { ok: false };
1392
1388
  }
1393
- if (!res.ok) return null;
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 null;
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
- state: state ? state.toLowerCase() : null,
1408
- deployedAt,
1409
- logUrl,
1410
- errorMessage
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 check = await checkNetlifyDeploy(site.netlifyId, deps);
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-TC7Z5LG7.js.map
1513
+ //# sourceMappingURL=chunk-WCN54744.js.map