@reddoorla/maintenance 0.82.0 → 0.84.0

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 (129) hide show
  1. package/dist/airtable-5ZPU3MT4.js +9 -0
  2. package/dist/{announce-7QHQGJPV.js → announce-4H64L2Z6.js} +4 -4
  3. package/dist/{blux-EATHOHKK.js → blux-ZGDSHI3U.js} +5 -5
  4. package/dist/{bump-deps-ZREAMK7M.js → bump-deps-2OL6PGTM.js} +5 -5
  5. package/dist/{chunk-OIDDJLS7.js → chunk-2WN4SNBQ.js} +2 -2
  6. package/dist/{chunk-HVOOCK6L.js → chunk-4DHQCN5H.js} +2 -1
  7. package/dist/{chunk-5E4L7WKE.js → chunk-5P2HVNLZ.js} +3 -3
  8. package/dist/{chunk-ZXRRKKMR.js → chunk-6V7565O2.js} +8 -8
  9. package/dist/{chunk-YRM6EED7.js → chunk-CLWNAMUX.js} +28 -2
  10. package/dist/chunk-CLWNAMUX.js.map +1 -0
  11. package/dist/{chunk-VXXF4Y25.js → chunk-FSRJAF2Q.js} +60 -3
  12. package/dist/chunk-FSRJAF2Q.js.map +1 -0
  13. package/dist/{chunk-B5ZUQZFL.js → chunk-ICXV25N7.js} +2 -2
  14. package/dist/{chunk-UH5YPYS4.js → chunk-JVWJJ36K.js} +5 -4
  15. package/dist/chunk-JVWJJ36K.js.map +1 -0
  16. package/dist/{chunk-4PW6ISX7.js → chunk-KV7DIRRO.js} +3 -3
  17. package/dist/{chunk-ODC4PXZL.js → chunk-MQUOUVQP.js} +2 -2
  18. package/dist/{chunk-LMCO7CYQ.js → chunk-OQFOMKBP.js} +2 -2
  19. package/dist/{chunk-FFI7P74K.js → chunk-PBCGXXG6.js} +2 -2
  20. package/dist/{chunk-T4FQ6TZT.js → chunk-QRDB4NLB.js} +6 -6
  21. package/dist/{chunk-K5JZ5KLO.js → chunk-R4AB6GCT.js} +3 -3
  22. package/dist/chunk-R53VL3RI.js +32 -0
  23. package/dist/chunk-R53VL3RI.js.map +1 -0
  24. package/dist/{chunk-FX7RAMGC.js → chunk-R6FPFMOS.js} +3 -3
  25. package/dist/{chunk-MGJ72BA4.js → chunk-RJB3QUSP.js} +2 -2
  26. package/dist/{chunk-ATJ6ZA2V.js → chunk-SDUJIANJ.js} +2 -2
  27. package/dist/{chunk-7ADQL5Y3.js → chunk-THEFTZ7F.js} +2 -2
  28. package/dist/{chunk-NT4WIP7I.js → chunk-UYCAF77E.js} +2 -2
  29. package/dist/chunk-VNB5XBQ4.js +699 -0
  30. package/dist/chunk-VNB5XBQ4.js.map +1 -0
  31. package/dist/{chunk-YAMRVXOD.js → chunk-VRWUL4TR.js} +2 -2
  32. package/dist/{chunk-2BHSGLWR.js → chunk-XDCRVYFL.js} +3 -3
  33. package/dist/chunk-XDCRVYFL.js.map +1 -0
  34. package/dist/{chunk-4NAOR44V.js → chunk-ZMIPG6TR.js} +2 -2
  35. package/dist/cli/bin.js +51 -23
  36. package/dist/cli/bin.js.map +1 -1
  37. package/dist/cli/commands/audit.d.ts +1 -1
  38. package/dist/cli/commands/audit.js +10 -10
  39. package/dist/{convert-to-pnpm-UT2R6EOW.js → convert-to-pnpm-KCXOYOHW.js} +5 -5
  40. package/dist/{digest-CLFUWW62.js → digest-WGEPAWMP.js} +12 -7
  41. package/dist/digest-WGEPAWMP.js.map +1 -0
  42. package/dist/{ensure-site-LLPOXLWP.js → ensure-site-HYAIVZY2.js} +2 -2
  43. package/dist/{forms-notify-target-PN6P3WPW.js → forms-notify-target-HSL4ZMT5.js} +2 -2
  44. package/dist/{github-signals-HTH7474O.js → github-signals-I7XACMCE.js} +6 -6
  45. package/dist/{header-image-WMHZFU7B.js → header-image-ADYPTGVY.js} +2 -2
  46. package/dist/{health-endpoint-4E53ZMLE.js → health-endpoint-JNCUILHO.js} +6 -6
  47. package/dist/index.d.ts +65 -3
  48. package/dist/index.js +32 -31
  49. package/dist/index.js.map +1 -1
  50. package/dist/{init-3ZJ7Z5NG.js → init-FLGLJCMJ.js} +13 -13
  51. package/dist/{launch-FRCDOB56.js → launch-AVKH2JVF.js} +10 -10
  52. package/dist/{lighthouse-airtable-I46QCEIS.js → lighthouse-airtable-CHANWVO6.js} +3 -3
  53. package/dist/{onboard-45NPDMMW.js → onboard-HF4FTJDE.js} +5 -5
  54. package/dist/{orchestrate-34JYNIXT.js → orchestrate-5FMNYJEA.js} +3 -3
  55. package/dist/{preflight-WVD32COX.js → preflight-HTWIX3MN.js} +4 -4
  56. package/dist/prismic-ci-4PDATHU6.js +447 -0
  57. package/dist/prismic-ci-4PDATHU6.js.map +1 -0
  58. package/dist/prismic-models-HXCAM4ZL.js +1020 -0
  59. package/dist/prismic-models-HXCAM4ZL.js.map +1 -0
  60. package/dist/{protection-audit-2UR45SOC.js → protection-audit-64PLLBLI.js} +3 -3
  61. package/dist/recipes/sync-configs.d.ts +1 -1
  62. package/dist/{renovate-dispatch-LOOCNZTW.js → renovate-dispatch-HBZG2UEU.js} +4 -4
  63. package/dist/{report-CLF2753O.js → report-LV7NY5W3.js} +20 -13
  64. package/dist/report-LV7NY5W3.js.map +1 -0
  65. package/dist/{self-updating-5TJ2NB26.js → self-updating-4Q65OVXY.js} +6 -6
  66. package/dist/{selftest-BTCZLCTL.js → selftest-K5XZKVTE.js} +7 -7
  67. package/dist/{smoke-suite-GHKXMKIR.js → smoke-suite-J3LL3JZJ.js} +6 -6
  68. package/dist/{submissions-KUXLKCSQ.js → submissions-GMBUP4LV.js} +2 -2
  69. package/dist/{svelte-codemods-YTCTLK7G.js → svelte-codemods-JTMX4BSX.js} +4 -4
  70. package/dist/{sync-configs-KSSQZU5L.js → sync-configs-5DXSL64Q.js} +4 -4
  71. package/dist/{types-DnEL3NRn.d.ts → types-OIQZ5hWN.d.ts} +1 -1
  72. package/dist/{upgrade-UDAPY3SN.js → upgrade-HCR25P25.js} +5 -5
  73. package/dist/{websites-JXG3WWAU.js → websites-VITQ3WXN.js} +6 -2
  74. package/dist/{write-audits-to-airtable-7D3LV4KP.js → write-audits-to-airtable-3SOXLKJK.js} +4 -4
  75. package/package.json +1 -1
  76. package/dist/airtable-ZDHLKK5K.js +0 -9
  77. package/dist/chunk-2BHSGLWR.js.map +0 -1
  78. package/dist/chunk-KRDLHAKK.js +0 -17
  79. package/dist/chunk-KRDLHAKK.js.map +0 -1
  80. package/dist/chunk-UH5YPYS4.js.map +0 -1
  81. package/dist/chunk-VXXF4Y25.js.map +0 -1
  82. package/dist/chunk-YRM6EED7.js.map +0 -1
  83. package/dist/digest-CLFUWW62.js.map +0 -1
  84. package/dist/report-CLF2753O.js.map +0 -1
  85. /package/dist/{airtable-ZDHLKK5K.js.map → airtable-5ZPU3MT4.js.map} +0 -0
  86. /package/dist/{announce-7QHQGJPV.js.map → announce-4H64L2Z6.js.map} +0 -0
  87. /package/dist/{blux-EATHOHKK.js.map → blux-ZGDSHI3U.js.map} +0 -0
  88. /package/dist/{bump-deps-ZREAMK7M.js.map → bump-deps-2OL6PGTM.js.map} +0 -0
  89. /package/dist/{chunk-OIDDJLS7.js.map → chunk-2WN4SNBQ.js.map} +0 -0
  90. /package/dist/{chunk-HVOOCK6L.js.map → chunk-4DHQCN5H.js.map} +0 -0
  91. /package/dist/{chunk-5E4L7WKE.js.map → chunk-5P2HVNLZ.js.map} +0 -0
  92. /package/dist/{chunk-ZXRRKKMR.js.map → chunk-6V7565O2.js.map} +0 -0
  93. /package/dist/{chunk-B5ZUQZFL.js.map → chunk-ICXV25N7.js.map} +0 -0
  94. /package/dist/{chunk-4PW6ISX7.js.map → chunk-KV7DIRRO.js.map} +0 -0
  95. /package/dist/{chunk-ODC4PXZL.js.map → chunk-MQUOUVQP.js.map} +0 -0
  96. /package/dist/{chunk-LMCO7CYQ.js.map → chunk-OQFOMKBP.js.map} +0 -0
  97. /package/dist/{chunk-FFI7P74K.js.map → chunk-PBCGXXG6.js.map} +0 -0
  98. /package/dist/{chunk-T4FQ6TZT.js.map → chunk-QRDB4NLB.js.map} +0 -0
  99. /package/dist/{chunk-K5JZ5KLO.js.map → chunk-R4AB6GCT.js.map} +0 -0
  100. /package/dist/{chunk-FX7RAMGC.js.map → chunk-R6FPFMOS.js.map} +0 -0
  101. /package/dist/{chunk-MGJ72BA4.js.map → chunk-RJB3QUSP.js.map} +0 -0
  102. /package/dist/{chunk-ATJ6ZA2V.js.map → chunk-SDUJIANJ.js.map} +0 -0
  103. /package/dist/{chunk-7ADQL5Y3.js.map → chunk-THEFTZ7F.js.map} +0 -0
  104. /package/dist/{chunk-NT4WIP7I.js.map → chunk-UYCAF77E.js.map} +0 -0
  105. /package/dist/{chunk-YAMRVXOD.js.map → chunk-VRWUL4TR.js.map} +0 -0
  106. /package/dist/{chunk-4NAOR44V.js.map → chunk-ZMIPG6TR.js.map} +0 -0
  107. /package/dist/{convert-to-pnpm-UT2R6EOW.js.map → convert-to-pnpm-KCXOYOHW.js.map} +0 -0
  108. /package/dist/{ensure-site-LLPOXLWP.js.map → ensure-site-HYAIVZY2.js.map} +0 -0
  109. /package/dist/{forms-notify-target-PN6P3WPW.js.map → forms-notify-target-HSL4ZMT5.js.map} +0 -0
  110. /package/dist/{github-signals-HTH7474O.js.map → github-signals-I7XACMCE.js.map} +0 -0
  111. /package/dist/{header-image-WMHZFU7B.js.map → header-image-ADYPTGVY.js.map} +0 -0
  112. /package/dist/{health-endpoint-4E53ZMLE.js.map → health-endpoint-JNCUILHO.js.map} +0 -0
  113. /package/dist/{init-3ZJ7Z5NG.js.map → init-FLGLJCMJ.js.map} +0 -0
  114. /package/dist/{launch-FRCDOB56.js.map → launch-AVKH2JVF.js.map} +0 -0
  115. /package/dist/{lighthouse-airtable-I46QCEIS.js.map → lighthouse-airtable-CHANWVO6.js.map} +0 -0
  116. /package/dist/{onboard-45NPDMMW.js.map → onboard-HF4FTJDE.js.map} +0 -0
  117. /package/dist/{orchestrate-34JYNIXT.js.map → orchestrate-5FMNYJEA.js.map} +0 -0
  118. /package/dist/{preflight-WVD32COX.js.map → preflight-HTWIX3MN.js.map} +0 -0
  119. /package/dist/{protection-audit-2UR45SOC.js.map → protection-audit-64PLLBLI.js.map} +0 -0
  120. /package/dist/{renovate-dispatch-LOOCNZTW.js.map → renovate-dispatch-HBZG2UEU.js.map} +0 -0
  121. /package/dist/{self-updating-5TJ2NB26.js.map → self-updating-4Q65OVXY.js.map} +0 -0
  122. /package/dist/{selftest-BTCZLCTL.js.map → selftest-K5XZKVTE.js.map} +0 -0
  123. /package/dist/{smoke-suite-GHKXMKIR.js.map → smoke-suite-J3LL3JZJ.js.map} +0 -0
  124. /package/dist/{submissions-KUXLKCSQ.js.map → submissions-GMBUP4LV.js.map} +0 -0
  125. /package/dist/{svelte-codemods-YTCTLK7G.js.map → svelte-codemods-JTMX4BSX.js.map} +0 -0
  126. /package/dist/{sync-configs-KSSQZU5L.js.map → sync-configs-5DXSL64Q.js.map} +0 -0
  127. /package/dist/{upgrade-UDAPY3SN.js.map → upgrade-HCR25P25.js.map} +0 -0
  128. /package/dist/{websites-JXG3WWAU.js.map → websites-VITQ3WXN.js.map} +0 -0
  129. /package/dist/{write-audits-to-airtable-7D3LV4KP.js.map → write-audits-to-airtable-3SOXLKJK.js.map} +0 -0
@@ -2,30 +2,30 @@ import {
2
2
  appendSkipNotice,
3
3
  fleetWorkdir,
4
4
  prepareFleetSites
5
- } from "./chunk-4NAOR44V.js";
5
+ } from "./chunk-ZMIPG6TR.js";
6
6
  import {
7
7
  resolveSites
8
- } from "./chunk-ODC4PXZL.js";
8
+ } from "./chunk-MQUOUVQP.js";
9
9
  import {
10
10
  init
11
- } from "./chunk-ZXRRKKMR.js";
12
- import "./chunk-MGJ72BA4.js";
11
+ } from "./chunk-6V7565O2.js";
12
+ import "./chunk-UYCAF77E.js";
13
+ import "./chunk-RJB3QUSP.js";
13
14
  import "./chunk-LS6QPANO.js";
14
15
  import "./chunk-J7SZQUCW.js";
15
- import "./chunk-FX7RAMGC.js";
16
- import "./chunk-K5JZ5KLO.js";
17
- import "./chunk-KRDLHAKK.js";
18
- import "./chunk-NT4WIP7I.js";
16
+ import "./chunk-R6FPFMOS.js";
17
+ import "./chunk-R4AB6GCT.js";
18
+ import "./chunk-R53VL3RI.js";
19
19
  import "./chunk-Q276MZ7E.js";
20
20
  import "./chunk-73UFRZKY.js";
21
21
  import "./chunk-ZTPPCHDB.js";
22
22
  import "./chunk-OTGB6YQO.js";
23
- import "./chunk-T4FQ6TZT.js";
24
- import "./chunk-GASBX52O.js";
25
- import "./chunk-YAMRVXOD.js";
23
+ import "./chunk-QRDB4NLB.js";
26
24
  import "./chunk-LKGVSM2O.js";
25
+ import "./chunk-GASBX52O.js";
26
+ import "./chunk-VRWUL4TR.js";
27
27
  import "./chunk-FDIFTIXC.js";
28
- import "./chunk-HVOOCK6L.js";
28
+ import "./chunk-4DHQCN5H.js";
29
29
  import "./chunk-A3WDWNN5.js";
30
30
  import "./chunk-2OP4JKIQ.js";
31
31
  import {
@@ -107,4 +107,4 @@ async function runInitCommand(site, opts) {
107
107
  export {
108
108
  runInitCommand
109
109
  };
110
- //# sourceMappingURL=init-3ZJ7Z5NG.js.map
110
+ //# sourceMappingURL=init-FLGLJCMJ.js.map
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  selfUpdating
3
- } from "./chunk-7ADQL5Y3.js";
3
+ } from "./chunk-THEFTZ7F.js";
4
4
  import "./chunk-MNDIED4M.js";
5
5
  import {
6
6
  writeAuditsToAirtable
7
- } from "./chunk-2BHSGLWR.js";
7
+ } from "./chunk-XDCRVYFL.js";
8
8
  import {
9
9
  hasRealScores,
10
10
  lighthouseScoresFromResult
11
- } from "./chunk-LMCO7CYQ.js";
11
+ } from "./chunk-OQFOMKBP.js";
12
12
  import "./chunk-5L3FPQIJ.js";
13
13
  import {
14
14
  resolveSites
15
- } from "./chunk-ODC4PXZL.js";
15
+ } from "./chunk-MQUOUVQP.js";
16
16
  import {
17
17
  queueDraft
18
18
  } from "./chunk-62VF32IC.js";
@@ -30,12 +30,12 @@ import "./chunk-SEEA6RXF.js";
30
30
  import "./chunk-73UFRZKY.js";
31
31
  import {
32
32
  runAudits
33
- } from "./chunk-T4FQ6TZT.js";
34
- import "./chunk-GASBX52O.js";
35
- import "./chunk-YAMRVXOD.js";
33
+ } from "./chunk-QRDB4NLB.js";
36
34
  import "./chunk-LKGVSM2O.js";
35
+ import "./chunk-GASBX52O.js";
36
+ import "./chunk-VRWUL4TR.js";
37
37
  import "./chunk-FDIFTIXC.js";
38
- import "./chunk-HVOOCK6L.js";
38
+ import "./chunk-4DHQCN5H.js";
39
39
  import "./chunk-A3WDWNN5.js";
40
40
  import "./chunk-2OP4JKIQ.js";
41
41
  import {
@@ -46,7 +46,7 @@ import "./chunk-U5SZ4FOP.js";
46
46
  import {
47
47
  listWebsites,
48
48
  siteSlug
49
- } from "./chunk-YRM6EED7.js";
49
+ } from "./chunk-CLWNAMUX.js";
50
50
  import {
51
51
  openBase,
52
52
  readAirtableConfig
@@ -216,4 +216,4 @@ async function runLaunchCommand(site, opts) {
216
216
  export {
217
217
  runLaunchCommand
218
218
  };
219
- //# sourceMappingURL=launch-FRCDOB56.js.map
219
+ //# sourceMappingURL=launch-AVKH2JVF.js.map
@@ -2,11 +2,11 @@ import {
2
2
  hasRealScores,
3
3
  lighthouseScoresFromResult,
4
4
  resolveSlugFromCwd
5
- } from "./chunk-LMCO7CYQ.js";
6
- import "./chunk-YRM6EED7.js";
5
+ } from "./chunk-OQFOMKBP.js";
6
+ import "./chunk-CLWNAMUX.js";
7
7
  export {
8
8
  hasRealScores,
9
9
  lighthouseScoresFromResult,
10
10
  resolveSlugFromCwd
11
11
  };
12
- //# sourceMappingURL=lighthouse-airtable-I46QCEIS.js.map
12
+ //# sourceMappingURL=lighthouse-airtable-CHANWVO6.js.map
@@ -5,18 +5,18 @@ import {
5
5
  appendSkipNotice,
6
6
  fleetWorkdir,
7
7
  prepareFleetSites
8
- } from "./chunk-4NAOR44V.js";
8
+ } from "./chunk-ZMIPG6TR.js";
9
9
  import {
10
10
  resolveSites
11
- } from "./chunk-ODC4PXZL.js";
11
+ } from "./chunk-MQUOUVQP.js";
12
12
  import {
13
13
  onboard
14
- } from "./chunk-NT4WIP7I.js";
14
+ } from "./chunk-UYCAF77E.js";
15
15
  import "./chunk-ZTPPCHDB.js";
16
16
  import "./chunk-OTGB6YQO.js";
17
17
  import "./chunk-LKGVSM2O.js";
18
18
  import "./chunk-FDIFTIXC.js";
19
- import "./chunk-HVOOCK6L.js";
19
+ import "./chunk-4DHQCN5H.js";
20
20
  import "./chunk-XXTZBPUY.js";
21
21
  import "./chunk-XTK5VIQB.js";
22
22
  import "./chunk-U5SZ4FOP.js";
@@ -70,4 +70,4 @@ async function runOnboardCommand(site, opts) {
70
70
  export {
71
71
  runOnboardCommand
72
72
  };
73
- //# sourceMappingURL=onboard-45NPDMMW.js.map
73
+ //# sourceMappingURL=onboard-HF4FTJDE.js.map
@@ -4,7 +4,7 @@ import {
4
4
  parseAddresses,
5
5
  sendApprovedReports,
6
6
  withGlobalCc
7
- } from "./chunk-FFI7P74K.js";
7
+ } from "./chunk-PBCGXXG6.js";
8
8
  import "./chunk-GECESMVS.js";
9
9
  import "./chunk-6QRLRT3P.js";
10
10
  import "./chunk-MPBXOJ3N.js";
@@ -14,7 +14,7 @@ import "./chunk-QG6OSL4M.js";
14
14
  import "./chunk-DC5H7KEQ.js";
15
15
  import "./chunk-4SOCPK7A.js";
16
16
  import "./chunk-U5SZ4FOP.js";
17
- import "./chunk-YRM6EED7.js";
17
+ import "./chunk-CLWNAMUX.js";
18
18
  import "./chunk-HN6I2XWI.js";
19
19
  import "./chunk-6VAL7XJT.js";
20
20
  export {
@@ -24,4 +24,4 @@ export {
24
24
  sendApprovedReports,
25
25
  withGlobalCc
26
26
  };
27
- //# sourceMappingURL=orchestrate-34JYNIXT.js.map
27
+ //# sourceMappingURL=orchestrate-5FMNYJEA.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  preflight
3
- } from "./chunk-5E4L7WKE.js";
3
+ } from "./chunk-5P2HVNLZ.js";
4
4
  import "./chunk-D4FVAIEJ.js";
5
- import "./chunk-FFI7P74K.js";
5
+ import "./chunk-PBCGXXG6.js";
6
6
  import "./chunk-GECESMVS.js";
7
7
  import "./chunk-6QRLRT3P.js";
8
8
  import "./chunk-MPBXOJ3N.js";
@@ -12,7 +12,7 @@ import "./chunk-QG6OSL4M.js";
12
12
  import "./chunk-DC5H7KEQ.js";
13
13
  import "./chunk-4SOCPK7A.js";
14
14
  import "./chunk-U5SZ4FOP.js";
15
- import "./chunk-YRM6EED7.js";
15
+ import "./chunk-CLWNAMUX.js";
16
16
  import "./chunk-HN6I2XWI.js";
17
17
  import "./chunk-6VAL7XJT.js";
18
18
 
@@ -63,4 +63,4 @@ async function runPreflightCommand(site, opts) {
63
63
  export {
64
64
  runPreflightCommand
65
65
  };
66
- //# sourceMappingURL=preflight-WVD32COX.js.map
66
+ //# sourceMappingURL=preflight-HTWIX3MN.js.map
@@ -0,0 +1,447 @@
1
+ import {
2
+ noWorkingTreeFailure,
3
+ readPrismicConfig
4
+ } from "./chunk-VNB5XBQ4.js";
5
+ import {
6
+ runRecipeOverSites
7
+ } from "./chunk-VPJ7N6P7.js";
8
+ import {
9
+ appendSkipNotice,
10
+ fleetWorkdir,
11
+ prepareFleetSites
12
+ } from "./chunk-ZMIPG6TR.js";
13
+ import {
14
+ resolveSites
15
+ } from "./chunk-MQUOUVQP.js";
16
+ import {
17
+ PRETTIER_FLAG_NOTE,
18
+ formatWithPrettier,
19
+ resolveTargetPrettier
20
+ } from "./chunk-R53VL3RI.js";
21
+ import {
22
+ readGitHubConfig
23
+ } from "./chunk-GASBX52O.js";
24
+ import {
25
+ makeGitHub
26
+ } from "./chunk-VRWUL4TR.js";
27
+ import "./chunk-FDIFTIXC.js";
28
+ import {
29
+ defaultSpawn
30
+ } from "./chunk-4DHQCN5H.js";
31
+ import {
32
+ siteLabel
33
+ } from "./chunk-XXTZBPUY.js";
34
+ import {
35
+ branchName,
36
+ checkoutBranch,
37
+ commit,
38
+ createBranch,
39
+ currentBranch,
40
+ deleteBranch,
41
+ isOwnerRepo,
42
+ isWorkingTreeClean,
43
+ push
44
+ } from "./chunk-XTK5VIQB.js";
45
+ import "./chunk-U5SZ4FOP.js";
46
+
47
+ // src/cli/commands/prismic-ci.ts
48
+ import { readdir } from "fs/promises";
49
+ import { resolve } from "path";
50
+
51
+ // src/recipes/prismic-ci/index.ts
52
+ import { mkdir, readFile as readFile2, writeFile } from "fs/promises";
53
+ import { dirname, join as join2 } from "path";
54
+
55
+ // src/recipes/prismic-ci/template.ts
56
+ var WORKFLOW_PATH = ".github/workflows/prismic-models.yml";
57
+ var SECRET = "PRISMIC_WRITE_TOKEN";
58
+ var REUSABLE_WORKFLOW = "reddoorla/.github/.github/workflows/prismic-models.yml";
59
+ var APPLY_BRANCH = "main";
60
+ var REUSABLE_WORKFLOW_PIN = {
61
+ sha: "558395431ddcb481ecba3dd84b78b38c338cfa03",
62
+ tag: "v1.4.0"
63
+ };
64
+ function isPinResolved(pin) {
65
+ return /^[0-9a-f]{40}$/.test(pin.sha);
66
+ }
67
+ function prismicCiWorkflow(pin) {
68
+ return `# Delivers this site's Prismic model changes. Managed by @reddoorla/maintenance
69
+ # (\`reddoor-maint prismic-ci\`) \u2014 change it there and re-run, not here.
70
+ #
71
+ # On a PR touching a model: comment the delta, write nothing.
72
+ # On merge to ${APPLY_BRANCH}: push those models to Prismic. Never delete.
73
+ #
74
+ # THE BRANCH FILTER ON \`push:\` IS LOAD-BEARING, not tidiness. The reusable
75
+ # workflow's apply job also guards \`github.ref == 'refs/heads/${APPLY_BRANCH}'\`,
76
+ # and its comment calls this the other half of that gate: an unfiltered
77
+ # \`on: push:\` fires on every branch AND every tag, so a feature branch's models
78
+ # would reach production with no pull request and therefore no review anywhere in
79
+ # the sequence. Keep both halves.
80
+ name: prismic-models
81
+
82
+ on:
83
+ # No branch filter here, deliberately: a model PR into any base deserves its
84
+ # delta comment, and the dry job is INCAPABLE of writing \u2014 it never passes
85
+ # \`--apply\`, and it holds no job that does.
86
+ pull_request:
87
+ paths:
88
+ - "customtypes/**"
89
+ - "src/lib/slices/**/model.json"
90
+ push:
91
+ branches: [${APPLY_BRANCH}]
92
+ paths:
93
+ - "customtypes/**"
94
+ - "src/lib/slices/**/model.json"
95
+
96
+ jobs:
97
+ prismic-models:
98
+ # A called workflow's jobs can only NARROW what the caller granted, so the
99
+ # PR-comment permission has to be granted here as well as there. Nothing in
100
+ # either job pushes code, so \`contents\` stays read.
101
+ permissions:
102
+ contents: read
103
+ pull-requests: write
104
+ uses: ${REUSABLE_WORKFLOW}@${pin.sha} # ${pin.tag}
105
+ secrets:
106
+ # Spelled exactly as the reusable workflow declares it. A workflow-local
107
+ # alias would not be a rename \u2014 it would be an undeclared secret, and the
108
+ # required one would arrive empty.
109
+ ${SECRET}: \${{ secrets.${SECRET} }}
110
+ `;
111
+ }
112
+ var PRISMIC_CI_WORKFLOW = prismicCiWorkflow(REUSABLE_WORKFLOW_PIN);
113
+
114
+ // src/recipes/prismic-ci/cli-version.ts
115
+ import { readFile } from "fs/promises";
116
+ import { join } from "path";
117
+ var MIN_CLI_VERSION = "0.83.0";
118
+ var PACKAGE = "@reddoorla/maintenance";
119
+ function atLeast(version, min) {
120
+ const parse = (v) => {
121
+ const [core = "", ...rest] = v.split("-");
122
+ return {
123
+ nums: core.split(".").map((n) => Number.parseInt(n, 10) || 0),
124
+ pre: rest.length > 0
125
+ };
126
+ };
127
+ const a = parse(version);
128
+ const b = parse(min);
129
+ for (let i = 0; i < 3; i++) {
130
+ const av = a.nums[i] ?? 0;
131
+ const bv = b.nums[i] ?? 0;
132
+ if (av !== bv) return av > bv;
133
+ }
134
+ if (a.pre && !b.pre) return false;
135
+ return true;
136
+ }
137
+ async function readLockedCliVersion(repoRoot) {
138
+ let raw;
139
+ try {
140
+ raw = await readFile(join(repoRoot, "pnpm-lock.yaml"), "utf-8");
141
+ } catch (err) {
142
+ const code = err.code;
143
+ if (code === "ENOENT") {
144
+ return {
145
+ ok: false,
146
+ reason: `no pnpm-lock.yaml in the checkout \u2014 cannot tell which ${PACKAGE} version CI would run`
147
+ };
148
+ }
149
+ return { ok: false, reason: `pnpm-lock.yaml is present but unreadable (${String(err)})` };
150
+ }
151
+ const lines = raw.split("\n");
152
+ const importersAt = lines.findIndex((l) => /^importers:\s*$/.test(l));
153
+ if (importersAt === -1) {
154
+ return {
155
+ ok: false,
156
+ reason: "pnpm-lock.yaml has no `importers:` section \u2014 unrecognised lockfile shape"
157
+ };
158
+ }
159
+ const end = lines.findIndex((l, i) => i > importersAt && /^[a-zA-Z]/.test(l));
160
+ const importers = lines.slice(importersAt + 1, end === -1 ? lines.length : end);
161
+ const found = /* @__PURE__ */ new Set();
162
+ for (let i = 0; i < importers.length; i++) {
163
+ if (!new RegExp(`^\\s+'?${PACKAGE.replace("/", "\\/")}'?:\\s*$`).test(importers[i])) continue;
164
+ for (let j = i + 1; j < Math.min(i + 4, importers.length); j++) {
165
+ const m = /^\s+version:\s*(\S+)\s*$/.exec(importers[j]);
166
+ if (!m) continue;
167
+ found.add(m[1].split("(")[0]);
168
+ break;
169
+ }
170
+ }
171
+ if (found.size === 0) {
172
+ return { ok: false, reason: `${PACKAGE} is not a dependency in this repo's lockfile` };
173
+ }
174
+ if (found.size > 1) {
175
+ return {
176
+ ok: false,
177
+ reason: `lockfile resolves ${PACKAGE} to more than one version (${[...found].sort().join(", ")}) \u2014 refusing to guess which one CI would run`
178
+ };
179
+ }
180
+ return { ok: true, version: [...found][0] };
181
+ }
182
+
183
+ // src/recipes/prismic-ci/index.ts
184
+ var BRANCH_PREFIX = "maint/prismic-ci-";
185
+ var PRETTIER_TIMEOUT_MS = 6e4;
186
+ var resultOf = (site, status, notes, commits = []) => ({
187
+ recipe: "prismic-ci",
188
+ site: siteLabel(site),
189
+ status,
190
+ commits,
191
+ notes
192
+ });
193
+ var messageOf = (err) => err instanceof Error ? err.message : String(err);
194
+ function sameWorkflow(current, canonical) {
195
+ const norm = (s) => s.replace(/\r\n/g, "\n").replace(/\s+$/, "");
196
+ return norm(current) === norm(canonical);
197
+ }
198
+ async function prismicCi(site, deps = {}) {
199
+ const repo = site.gitRepo;
200
+ if (!repo) {
201
+ return resultOf(site, "failed", "no Git repo on this site (set Airtable 'Git repo')");
202
+ }
203
+ if (!isOwnerRepo(repo)) {
204
+ return resultOf(
205
+ site,
206
+ "failed",
207
+ `refusing to act on malformed repo identity: expected "owner/repo", got ${JSON.stringify(repo)}`
208
+ );
209
+ }
210
+ let isPrismic;
211
+ try {
212
+ isPrismic = await readPrismicConfig(site.path) !== null;
213
+ } catch (err) {
214
+ return resultOf(site, "failed", `could not read the Prismic config: ${messageOf(err)}`);
215
+ }
216
+ if (!isPrismic) return resultOf(site, "noop", "not a Prismic site (no repositoryName) \u2014 skipped");
217
+ const pin = deps.pin ?? REUSABLE_WORKFLOW_PIN;
218
+ if (!isPinResolved(pin)) {
219
+ return resultOf(
220
+ site,
221
+ "failed",
222
+ `reusable-workflow pin is unresolved (${pin.sha}) \u2014 publish + tag the workflow in reddoorla/.github and set REUSABLE_WORKFLOW_PIN before rolling out`
223
+ );
224
+ }
225
+ const workflow = pin === REUSABLE_WORKFLOW_PIN ? PRISMIC_CI_WORKFLOW : prismicCiWorkflow(pin);
226
+ const locked = await readLockedCliVersion(site.path);
227
+ if (!locked.ok) {
228
+ return resultOf(
229
+ site,
230
+ "failed",
231
+ `cannot establish which @reddoorla/maintenance version this repo's CI would run (${locked.reason}) \u2014 refusing to install a workflow that may not run`
232
+ );
233
+ }
234
+ if (!atLeast(locked.version, MIN_CLI_VERSION)) {
235
+ return resultOf(
236
+ site,
237
+ "failed",
238
+ `this repo's lockfile pins @reddoorla/maintenance ${locked.version}, which has no \`prismic-models\` command (first shipped in ${MIN_CLI_VERSION}) \u2014 bump the dependency and commit the lockfile first, or the workflow fails on its first model PR`
239
+ );
240
+ }
241
+ const ghConfig = readGitHubConfig();
242
+ if (!deps.github && !ghConfig) return resultOf(site, "failed", "GITHUB_TOKEN not set");
243
+ const gh = deps.github ?? makeGitHub({ token: ghConfig.token });
244
+ const spawn = deps.spawn ?? defaultSpawn;
245
+ let hasSecret;
246
+ try {
247
+ hasSecret = await gh.secretExists(repo, SECRET);
248
+ } catch (err) {
249
+ return resultOf(
250
+ site,
251
+ "failed",
252
+ `could not determine whether ${repo} has the ${SECRET} secret (${messageOf(err)}) \u2014 refusing to install a workflow that may have no token`
253
+ );
254
+ }
255
+ if (!hasSecret) {
256
+ return resultOf(
257
+ site,
258
+ "failed",
259
+ `${repo} has no ${SECRET} Actions secret \u2014 the workflow reds the repo on its first model PR without it. Mint one, then: gh secret set ${SECRET} --repo ${repo}`
260
+ );
261
+ }
262
+ let base;
263
+ try {
264
+ base = await gh.defaultBranch(repo);
265
+ } catch (err) {
266
+ return resultOf(
267
+ site,
268
+ "failed",
269
+ `could not read the default branch of ${repo}: ${messageOf(err)}`
270
+ );
271
+ }
272
+ if (base !== APPLY_BRANCH) {
273
+ return resultOf(
274
+ site,
275
+ "failed",
276
+ `default branch of ${repo} is ${base}, not ${APPLY_BRANCH} \u2014 the reusable workflow's apply job guards refs/heads/${APPLY_BRANCH}, so merged model changes would never reach Prismic`
277
+ );
278
+ }
279
+ const existing = await gh.fileContentsOnBranch(repo, base, WORKFLOW_PATH);
280
+ if (existing !== null && sameWorkflow(existing, workflow)) {
281
+ return resultOf(site, "noop", `delivery workflow already current on ${base}`);
282
+ }
283
+ const open = (await gh.openPullRequests(repo)).find((pr) => pr.headRef.startsWith(BRANCH_PREFIX));
284
+ if (open) {
285
+ return resultOf(site, "noop", `delivery workflow PR already open: ${open.url}`);
286
+ }
287
+ if (!await isWorkingTreeClean(site.path)) {
288
+ return resultOf(site, "failed", "working tree not clean \u2014 commit or stash first");
289
+ }
290
+ let original = null;
291
+ try {
292
+ original = await currentBranch(site.path);
293
+ } catch {
294
+ }
295
+ const branch = branchName("prismic-ci");
296
+ const commits = [];
297
+ let pushedOrOpened = false;
298
+ try {
299
+ await createBranch(site.path, branch);
300
+ const dest = join2(site.path, WORKFLOW_PATH);
301
+ await mkdir(dirname(dest), { recursive: true });
302
+ await writeFile(dest, workflow, "utf-8");
303
+ const notes = [];
304
+ const bin = await (deps.resolvePrettier ?? resolveTargetPrettier)(site.path);
305
+ if (bin === null) {
306
+ notes.push(PRETTIER_FLAG_NOTE);
307
+ } else if (!await formatWithPrettier(spawn, site.path, [WORKFLOW_PATH], {
308
+ bin,
309
+ timeoutMs: PRETTIER_TIMEOUT_MS
310
+ })) {
311
+ notes.push(PRETTIER_FLAG_NOTE);
312
+ } else if (!sameWorkflow(await readFile2(dest, "utf-8"), workflow)) {
313
+ notes.push(
314
+ "this site's prettier reformatted the workflow \u2014 re-runs will not match it as current"
315
+ );
316
+ }
317
+ const sha = await commit(site.path, "ci: deliver Prismic model changes from merged PRs");
318
+ if (!sha) {
319
+ return resultOf(
320
+ site,
321
+ "noop",
322
+ `${WORKFLOW_PATH} already present and identical in the checkout`
323
+ );
324
+ }
325
+ commits.push(sha);
326
+ pushedOrOpened = true;
327
+ await (deps.pushBranch ?? push)(site.path, branch);
328
+ const pr = await gh.openPullRequest(repo, {
329
+ head: branch,
330
+ base,
331
+ title: "Deliver Prismic model changes from merged PRs",
332
+ body: "Adds the `prismic-models` workflow. On a PR touching `customtypes/**` or `src/lib/slices/**/model.json` it comments the model delta and writes nothing; on merge to main it pushes those models to Prismic. It can create and update models but never delete \u2014 a model present only in Prismic is reported, not touched."
333
+ });
334
+ notes.unshift(`opened PR ${pr.url}`);
335
+ return resultOf(site, "applied", notes.join("; "), commits);
336
+ } catch (err) {
337
+ return resultOf(site, "failed", messageOf(err), commits);
338
+ } finally {
339
+ if (original !== null && original !== branch) {
340
+ try {
341
+ await checkoutBranch(site.path, original);
342
+ if (!pushedOrOpened) await deleteBranch(site.path, branch);
343
+ } catch (err) {
344
+ console.warn(
345
+ `warning: could not restore branch ${original} after prismic-ci: ${messageOf(err)}`
346
+ );
347
+ }
348
+ }
349
+ }
350
+ }
351
+
352
+ // src/cli/commands/prismic-ci.ts
353
+ var messageOf2 = (err) => err instanceof Error ? err.message : String(err);
354
+ var failedRow = (site, notes) => ({
355
+ recipe: "prismic-ci",
356
+ site,
357
+ status: "failed",
358
+ commits: [],
359
+ notes
360
+ });
361
+ function formatPrismicCiResults(results) {
362
+ const lines = results.map((r) => `[${r.site}] ${r.status}: ${r.notes ?? ""}`.trimEnd());
363
+ const n = (s) => results.filter((r) => r.status === s).length;
364
+ const failed = n("failed");
365
+ lines.push("");
366
+ if (failed > 0 && n("applied") === 0) {
367
+ lines.push(
368
+ `\u26D4 NO SITE GOT THE DELIVERY WORKFLOW. ${failed} of ${results.length} site(s) failed and not one pull request was opened, so no site's model changes reach Prismic on merge. Do NOT read this run as a rollout.`
369
+ );
370
+ lines.push("");
371
+ }
372
+ lines.push(`${n("applied")} applied, ${n("noop")} noop, ${failed} failed.`);
373
+ return lines.join("\n");
374
+ }
375
+ async function checkoutFailure(repoRoot) {
376
+ let entries;
377
+ try {
378
+ entries = await readdir(repoRoot);
379
+ } catch (e) {
380
+ return `cannot read this checkout at ${repoRoot}: ${messageOf2(e)}`;
381
+ }
382
+ return noWorkingTreeFailure(
383
+ repoRoot,
384
+ entries,
385
+ "No delivery workflow was proposed for it and no pull request was opened"
386
+ );
387
+ }
388
+ async function runPrismicCiCommand(site, opts, deps = {}) {
389
+ const cwd = opts.cwd ? resolve(opts.cwd) : process.cwd();
390
+ let sites = await resolveSites({
391
+ ...site !== void 0 ? { site } : {},
392
+ ...opts.fleet !== void 0 ? { fleet: opts.fleet } : {},
393
+ // Passed through because `--fleet airtable` derives each site's path from
394
+ // it; without it the keyword inventory would resolve paths under a different
395
+ // workdir than the one this run then prepares and commits in.
396
+ ...opts.workdir !== void 0 ? { workdir: opts.workdir } : {},
397
+ cwd
398
+ });
399
+ if (sites.length === 0) {
400
+ return {
401
+ output: `the inventory resolved NO SITES, so no site was offered the delivery workflow. This is not a delivered fleet \u2014 check the inventory (an Airtable view filter, an empty JSON file, a dynamic inventory returning []). Do NOT read this exit as a rollout.`,
402
+ code: 1
403
+ };
404
+ }
405
+ let skipped = [];
406
+ if (opts.fleet) {
407
+ const prep = await prepareFleetSites(sites, { workdir: opts.workdir ?? fleetWorkdir() });
408
+ sites = prep.prepared;
409
+ skipped = prep.skipped;
410
+ }
411
+ const pin = deps.pin ?? REUSABLE_WORKFLOW_PIN;
412
+ const pinUnresolved = !isPinResolved(pin) ? `\u26D4 the reusable-workflow pin is unresolved (${pin.sha}) \u2014 every site below would be REFUSED, not delivered. Publish and tag the workflow in reddoorla/.github, then set REUSABLE_WORKFLOW_PIN.` : "";
413
+ if (opts.dry) {
414
+ const lines = sites.map(
415
+ (s) => `[${siteLabel(s)}] would be offered the delivery workflow (no gate was evaluated: the secret, default-branch and already-delivered checks run only on a real run)`
416
+ );
417
+ return {
418
+ output: appendSkipNotice(
419
+ [pinUnresolved, lines.join("\n")].filter((s) => s !== "").join("\n\n"),
420
+ skipped
421
+ ),
422
+ code: pinUnresolved === "" ? 0 : 1
423
+ };
424
+ }
425
+ const run = deps.runRecipe ?? ((s) => prismicCi(s, { pin }));
426
+ const results = await runRecipeOverSites("prismic-ci", sites, async (s) => {
427
+ const failure = await checkoutFailure(s.path);
428
+ return failure ? failedRow(siteLabel(s), failure) : run(s);
429
+ });
430
+ for (const s of skipped) {
431
+ results.push(
432
+ failedRow(
433
+ s.site,
434
+ `could not prepare this checkout: ${s.reason}. No delivery workflow was proposed for it \u2014 this is NOT "this site already has one".`
435
+ )
436
+ );
437
+ }
438
+ return {
439
+ output: appendSkipNotice(formatPrismicCiResults(results), skipped),
440
+ code: results.some((r) => r.status === "failed") ? 1 : 0
441
+ };
442
+ }
443
+ export {
444
+ formatPrismicCiResults,
445
+ runPrismicCiCommand
446
+ };
447
+ //# sourceMappingURL=prismic-ci-4PDATHU6.js.map