@caelo-cms/provisioning 0.11.9 → 0.11.11

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 (352) hide show
  1. package/dist/adapter.d.ts +6 -0
  2. package/dist/adapter.d.ts.map +1 -1
  3. package/dist/admin-domain.d.ts +10 -1
  4. package/dist/admin-domain.d.ts.map +1 -1
  5. package/dist/admin-domain.js +13 -3
  6. package/dist/admin-domain.js.map +1 -1
  7. package/dist/adopt-existing.d.ts +12 -3
  8. package/dist/adopt-existing.d.ts.map +1 -1
  9. package/dist/adopt-existing.js +143 -0
  10. package/dist/adopt-existing.js.map +1 -1
  11. package/dist/agent/command.d.ts +23 -0
  12. package/dist/agent/command.d.ts.map +1 -1
  13. package/dist/agent/command.js +32 -9
  14. package/dist/agent/command.js.map +1 -1
  15. package/dist/agent/run.d.ts +2 -0
  16. package/dist/agent/run.d.ts.map +1 -1
  17. package/dist/agent/run.js +5 -1
  18. package/dist/agent/run.js.map +1 -1
  19. package/dist/agent-db.js +69 -10
  20. package/dist/aws-task-roles.d.ts +4 -2
  21. package/dist/aws-task-roles.d.ts.map +1 -1
  22. package/dist/aws-task-roles.js +4 -1
  23. package/dist/aws-task-roles.js.map +1 -1
  24. package/dist/caddy.d.ts +21 -4
  25. package/dist/caddy.d.ts.map +1 -1
  26. package/dist/caddy.js +27 -3
  27. package/dist/caddy.js.map +1 -1
  28. package/dist/cli-routing.js +1 -1
  29. package/dist/cli-routing.js.map +1 -1
  30. package/dist/cli.js +68 -7
  31. package/dist/cli.js.map +1 -1
  32. package/dist/cloudsql-tls.d.ts +93 -0
  33. package/dist/cloudsql-tls.d.ts.map +1 -0
  34. package/dist/cloudsql-tls.js +295 -0
  35. package/dist/cloudsql-tls.js.map +1 -0
  36. package/dist/compose.d.ts +43 -6
  37. package/dist/compose.d.ts.map +1 -1
  38. package/dist/compose.js +148 -23
  39. package/dist/compose.js.map +1 -1
  40. package/dist/converge-checkpoint.d.ts +1 -0
  41. package/dist/converge-checkpoint.d.ts.map +1 -1
  42. package/dist/converge-checkpoint.js +8 -1
  43. package/dist/converge-checkpoint.js.map +1 -1
  44. package/dist/converge-db-trust.d.ts +44 -0
  45. package/dist/converge-db-trust.d.ts.map +1 -0
  46. package/dist/converge-db-trust.js +158 -0
  47. package/dist/converge-db-trust.js.map +1 -0
  48. package/dist/converge-job-gcp.d.ts +5 -2
  49. package/dist/converge-job-gcp.d.ts.map +1 -1
  50. package/dist/converge-job-gcp.js +11 -13
  51. package/dist/converge-job-gcp.js.map +1 -1
  52. package/dist/converge-job-preflight.d.ts.map +1 -1
  53. package/dist/converge-job-preflight.js +8 -0
  54. package/dist/converge-job-preflight.js.map +1 -1
  55. package/dist/converge-job.d.ts +17 -0
  56. package/dist/converge-job.d.ts.map +1 -1
  57. package/dist/converge-job.js +12 -0
  58. package/dist/converge-job.js.map +1 -1
  59. package/dist/deployed-release.d.ts +4 -1
  60. package/dist/deployed-release.d.ts.map +1 -1
  61. package/dist/deployed-release.js +18 -8
  62. package/dist/deployed-release.js.map +1 -1
  63. package/dist/gcp-names.d.ts +34 -0
  64. package/dist/gcp-names.d.ts.map +1 -1
  65. package/dist/gcp-names.js +45 -0
  66. package/dist/gcp-names.js.map +1 -1
  67. package/dist/gcp-url-map.d.ts.map +1 -1
  68. package/dist/gcp-url-map.js +6 -2
  69. package/dist/gcp-url-map.js.map +1 -1
  70. package/dist/index.d.ts +3 -2
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +2 -1
  73. package/dist/index.js.map +1 -1
  74. package/dist/infra-contract.d.ts +1 -1
  75. package/dist/infra-contract.d.ts.map +1 -1
  76. package/dist/infra-contract.js +45 -1
  77. package/dist/infra-contract.js.map +1 -1
  78. package/dist/install-job.d.ts +4 -2
  79. package/dist/install-job.d.ts.map +1 -1
  80. package/dist/install-job.js +4 -1
  81. package/dist/install-job.js.map +1 -1
  82. package/dist/install-state.d.ts +13 -0
  83. package/dist/install-state.d.ts.map +1 -1
  84. package/dist/install-state.js +17 -4
  85. package/dist/install-state.js.map +1 -1
  86. package/dist/lifecycle.d.ts.map +1 -1
  87. package/dist/lifecycle.js +20 -8
  88. package/dist/lifecycle.js.map +1 -1
  89. package/dist/mcp-auth-proxy-setup.d.ts +48 -0
  90. package/dist/mcp-auth-proxy-setup.d.ts.map +1 -0
  91. package/dist/mcp-auth-proxy-setup.js +280 -0
  92. package/dist/mcp-auth-proxy-setup.js.map +1 -0
  93. package/dist/migration-runner.d.ts.map +1 -1
  94. package/dist/migration-runner.js +8 -3
  95. package/dist/migration-runner.js.map +1 -1
  96. package/dist/migration-targets.d.ts +11 -0
  97. package/dist/migration-targets.d.ts.map +1 -0
  98. package/dist/migration-targets.js +12 -0
  99. package/dist/migration-targets.js.map +1 -0
  100. package/dist/operator-access.d.ts +10 -0
  101. package/dist/operator-access.d.ts.map +1 -1
  102. package/dist/operator-access.js +5 -0
  103. package/dist/operator-access.js.map +1 -1
  104. package/dist/pool-budget-stack.d.ts +13 -1
  105. package/dist/pool-budget-stack.d.ts.map +1 -1
  106. package/dist/pool-budget-stack.js +11 -1
  107. package/dist/pool-budget-stack.js.map +1 -1
  108. package/dist/public-role-isolation.d.ts +7 -3
  109. package/dist/public-role-isolation.d.ts.map +1 -1
  110. package/dist/public-role-isolation.js +25 -13
  111. package/dist/public-role-isolation.js.map +1 -1
  112. package/dist/release-contract.d.ts.map +1 -1
  113. package/dist/release-contract.js +3 -0
  114. package/dist/release-contract.js.map +1 -1
  115. package/dist/release-manifest.d.ts +25 -1
  116. package/dist/release-manifest.d.ts.map +1 -1
  117. package/dist/release-manifest.js +36 -3
  118. package/dist/release-manifest.js.map +1 -1
  119. package/dist/remote-mcp.d.ts +55 -18
  120. package/dist/remote-mcp.d.ts.map +1 -1
  121. package/dist/remote-mcp.js +307 -77
  122. package/dist/remote-mcp.js.map +1 -1
  123. package/dist/runtime-secrets.d.ts +11 -0
  124. package/dist/runtime-secrets.d.ts.map +1 -1
  125. package/dist/runtime-secrets.js +40 -25
  126. package/dist/runtime-secrets.js.map +1 -1
  127. package/dist/scheduler-setup.d.ts +75 -0
  128. package/dist/scheduler-setup.d.ts.map +1 -0
  129. package/dist/scheduler-setup.js +331 -0
  130. package/dist/scheduler-setup.js.map +1 -0
  131. package/dist/seal-key-rotation.d.ts +7 -7
  132. package/dist/seal-key-rotation.d.ts.map +1 -1
  133. package/dist/seal-key-rotation.js +22 -22
  134. package/dist/seal-key-rotation.js.map +1 -1
  135. package/dist/self-hosted-db-tls.d.ts +37 -0
  136. package/dist/self-hosted-db-tls.d.ts.map +1 -0
  137. package/dist/self-hosted-db-tls.js +220 -0
  138. package/dist/self-hosted-db-tls.js.map +1 -0
  139. package/dist/self-hosted-release.d.ts +3 -1
  140. package/dist/self-hosted-release.d.ts.map +1 -1
  141. package/dist/self-hosted-release.js +33 -9
  142. package/dist/self-hosted-release.js.map +1 -1
  143. package/dist/self-hosted-roles.d.ts +43 -2
  144. package/dist/self-hosted-roles.d.ts.map +1 -1
  145. package/dist/self-hosted-roles.js +87 -1
  146. package/dist/self-hosted-roles.js.map +1 -1
  147. package/dist/self-hosted-scheduler-interval.d.ts +21 -0
  148. package/dist/self-hosted-scheduler-interval.d.ts.map +1 -0
  149. package/dist/self-hosted-scheduler-interval.js +68 -0
  150. package/dist/self-hosted-scheduler-interval.js.map +1 -0
  151. package/dist/self-hosted-start.d.ts +0 -21
  152. package/dist/self-hosted-start.d.ts.map +1 -1
  153. package/dist/self-hosted-start.js +39 -1
  154. package/dist/self-hosted-start.js.map +1 -1
  155. package/dist/self-hosted-upgrade.d.ts +19 -7
  156. package/dist/self-hosted-upgrade.d.ts.map +1 -1
  157. package/dist/self-hosted-upgrade.js +78 -25
  158. package/dist/self-hosted-upgrade.js.map +1 -1
  159. package/dist/stack-contract.d.ts +234 -28
  160. package/dist/stack-contract.d.ts.map +1 -1
  161. package/dist/stack-contract.js +397 -39
  162. package/dist/stack-contract.js.map +1 -1
  163. package/dist/stack-converge.d.ts +31 -0
  164. package/dist/stack-converge.d.ts.map +1 -1
  165. package/dist/stack-converge.js +71 -30
  166. package/dist/stack-converge.js.map +1 -1
  167. package/dist/staging-database.d.ts +22 -0
  168. package/dist/staging-database.d.ts.map +1 -0
  169. package/dist/staging-database.js +117 -0
  170. package/dist/staging-database.js.map +1 -0
  171. package/dist/upgrade/app-roll.d.ts +25 -4
  172. package/dist/upgrade/app-roll.d.ts.map +1 -1
  173. package/dist/upgrade/app-roll.js +63 -17
  174. package/dist/upgrade/app-roll.js.map +1 -1
  175. package/dist/upgrade/converge.d.ts +5 -0
  176. package/dist/upgrade/converge.d.ts.map +1 -1
  177. package/dist/upgrade/converge.js +207 -20
  178. package/dist/upgrade/converge.js.map +1 -1
  179. package/dist/upgrade/health.d.ts +31 -7
  180. package/dist/upgrade/health.d.ts.map +1 -1
  181. package/dist/upgrade/health.js +41 -17
  182. package/dist/upgrade/health.js.map +1 -1
  183. package/dist/upgrade/image-forms.d.ts +1 -1
  184. package/dist/upgrade/image-forms.d.ts.map +1 -1
  185. package/dist/upgrade/image-forms.js +24 -7
  186. package/dist/upgrade/image-forms.js.map +1 -1
  187. package/dist/upgrade/release-images.d.ts +12 -3
  188. package/dist/upgrade/release-images.d.ts.map +1 -1
  189. package/dist/upgrade/release-images.js +13 -4
  190. package/dist/upgrade/release-images.js.map +1 -1
  191. package/dist/upgrade/upgrade.d.ts +19 -3
  192. package/dist/upgrade/upgrade.d.ts.map +1 -1
  193. package/dist/upgrade/upgrade.js +37 -2
  194. package/dist/upgrade/upgrade.js.map +1 -1
  195. package/dist/upgrader-gcp.d.ts +13 -0
  196. package/dist/upgrader-gcp.d.ts.map +1 -1
  197. package/dist/upgrader-gcp.js +50 -1
  198. package/dist/upgrader-gcp.js.map +1 -1
  199. package/dist/upgrader-iam-preflight.d.ts.map +1 -1
  200. package/dist/upgrader-iam-preflight.js +6 -1
  201. package/dist/upgrader-iam-preflight.js.map +1 -1
  202. package/dist/upgrader-job.d.ts +1 -1
  203. package/dist/upgrader-job.d.ts.map +1 -1
  204. package/dist/upgrader-job.js +20 -14
  205. package/dist/upgrader-job.js.map +1 -1
  206. package/dist/upgrader-records.d.ts +1 -1
  207. package/dist/upgrader-records.d.ts.map +1 -1
  208. package/dist/upgrader-records.js +26 -7
  209. package/dist/upgrader-records.js.map +1 -1
  210. package/dist/upgrader-setup.d.ts.map +1 -1
  211. package/dist/upgrader-setup.js +10 -5
  212. package/dist/upgrader-setup.js.map +1 -1
  213. package/dist/wizard.d.ts +7 -0
  214. package/dist/wizard.d.ts.map +1 -1
  215. package/dist/wizard.js +11 -0
  216. package/dist/wizard.js.map +1 -1
  217. package/dist/wizards/gcp-cost.d.ts +31 -0
  218. package/dist/wizards/gcp-cost.d.ts.map +1 -1
  219. package/dist/wizards/gcp-cost.js +103 -18
  220. package/dist/wizards/gcp-cost.js.map +1 -1
  221. package/dist/wizards/gcp.d.ts.map +1 -1
  222. package/dist/wizards/gcp.js +129 -27
  223. package/dist/wizards/gcp.js.map +1 -1
  224. package/package.json +2 -2
  225. package/src/adapter.ts +6 -0
  226. package/src/admin-domain.test.ts +9 -8
  227. package/src/admin-domain.ts +13 -3
  228. package/src/admin-memory.test.ts +2 -1
  229. package/src/adopt-existing.test.ts +85 -0
  230. package/src/adopt-existing.ts +141 -3
  231. package/src/agent/command.test.ts +49 -1
  232. package/src/agent/command.ts +39 -9
  233. package/src/agent/run.test.ts +19 -0
  234. package/src/agent/run.ts +11 -2
  235. package/src/aws-task-roles.ts +5 -2
  236. package/src/caddy-redirects.docker.test.ts +2 -0
  237. package/src/caddy-redirects.test.ts +4 -1
  238. package/src/caddy-validate.test.ts +7 -1
  239. package/src/caddy.test.ts +39 -1
  240. package/src/caddy.ts +36 -4
  241. package/src/checkpoint-secrets.test.ts +14 -6
  242. package/src/cli-routing.test.ts +1 -1
  243. package/src/cli-routing.ts +1 -1
  244. package/src/cli.ts +71 -5
  245. package/src/cloudsql-tls.test.ts +255 -0
  246. package/src/cloudsql-tls.ts +359 -0
  247. package/src/compose.ts +193 -24
  248. package/src/converge-checkpoint.ts +8 -1
  249. package/src/converge-db-trust.test.ts +237 -0
  250. package/src/converge-db-trust.ts +212 -0
  251. package/src/converge-job-gcp.ts +11 -12
  252. package/src/converge-job-preflight.test.ts +5 -0
  253. package/src/converge-job-preflight.ts +8 -0
  254. package/src/converge-job.test.ts +70 -0
  255. package/src/converge-job.ts +32 -0
  256. package/src/database-tls-builders.test.ts +56 -0
  257. package/src/deployed-release.test.ts +107 -40
  258. package/src/deployed-release.ts +30 -9
  259. package/src/gateway-env-isolation.test.ts +50 -12
  260. package/src/gcp-names.ts +56 -0
  261. package/src/gcp-url-map.test.ts +6 -8
  262. package/src/gcp-url-map.ts +6 -2
  263. package/src/index.test.ts +10 -4
  264. package/src/index.ts +7 -0
  265. package/src/infra-contract.test.ts +7 -3
  266. package/src/infra-contract.ts +45 -1
  267. package/src/install-job.ts +4 -1
  268. package/src/install-state.ts +33 -4
  269. package/src/lifecycle.ts +23 -11
  270. package/src/mcp-auth-proxy-setup.test.ts +305 -0
  271. package/src/mcp-auth-proxy-setup.ts +374 -0
  272. package/src/mcp-iap-stacks.test.ts +1 -1
  273. package/src/media-volume.test.ts +1 -1
  274. package/src/migration-runner.ts +14 -9
  275. package/src/migration-targets.ts +12 -0
  276. package/src/operator-access-stacks.test.ts +1 -1
  277. package/src/operator-access.test.ts +20 -4
  278. package/src/operator-access.ts +14 -0
  279. package/src/pool-budget-stack.ts +15 -0
  280. package/src/pool-budget-stacks.test.ts +39 -14
  281. package/src/public-role-isolation.test.ts +18 -8
  282. package/src/public-role-isolation.ts +31 -17
  283. package/src/release-contract.ts +3 -0
  284. package/src/release-manifest.test.ts +25 -0
  285. package/src/release-manifest.ts +59 -4
  286. package/src/remote-mcp-stack-config.test.ts +19 -9
  287. package/src/remote-mcp.test.ts +252 -57
  288. package/src/remote-mcp.ts +336 -77
  289. package/src/runtime-secrets.test.ts +37 -14
  290. package/src/runtime-secrets.ts +87 -27
  291. package/src/scheduler-setup.test.ts +201 -0
  292. package/src/scheduler-setup.ts +375 -0
  293. package/src/seal-key-rotation.test.ts +2 -2
  294. package/src/seal-key-rotation.ts +25 -25
  295. package/src/self-hosted-backup.test.ts +1 -0
  296. package/src/self-hosted-compose.test.ts +180 -6
  297. package/src/self-hosted-db-tls.test.ts +111 -0
  298. package/src/self-hosted-db-tls.ts +287 -0
  299. package/src/self-hosted-release-resolve.test.ts +71 -0
  300. package/src/self-hosted-release.ts +41 -11
  301. package/src/self-hosted-roles.integration.test.ts +2 -0
  302. package/src/self-hosted-roles.test.ts +87 -3
  303. package/src/self-hosted-roles.ts +101 -3
  304. package/src/self-hosted-scheduler-interval.test.ts +66 -0
  305. package/src/self-hosted-scheduler-interval.ts +79 -0
  306. package/src/self-hosted-start.test.ts +35 -2
  307. package/src/self-hosted-start.ts +20 -2
  308. package/src/self-hosted-upgrade.test.ts +104 -14
  309. package/src/self-hosted-upgrade.ts +123 -31
  310. package/src/stack-contract-parity.test.ts +79 -12
  311. package/src/stack-contract.test.ts +199 -31
  312. package/src/stack-contract.ts +472 -45
  313. package/src/stack-converge-secrets.test.ts +28 -13
  314. package/src/stack-converge.test.ts +203 -28
  315. package/src/stack-converge.ts +92 -30
  316. package/src/staging-database.test.ts +114 -0
  317. package/src/staging-database.ts +148 -0
  318. package/src/state-store.test.ts +2 -1
  319. package/src/upgrade/app-roll.ts +97 -19
  320. package/src/upgrade/converge.ts +249 -19
  321. package/src/upgrade/health.test.ts +63 -25
  322. package/src/upgrade/health.ts +54 -22
  323. package/src/upgrade/image-forms.test.ts +34 -0
  324. package/src/upgrade/image-forms.ts +23 -8
  325. package/src/upgrade/release-images.test.ts +5 -1
  326. package/src/upgrade/release-images.ts +22 -6
  327. package/src/upgrade/upgrade.test.ts +438 -46
  328. package/src/upgrade/upgrade.ts +64 -6
  329. package/src/upgrader-gcp.ts +66 -3
  330. package/src/upgrader-iam-preflight.test.ts +19 -0
  331. package/src/upgrader-iam-preflight.ts +6 -0
  332. package/src/upgrader-job.test.ts +101 -27
  333. package/src/upgrader-job.ts +27 -14
  334. package/src/upgrader-records.test.ts +97 -12
  335. package/src/upgrader-records.ts +28 -11
  336. package/src/upgrader-setup.test.ts +2 -0
  337. package/src/upgrader-setup.ts +10 -4
  338. package/src/wizard.ts +19 -0
  339. package/src/wizards/gcp-cost.test.ts +103 -0
  340. package/src/wizards/gcp-cost.ts +125 -18
  341. package/src/wizards/gcp.ts +164 -22
  342. package/stacks/aws/Pulumi.yaml +1 -1
  343. package/stacks/aws/index.ts +72 -14
  344. package/stacks/azure/index.ts +108 -21
  345. package/stacks/gcp/Pulumi.yaml +1 -1
  346. package/stacks/gcp/README.md +1 -0
  347. package/stacks/gcp/index.ts +133 -24
  348. package/stacks/gcp-firebase/Pulumi.yaml +1 -1
  349. package/stacks/gcp-firebase/index.ts +212 -34
  350. package/stacks/self-hosted/Pulumi.yaml +3 -0
  351. package/stacks/self-hosted/README.md +6 -1
  352. package/stacks/self-hosted/index.ts +40 -5
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,38 @@ export interface CostEstimateInputs {
25
25
  provider?: "gcp" | "gcp-firebase";
26
26
  /** #607 — the install region; shown in the table (prices are {@link PRICED_REGION} rates). */
27
27
  region: string;
28
+ /** #1140 — the `schedulerIntervalMinutes` knob (1–15); undefined: the default. */
29
+ schedulerIntervalMinutes?: number;
28
30
  }
31
+ /**
32
+ * #1140 — Workflows steps one scheduler tick costs (scheduler-setup.ts
33
+ * schedulerWorkflowSource): the claims `assign`, the signJwt call (a Google
34
+ * API, billed as an internal step), the `return` — and the POST to the
35
+ * admin, the one external HTTP step.
36
+ */
37
+ export declare const SCHEDULER_TICK_STEPS: {
38
+ readonly internal: 3;
39
+ readonly external: 1;
40
+ };
41
+ /**
42
+ * #1140 — what the scheduler tick costs a month at `minutes` between ticks:
43
+ * the Cloud Scheduler job (priced as paid — the 3 free jobs are shared
44
+ * with every other project on the billing account) plus the Workflows
45
+ * steps past the free tier. What the tick costs on the admin's side is
46
+ * priced on the admin's own line ({@link adminKeptWarmByTicks}).
47
+ */
48
+ export declare function schedulerTickMonthlyUsd(minutes: number): number;
49
+ /**
50
+ * #1140 — whether the scheduler tick keeps a scale-to-zero admin instance
51
+ * up around the clock. Cloud Run keeps an idle instance for up to 15
52
+ * minutes after its last request, and the tick comes at most every 15
53
+ * minutes, so with CPU always allocated (`SERVICE_CPU_IDLE.admin` false
54
+ * until #1361) the instance never stops and is billed every second. With
55
+ * request-billed CPU an idle instance costs nothing between ticks.
56
+ */
57
+ export declare function adminKeptWarmByTicks(adminMinInstances: number): boolean;
58
+ /** One always-on admin instance (1 vCPU, `gib` memory) a month at instance-based list rates. */
59
+ export declare function alwaysOnAdminInstanceUsd(gib: number): number;
29
60
  export declare function estimateGcpCost(inputs: CostEstimateInputs): {
30
61
  lines: CostLine[];
31
62
  totalUsd: number;
@@ -1 +1 @@
1
- {"version":3,"file":"gcp-cost.d.ts","sourceRoot":"","sources":["../../src/wizards/gcp-cost.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC;IAClC,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAC;CAChB;AAmBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG;IAC3D,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;CACpB,CA0IA"}
1
+ {"version":3,"file":"gcp-cost.d.ts","sourceRoot":"","sources":["../../src/wizards/gcp-cost.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC;IAClC,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;CAAwC,CAAC;AAgB1E;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAe/D;AAYD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,gGAAgG;AAChG,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG5D;AAmBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG;IAC3D,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;CACpB,CAoKA"}
@@ -9,7 +9,66 @@
9
9
  * floor cost (idle + scale-to-zero traffic). Real usage adds egress
10
10
  * + AI calls + storage growth on top.
11
11
  */
12
- import { ADMIN_MEMORY_DEFAULT, memoryQuantityMiB } from "../stack-contract.js";
12
+ import { ADMIN_MEMORY_DEFAULT, memoryQuantityMiB, parseSchedulerIntervalMinutes, SERVICE_CPU_IDLE, } from "../stack-contract.js";
13
+ /**
14
+ * #1140 — Workflows steps one scheduler tick costs (scheduler-setup.ts
15
+ * schedulerWorkflowSource): the claims `assign`, the signJwt call (a Google
16
+ * API, billed as an internal step), the `return` — and the POST to the
17
+ * admin, the one external HTTP step.
18
+ */
19
+ export const SCHEDULER_TICK_STEPS = { internal: 3, external: 1 };
20
+ /**
21
+ * Workflows list prices (USD, cloud.google.com/workflows/pricing, as of
22
+ * 2026-11) and the monthly free tier per billing account.
23
+ */
24
+ const WORKFLOWS_PRICE = {
25
+ internalPer1000: 0.01,
26
+ externalPer1000: 0.025,
27
+ freeInternal: 5_000,
28
+ freeExternal: 2_000,
29
+ };
30
+ /** Cloud Scheduler: $0.10 per job a month; the first 3 per billing account are free. */
31
+ const SCHEDULER_JOB_USD = 0.1;
32
+ /**
33
+ * #1140 — what the scheduler tick costs a month at `minutes` between ticks:
34
+ * the Cloud Scheduler job (priced as paid — the 3 free jobs are shared
35
+ * with every other project on the billing account) plus the Workflows
36
+ * steps past the free tier. What the tick costs on the admin's side is
37
+ * priced on the admin's own line ({@link adminKeptWarmByTicks}).
38
+ */
39
+ export function schedulerTickMonthlyUsd(minutes) {
40
+ const ticks = Math.ceil((30 * 24 * 60) / parseSchedulerIntervalMinutes(minutes));
41
+ const internal = Math.max(0, ticks * SCHEDULER_TICK_STEPS.internal - WORKFLOWS_PRICE.freeInternal);
42
+ const external = Math.max(0, ticks * SCHEDULER_TICK_STEPS.external - WORKFLOWS_PRICE.freeExternal);
43
+ const usd = SCHEDULER_JOB_USD +
44
+ (internal / 1000) * WORKFLOWS_PRICE.internalPer1000 +
45
+ (external / 1000) * WORKFLOWS_PRICE.externalPer1000;
46
+ return Math.round(usd * 100) / 100;
47
+ }
48
+ /**
49
+ * Cloud Run instance-based billing (CPU always allocated) list rates, USD,
50
+ * tier-1 region, cloud.google.com/run/pricing as of 2026-11. The free tier
51
+ * is left out: it is shared by every service on the billing account.
52
+ */
53
+ const CLOUD_RUN_INSTANCE_PRICE = { vcpuSecond: 0.000018, gibSecond: 0.000002 };
54
+ /** Seconds in the 30-day month the table prices. */
55
+ const MONTH_SECONDS = 30 * 24 * 60 * 60;
56
+ /**
57
+ * #1140 — whether the scheduler tick keeps a scale-to-zero admin instance
58
+ * up around the clock. Cloud Run keeps an idle instance for up to 15
59
+ * minutes after its last request, and the tick comes at most every 15
60
+ * minutes, so with CPU always allocated (`SERVICE_CPU_IDLE.admin` false
61
+ * until #1361) the instance never stops and is billed every second. With
62
+ * request-billed CPU an idle instance costs nothing between ticks.
63
+ */
64
+ export function adminKeptWarmByTicks(adminMinInstances) {
65
+ return adminMinInstances === 0 && !SERVICE_CPU_IDLE.admin;
66
+ }
67
+ /** One always-on admin instance (1 vCPU, `gib` memory) a month at instance-based list rates. */
68
+ export function alwaysOnAdminInstanceUsd(gib) {
69
+ const perSecond = CLOUD_RUN_INSTANCE_PRICE.vcpuSecond + gib * CLOUD_RUN_INSTANCE_PRICE.gibSecond;
70
+ return Math.round(perSecond * MONTH_SECONDS);
71
+ }
13
72
  /** The region the price table's list rates are for. */
14
73
  const PRICED_REGION = "europe-west1";
15
74
  const SQL_TIER_USD = {
@@ -30,6 +89,7 @@ export function estimateGcpCost(inputs) {
30
89
  const sqlMultiplier = inputs.cloudSqlHa ? 2.0 : 1.0;
31
90
  const sqlMonthly = Math.round(sqlBase * sqlMultiplier);
32
91
  const provider = inputs.provider ?? "gcp";
92
+ const schedulerMinutes = parseSchedulerIntervalMinutes(inputs.schedulerIntervalMinutes);
33
93
  const adminMemory = inputs.adminMemory ?? ADMIN_MEMORY_DEFAULT;
34
94
  const adminMiB = memoryQuantityMiB(adminMemory);
35
95
  if (adminMiB === null) {
@@ -49,15 +109,20 @@ export function estimateGcpCost(inputs) {
49
109
  },
50
110
  {
51
111
  name: `Cloud Run admin (${adminMemory})`,
52
- // FIXME(issue #1140): ~$1 once the admin runs request-billed CPU
53
- // (SERVICE_CPU_IDLE). Until then each editing session is billed for
54
- // as long as the instance stays up, ~15 minutes past its last request.
55
- monthlyUsd: inputs.adminMinInstances === 0
56
- ? 7
57
- : Math.round(1 + inputs.adminMinInstances * perMinInstanceUsd),
58
- notes: inputs.adminMinInstances === 0
59
- ? "scale-to-zero, CPU always allocated while running; ~$7/mo light editorial use"
60
- : `${inputs.adminMinInstances} min-instance${inputs.adminMinInstances > 1 ? "s" : ""} (no cold start)`,
112
+ // FIXME(issue #1361): with request-billed CPU (SERVICE_CPU_IDLE) the
113
+ // ticks stop keeping the instance up and this line drops to ~$7 of
114
+ // editing sessions. Until then the scheduler tick (#1140) keeps one
115
+ // instance up around the clock, billed at the always-on rate.
116
+ monthlyUsd: adminKeptWarmByTicks(inputs.adminMinInstances)
117
+ ? alwaysOnAdminInstanceUsd(adminGiB)
118
+ : inputs.adminMinInstances === 0
119
+ ? 7
120
+ : Math.round(1 + inputs.adminMinInstances * perMinInstanceUsd),
121
+ notes: adminKeptWarmByTicks(inputs.adminMinInstances)
122
+ ? `scale-to-zero, but CPU is always allocated and the scheduler tick (every ${schedulerMinutes} min) comes before Cloud Run's 15-minute idle shutdown, so one instance (1 vCPU, ${adminMemory}) runs around the clock until request-billed CPU lands (#1361)`
123
+ : inputs.adminMinInstances === 0
124
+ ? "scale-to-zero, request-billed CPU; ~$7/mo light editorial use, ticks inside the free tier"
125
+ : `${inputs.adminMinInstances} min-instance${inputs.adminMinInstances > 1 ? "s" : ""} (no cold start); the scheduler tick adds nothing, the instance is up anyway`,
61
126
  },
62
127
  {
63
128
  name: "Quality checks (Cloud Run audit job)",
@@ -70,12 +135,22 @@ export function estimateGcpCost(inputs) {
70
135
  notes: "one short container per server-side screenshot or page render (~20-40 s at 1 vCPU / 2 GiB): ~$0.001 each, a 50-page site import ~$0.05; mostly in the free tier; capture bucket ~$0",
71
136
  },
72
137
  {
73
- name: "Cloud Run gateway",
138
+ // #1328 — on gcp-firebase the visitor gateway is the new
139
+ // `caelo-<env>-data-gateway` service; same billing either way.
140
+ name: provider === "gcp" ? "Cloud Run gateway" : "Cloud Run data gateway",
74
141
  monthlyUsd: inputs.gatewayMinInstances === 0 ? 1 : 1 + inputs.gatewayMinInstances * 15,
75
142
  notes: inputs.gatewayMinInstances === 0
76
143
  ? "scale-to-zero; ~$1/mo light traffic"
77
144
  : `${inputs.gatewayMinInstances} min-instance${inputs.gatewayMinInstances > 1 ? "s" : ""}`,
78
145
  },
146
+ {
147
+ // #1328 — remote MCP's sign-in service, its own service on every
148
+ // install (E14 a of #763): always provisioned, zero minimum instances,
149
+ // CPU only during requests, so it costs nothing while nobody connects.
150
+ name: "Cloud Run MCP-Auth-Proxy",
151
+ monthlyUsd: 0,
152
+ notes: "scale-to-zero, request-based CPU; only external AI apps' sign-in and MCP calls wake it, mostly in the free tier",
153
+ },
79
154
  // v0.3.3 — LB / Cloud CDN / Cloud Armor lines apply only to the
80
155
  // gcp variant. gcp-firebase has no LB (Firebase Hosting is the
81
156
  // edge); no Cloud CDN line (Firebase Hosting has its own CDN
@@ -101,12 +176,17 @@ export function estimateGcpCost(inputs) {
101
176
  : "Free tier — rate limit + OWASP basic rules",
102
177
  },
103
178
  {
104
- // #806 — the remote-MCP throttle (src/remote-mcp-edge.ts) is one
105
- // more rule on the gateway's policy; Cloud Armor Standard bills
106
- // each rule at about $1/mo.
107
- name: "Cloud Armor rule: remote MCP throttle",
108
- monthlyUsd: 1,
109
- notes: "Per-IP throttle for /api/mcp/* (remote MCP clients)",
179
+ // #1328 — the MCP-Auth-Proxy's own backend (serverless NEG +
180
+ // backend service, no extra LB fee: same URL map) with its own
181
+ // Cloud Armor policy carrying the remote-MCP throttle
182
+ // (src/remote-mcp-edge.ts) and the default rule. Cloud Armor
183
+ // Standard: $0.006849315/policy-hour (~$5/mo) and
184
+ // $0.001369863/rule-hour (~$1/mo), plus $0.75 per million
185
+ // requests on a global policy — cloud.google.com/armor/pricing,
186
+ // checked 2026-11-02.
187
+ name: "MCP-Auth-Proxy backend + Cloud Armor policy",
188
+ monthlyUsd: 7,
189
+ notes: "own policy ($5) with 2 rules ($2): per-IP throttle for remote MCP clients; requests ~$0",
110
190
  },
111
191
  ]
112
192
  : [
@@ -126,7 +206,7 @@ export function estimateGcpCost(inputs) {
126
206
  {
127
207
  name: "Secret Manager (runtime secrets)",
128
208
  monthlyUsd: 0.2,
129
- notes: "6 active versions free, then ~$0.06 each; the Google sign-in client (#914) and the remote-MCP seal key (#806)",
209
+ notes: "6 active versions free, then ~$0.06 each; the Google sign-in client (#914), the remote-MCP seal key (#806) and the staging database login's password (#1329; the staging database itself shares the Cloud SQL instance at no extra cost)",
130
210
  },
131
211
  {
132
212
  name: "BigQuery edge log sink",
@@ -143,6 +223,11 @@ export function estimateGcpCost(inputs) {
143
223
  monthlyUsd: 0,
144
224
  notes: "Hourly ~20 s job keeps Google IAP in step with the user list; within the Cloud Run free tier, 1 of 3 free scheduler jobs",
145
225
  },
226
+ {
227
+ name: `Scheduler tick (Cloud Scheduler + Workflows, every ${schedulerMinutes} min)`,
228
+ monthlyUsd: schedulerTickMonthlyUsd(schedulerMinutes),
229
+ notes: `one job starts a ${SCHEDULER_TICK_STEPS.internal + SCHEDULER_TICK_STEPS.external}-step workflow that calls the admin's periodic work and plugin workers; ~${Math.ceil((30 * 24 * 60) / schedulerMinutes)} ticks/mo; what the ticks cost on the admin is on the admin line`,
230
+ },
146
231
  ];
147
232
  // Cents, so a sub-dollar line (the KMS key) doesn't print float noise.
148
233
  const totalUsd = Math.round(lines.reduce((sum, l) => sum + l.monthlyUsd, 0) * 100) / 100;
@@ -1 +1 @@
1
- {"version":3,"file":"gcp-cost.js","sourceRoot":"","sources":["../../src/wizards/gcp-cost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gcp-cost.js","sourceRoot":"","sources":["../../src/wizards/gcp-cost.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gcp.d.ts","sourceRoot":"","sources":["../../src/wizards/gcp.ts"],"names":[],"mappings":"AAoHA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAO9C,OAAO,EAOL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAmB7B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2HrE;AAKD,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,cAAc,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAC;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4PzE"}
1
+ {"version":3,"file":"gcp.d.ts","sourceRoot":"","sources":["../../src/wizards/gcp.ts"],"names":[],"mappings":"AAyHA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAU9C,OAAO,EAOL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAoB7B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmIrE;AAKD,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,cAAc,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAC;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiRzE"}
@@ -28,6 +28,7 @@ import { randomBytes } from "node:crypto";
28
28
  import { existsSync, readFileSync } from "node:fs";
29
29
  import { homedir } from "node:os";
30
30
  import { join } from "node:path";
31
+ import { CLOUD_SQL_CA_BUNDLE, verifyFullQuery } from "@caelo-cms/shared";
31
32
  import { cancel, confirm, isCancel, log, note, select, spinner } from "@clack/prompts";
32
33
  import { bold, cyan, dim, green, red, yellow } from "kleur/colors";
33
34
  import { checkAdcImpersonation } from "../adc-impersonation.js";
@@ -42,7 +43,7 @@ import { checkDeployedRuntimeEnv, chooseImageDigests, readDeployedImageDigests,
42
43
  import { formatDnsRecordGroups, groupDnsRecords } from "../dns/groups.js";
43
44
  import { pickDnsAdapter } from "../dns/index.js";
44
45
  import { activeAccount, checkGcloudAuth, createProject, createServiceAccount, enableApis, gcloud, gcloudEnv, grantProvisionerRoles, linkBilling, listBillingAccounts, PROVISIONER_ROLE_LIST, projectDisplayName, projectExists, REQUIRED_API_LIST, serviceAccountExists, } from "../gcloud.js";
45
- import { GCP_STACK_ENV, upgraderServiceAccountEmail } from "../gcp-names.js";
46
+ import { GCP_STACK_ENV, schedulerServiceAccountEmail, upgraderServiceAccountEmail, } from "../gcp-names.js";
46
47
  import { INFRA_CONTRACT_VERSION } from "../infra-contract.js";
47
48
  import { INSTALL_JOB_NAME, INSTALL_JOB_ROLES, INSTALL_SETUP_LINK_SECRET, storeSetupLink, } from "../install-job.js";
48
49
  import { adoptStateBackend, ensureInstallDir, installRoot, installStagingHost, isStepDone, markStepDone, readLocalMetadata, readMetadata, readSecret, recordedImageDigests, recordImageDigests, recordInfraContractVersion, writeMetadata, writeSecret, } from "../install-state.js";
@@ -53,12 +54,13 @@ import { convergeKeylessProvisioner, PROVISIONER_ACCOUNT_ID, provisionerServiceA
53
54
  import { revokePublicRoleMemberships } from "../public-role-isolation.js";
54
55
  import { decideRegion, detectCliRegion, installableRegions, suggestRegion } from "../regions.js";
55
56
  import { checkRemoteMcpIdentityEnv, ensureRemoteMcpEdge, findRemoteMcpTarget, resolveStackRemoteMcpIdentity, } from "../remote-mcp.js";
57
+ import { ensureSchedulerTick } from "../scheduler-setup.js";
56
58
  import { selfCommand } from "../self-command.js";
57
- import { ABSENT_DEFAULT_FIREWALL_RULES, sameRemoteMcpIdentity, } from "../stack-contract.js";
59
+ import { ABSENT_DEFAULT_FIREWALL_RULES, cloudSqlPrivateDnsName, parseSchedulerIntervalMinutes, sameRemoteMcpIdentity, } from "../stack-contract.js";
58
60
  import { chooseInstallBackend, describeBackend, gcsBackendRecord, hasLocalPulumiState, installBackend, parseStateBackend, resolveBackend, } from "../state-backend.js";
59
61
  import { acquireStateLock, GcsStateStore } from "../state-store.js";
60
62
  import { createReleaseImageForms, platformDigestsOf } from "../upgrade/image-forms.js";
61
- import { releaseVersionForDigest, resolveOpsImageRef, verifyCosignAll, } from "../upgrade/release-images.js";
63
+ import { releaseImageRef, releaseVersionForDigest, resolveOpsImageRef, verifyCosignAll, } from "../upgrade/release-images.js";
62
64
  import { ensureUpgraderJob, resolveUpgraderTarget } from "../upgrader-setup.js";
63
65
  import { ensureUrlMapRedirectsAccess } from "../url-map-redirects-access.js";
64
66
  import { estimateGcpCost } from "./gcp-cost.js";
@@ -116,7 +118,15 @@ export async function runGcpWizard(opts) {
116
118
  // drops the LB / Cloud CDN / Cloud Armor lines (saves ~$19/mo
117
119
  // vs gcp). Default 'gcp' for backwards compatibility with
118
120
  // installs that don't set the field.
119
- const estimate = estimateGcpCost({ ...GCP_STACK_KNOB_DEFAULTS, provider, region });
121
+ const estimate = estimateGcpCost({
122
+ ...GCP_STACK_KNOB_DEFAULTS,
123
+ provider,
124
+ region,
125
+ // #1140 — the tick's line follows the knob the wizard recorded.
126
+ ...(meta?.schedulerIntervalMinutes !== undefined
127
+ ? { schedulerIntervalMinutes: meta.schedulerIntervalMinutes }
128
+ : {}),
129
+ });
120
130
  note([
121
131
  bold("Estimated monthly cost (resource floor — actual usage adds AI calls + egress + storage growth)"),
122
132
  ` ${estimate.regionNote}`,
@@ -205,7 +215,7 @@ export async function runGcpConverge(opts) {
205
215
  const deployed = isStepDone(installId, `pulumi-up-${projectId}`);
206
216
  if (deployed) {
207
217
  // The kept release must be able to use the env the stack deploys.
208
- const runtimeEnv = await checkDeployedRuntimeEnv({ projectId, region });
218
+ const runtimeEnv = await checkDeployedRuntimeEnv({ provider, projectId, region });
209
219
  if (!runtimeEnv.ok) {
210
220
  cancel(runtimeEnv.error);
211
221
  process.exit(1);
@@ -214,7 +224,7 @@ export async function runGcpConverge(opts) {
214
224
  const choice = await chooseImageDigests({
215
225
  recorded: recordedImageDigests(meta),
216
226
  deployed,
217
- readLive: () => readDeployedImageDigests({ projectId, region }),
227
+ readLive: () => readDeployedImageDigests({ provider, projectId, region }),
218
228
  resolveLatest: resolveImageDigests,
219
229
  });
220
230
  if (!choice.ok) {
@@ -351,17 +361,22 @@ export async function runGcpConverge(opts) {
351
361
  const keepSigner = upgraderReady || (await upgraderExists(projectId));
352
362
  // === 11.45. The converge job: releases that change the cloud setup (#819) ===
353
363
  const convergeReady = await stepConvergeJob(projectId, region, releaseVersion);
364
+ // === 11.47. The scheduler tick: periodic work + plugin workers (#1140) ===
365
+ // Before operator access, which keeps the scheduler's account on IAP.
366
+ const schedulerReady = await stepSchedulerTick(projectId, region, provider, ownerEmail, identity?.identity.adminUrl ?? null, meta.schedulerIntervalMinutes);
367
+ const keepScheduler = schedulerReady || (await schedulerExists(projectId));
354
368
  // === 11.5. Operator access: IAP follows the Caelo user list ===
355
- await stepOperatorAccessSync(projectId, region, provider, ownerEmail, keepSigner ? [`serviceAccount:${upgraderServiceAccountEmail(projectId, GCP_STACK_ENV)}`] : []);
369
+ await stepOperatorAccessSync(projectId, region, provider, ownerEmail, keepSigner ? [`serviceAccount:${upgraderServiceAccountEmail(projectId, GCP_STACK_ENV)}`] : [], keepScheduler ? [schedulerServiceAccountEmail(projectId, GCP_STACK_ENV)] : []);
356
370
  // === 11.6. Remote MCP (#806): LB rules (gcp) + a check of the identity env ===
357
371
  // The env itself came with `pulumi up` (step 10.05, #1082).
358
- const remoteMcpReady = await stepRemoteMcp(projectId, provider, domain, identity);
372
+ const remoteMcpReady = await stepRemoteMcp(projectId, region, provider, domain, identity, imageDigests);
359
373
  // A fresh install ran every converge step above, so it is at this CLI's
360
374
  // infrastructure contract — recorded only when the upgrader and the
361
375
  // converge job are in place (the steps contract bumps 2 and 9 added) and
362
- // remote MCP's steps (#806, bump 10) succeeded. With the release version,
363
- // the admin can install the next update itself.
364
- if (upgraderReady && convergeReady && remoteMcpReady) {
376
+ // remote MCP's steps (#806, bump 10) and the scheduler tick (#1140, bump
377
+ // 18) succeeded. With the release version, the admin can install the next
378
+ // update itself.
379
+ if (upgraderReady && convergeReady && remoteMcpReady && schedulerReady) {
365
380
  const version = releaseVersion;
366
381
  // #1025 — the linux/amd64 forms Cloud Run reports, next to the indexes,
367
382
  // so the upgrader recognises what serves without a registry lookup.
@@ -410,8 +425,12 @@ async function resolveImageDigests() {
410
425
  const project = "caelo-website";
411
426
  const registryRegion = "europe-west1";
412
427
  const repo = "caelo-cms-images";
413
- const out = { admin: "", gateway: "" };
414
- for (const service of ["admin", "gateway"]) {
428
+ const out = {
429
+ admin: "",
430
+ gateway: "",
431
+ "mcp-auth-proxy": "",
432
+ };
433
+ for (const service of ["admin", "gateway", "mcp-auth-proxy"]) {
415
434
  const s = spinner();
416
435
  s.start(`Resolving ${service}:latest → digest...`);
417
436
  // gcloud's --filter='tag=latest' is in a transitional state (warns +
@@ -729,7 +748,7 @@ async function stepGrantBaseRoles(installId, projectId, saEmail) {
729
748
  */
730
749
  async function stepPublicRoleIsolation(projectId) {
731
750
  const s = spinner();
732
- s.start("Removing public_role from the Cloud SQL superuser group...");
751
+ s.start("Removing the gateway logins from the Cloud SQL superuser group...");
733
752
  const r = await revokePublicRoleMemberships({
734
753
  projectId,
735
754
  env: GCP_STACK_ENV,
@@ -741,7 +760,7 @@ async function stepPublicRoleIsolation(projectId) {
741
760
  cancel("Aborted.");
742
761
  process.exit(1);
743
762
  }
744
- s.stop(green("public_role holds no database roles"));
763
+ s.stop(green("The gateway logins (public_role, public_staging_role) hold no database roles"));
745
764
  }
746
765
  /**
747
766
  * The admin's custom role for writing the redirects table into the URL map
@@ -914,13 +933,75 @@ async function upgraderExists(projectId) {
914
933
  ]);
915
934
  return r.ok;
916
935
  }
936
+ /** Whether the scheduler tick's account exists from an earlier run (it keeps its IAP access). */
937
+ async function schedulerExists(projectId) {
938
+ const r = await gcloud([
939
+ "iam",
940
+ "service-accounts",
941
+ "describe",
942
+ schedulerServiceAccountEmail(projectId, GCP_STACK_ENV),
943
+ `--project=${projectId}`,
944
+ "--format=value(email)",
945
+ ]);
946
+ return r.ok;
947
+ }
948
+ /**
949
+ * #1140 — set up the scheduler tick (scheduler-setup.ts): the one Cloud
950
+ * Scheduler job that calls the admin's tick every `schedulerIntervalMinutes`
951
+ * through IAP. After migrations (the admin answers the tick once its tables
952
+ * exist) and before operator access. Not fatal: the site works without it,
953
+ * but plugin workers, update checks and clean-up do not run, so a failure
954
+ * warns loudly and the install is not recorded at this contract — the next
955
+ * wizard pass or `upgrade` retries. Idempotent.
956
+ *
957
+ * @returns whether the tick is in place
958
+ */
959
+ async function stepSchedulerTick(projectId, region, provider, ownerEmail, adminUrl, recordedInterval) {
960
+ const s = spinner();
961
+ s.start("Setting up the scheduler tick (periodic work and plugin workers)...");
962
+ const failed = (error) => {
963
+ s.stop(yellow(`Scheduler tick not set up: ${error}`));
964
+ log.warn(`The install works, but plugin workers (newsletter sends, rating aggregates), update checks and clean-up do not run until this succeeds. Re-run the installer or ${bold(selfCommand("upgrade"))} once the cause is fixed.`);
965
+ return false;
966
+ };
967
+ let intervalMinutes;
968
+ try {
969
+ intervalMinutes = parseSchedulerIntervalMinutes(recordedInterval, "install.json schedulerIntervalMinutes");
970
+ }
971
+ catch (e) {
972
+ return failed(e.message);
973
+ }
974
+ if (!adminUrl)
975
+ return failed("the admin's URL could not be read (see the remote-MCP step above)");
976
+ const resolved = await resolveOperatorAccessTarget({
977
+ provider,
978
+ projectId,
979
+ region,
980
+ env: GCP_STACK_ENV,
981
+ ownerEmail,
982
+ });
983
+ if (!resolved.ok)
984
+ return failed(resolved.error);
985
+ const r = await ensureSchedulerTick({
986
+ projectId,
987
+ region,
988
+ env: GCP_STACK_ENV,
989
+ adminUrl,
990
+ resource: resolved.target.resource,
991
+ intervalMinutes,
992
+ });
993
+ if (!r.ok)
994
+ return failed(r.error);
995
+ s.stop(green(`Scheduler tick ready (every ${intervalMinutes} min, ${r.done.length} steps)`));
996
+ return true;
997
+ }
917
998
  /**
918
999
  * Set up the operator-access sync job (operator-access.ts): the only
919
1000
  * principal that may change who passes IAP, run as the operator's gcloud
920
1001
  * identity. After migrations, because the job's database user gets the role
921
1002
  * migration 0239 creates. Idempotent, so it runs on every wizard pass.
922
1003
  */
923
- async function stepOperatorAccessSync(projectId, region, provider, ownerEmail, mcpSigners) {
1004
+ async function stepOperatorAccessSync(projectId, region, provider, ownerEmail, mcpSigners, iapServiceAccounts) {
924
1005
  const s = spinner();
925
1006
  s.start("Setting up the operator-access sync job (Google IAP follows the user list)...");
926
1007
  const resolved = await resolveOperatorAccessTarget({
@@ -931,7 +1012,7 @@ async function stepOperatorAccessSync(projectId, region, provider, ownerEmail, m
931
1012
  ownerEmail,
932
1013
  });
933
1014
  const r = resolved.ok
934
- ? await ensureOperatorAccessSync({ ...resolved.target, mcpSigners })
1015
+ ? await ensureOperatorAccessSync({ ...resolved.target, mcpSigners, iapServiceAccounts })
935
1016
  : { ok: false, done: [], error: resolved.error };
936
1017
  if (!r.ok) {
937
1018
  s.stop(red(`Failed: ${r.error}`));
@@ -995,7 +1076,7 @@ async function stepResolveRemoteMcpIdentity(projectId, region, provider, domain,
995
1076
  *
996
1077
  * @returns whether every part is in place
997
1078
  */
998
- async function stepRemoteMcp(projectId, provider, domain, identity) {
1079
+ async function stepRemoteMcp(projectId, region, provider, domain, identity, imageDigests) {
999
1080
  const s = spinner();
1000
1081
  s.start("Preparing remote MCP (ChatGPT / claude.ai connectors; off until the Owner enables it)...");
1001
1082
  const failed = (error) => {
@@ -1005,13 +1086,25 @@ async function stepRemoteMcp(projectId, provider, domain, identity) {
1005
1086
  };
1006
1087
  if (!identity)
1007
1088
  return failed("its URLs and IAP audience could not be read (see above)");
1008
- const edge = await ensureRemoteMcpEdge({ provider, projectId, env: GCP_STACK_ENV, domain });
1089
+ const proxyDigest = imageDigests["mcp-auth-proxy"];
1090
+ if (!proxyDigest)
1091
+ return failed("the release records no MCP-Auth-Proxy image");
1092
+ const edge = await ensureRemoteMcpEdge({
1093
+ provider,
1094
+ projectId,
1095
+ region,
1096
+ env: GCP_STACK_ENV,
1097
+ domain,
1098
+ mcpAuthProxyImageRef: releaseImageRef("mcp-auth-proxy", proxyDigest),
1099
+ });
1009
1100
  if (!edge.ok)
1010
1101
  return failed(edge.error);
1011
1102
  const check = await checkRemoteMcpIdentityEnv(identity.target, identity.identity);
1012
1103
  if (!check.ok)
1013
1104
  return failed(check.error);
1014
- const missing = [...check.drift.admin, ...check.drift.gateway].map((c) => c.name);
1105
+ const missing = Object.values(check.drift)
1106
+ .flat()
1107
+ .map((c) => c.name);
1015
1108
  if (missing.length > 0) {
1016
1109
  return failed(`pulumi up left ${[...new Set(missing)].join(", ")} out of the services' env`);
1017
1110
  }
@@ -1480,8 +1573,10 @@ async function stepDrainLegacyCaeloAdminUser(projectId, region) {
1480
1573
  "--password",
1481
1574
  pgPass,
1482
1575
  ]);
1483
- // Resolve the SQL instance's private IP from gcloud (avoids reading
1484
- // Pulumi outputs from inside the wizard).
1576
+ // Resolve the SQL instance's DNS name from gcloud (avoids reading
1577
+ // Pulumi outputs from inside the wizard). #1338: the job connects with
1578
+ // verify-full, and the shared-CA certificate names the DNS name, not the
1579
+ // private IP.
1485
1580
  const sqlDescr = await gcloud([
1486
1581
  "sql",
1487
1582
  "instances",
@@ -1489,15 +1584,22 @@ async function stepDrainLegacyCaeloAdminUser(projectId, region) {
1489
1584
  "caelo-production-pg-1d65811",
1490
1585
  "--project",
1491
1586
  projectId,
1492
- "--format=value(ipAddresses[0].ipAddress)",
1587
+ "--format=json(dnsNames)",
1493
1588
  ]);
1494
- const pgHost = (sqlDescr.stdout || "").trim();
1589
+ let pgHost = null;
1590
+ try {
1591
+ pgHost = cloudSqlPrivateDnsName(JSON.parse(sqlDescr.stdout || "{}").dnsNames);
1592
+ }
1593
+ catch {
1594
+ pgHost = null;
1595
+ }
1495
1596
  if (!pgHost) {
1496
- s.stop(yellow("Could not resolve Cloud SQL private IP — skipping drain"));
1597
+ s.stop(yellow("Could not resolve the Cloud SQL instance's DNS name — skipping drain"));
1497
1598
  return;
1498
1599
  }
1499
- const adminPg = `postgres://postgres:${pgPass}@${pgHost}:5432/cms_admin`;
1500
- const publicPg = `postgres://postgres:${pgPass}@${pgHost}:5432/cms_public`;
1600
+ const tls = verifyFullQuery(CLOUD_SQL_CA_BUNDLE);
1601
+ const adminPg = `postgres://postgres:${pgPass}@${pgHost}:5432/cms_admin?${tls}`;
1602
+ const publicPg = `postgres://postgres:${pgPass}@${pgHost}:5432/cms_public?${tls}`;
1501
1603
  // The cleanup script — uses bun's globalThis.Bun.SQL (already proven
1502
1604
  // pattern in hooks.server.ts + the migration runner). DO block makes
1503
1605
  // it safe to re-run.