@voltro/cli 0.1.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 (626) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/LICENSE +57 -0
  3. package/README.md +26 -0
  4. package/SECURITY.md +56 -0
  5. package/THIRD-PARTY-NOTICES.md +20236 -0
  6. package/bin/voltro.mjs +43 -0
  7. package/dist/bin.d.ts +1 -0
  8. package/dist/bin.js +9 -0
  9. package/dist/commands-CfPH2Wf4.js +18061 -0
  10. package/dist/frameworkInspectState-CX2250XB.js +86 -0
  11. package/dist/index.d.ts +48 -0
  12. package/dist/index.js +5 -0
  13. package/dist/inspectState.d.ts +116 -0
  14. package/dist/inspectState.js +2 -0
  15. package/dist/startup.d.ts +26 -0
  16. package/dist/startup.js +2 -0
  17. package/dist/startupRunner-CRhuUl91.js +71 -0
  18. package/package.json +88 -0
  19. package/templates/AGENTS.core.md +258 -0
  20. package/templates/AGENTS.md +351 -0
  21. package/templates/agent-docs/_index.md +93 -0
  22. package/templates/agent-docs/_manifest.json +655 -0
  23. package/templates/agent-docs/ai.md +1845 -0
  24. package/templates/agent-docs/authentication.md +1788 -0
  25. package/templates/agent-docs/caching.md +624 -0
  26. package/templates/agent-docs/cli.md +1650 -0
  27. package/templates/agent-docs/configuration.md +295 -0
  28. package/templates/agent-docs/data.md +2172 -0
  29. package/templates/agent-docs/database/advancedqueries.md +1583 -0
  30. package/templates/agent-docs/database/columntypes.md +1200 -0
  31. package/templates/agent-docs/database/hosting.md +881 -0
  32. package/templates/agent-docs/database/migrations.md +2938 -0
  33. package/templates/agent-docs/database/misc.md +270 -0
  34. package/templates/agent-docs/database/overview.md +108 -0
  35. package/templates/agent-docs/database/querying.md +1622 -0
  36. package/templates/agent-docs/database/scaling.md +331 -0
  37. package/templates/agent-docs/database/schema.md +1458 -0
  38. package/templates/agent-docs/database/seedsdialects.md +1235 -0
  39. package/templates/agent-docs/database/transactions.md +285 -0
  40. package/templates/agent-docs/deployment.md +999 -0
  41. package/templates/agent-docs/internationalization.md +359 -0
  42. package/templates/agent-docs/introduction.md +438 -0
  43. package/templates/agent-docs/multi-tenancy.md +610 -0
  44. package/templates/agent-docs/observability.md +350 -0
  45. package/templates/agent-docs/plugins.md +1273 -0
  46. package/templates/agent-docs/reference.md +978 -0
  47. package/templates/agent-docs/routing.md +1553 -0
  48. package/templates/agent-docs/scheduling.md +666 -0
  49. package/templates/agent-docs/schema-driven-ui.md +607 -0
  50. package/templates/agent-docs/security.md +42 -0
  51. package/templates/agent-docs/templates/apibackends.md +3214 -0
  52. package/templates/agent-docs/templates/appshells.md +2062 -0
  53. package/templates/agent-docs/templates/custom.md +128 -0
  54. package/templates/agent-docs/templates/overview.md +122 -0
  55. package/templates/agent-docs/templates/serverless.md +315 -0
  56. package/templates/agent-docs/testing.md +376 -0
  57. package/templates/agent-docs/workflows.md +1351 -0
  58. package/templates/apps/api-ai/README.md +105 -0
  59. package/templates/apps/api-ai/actions/summarize.action.server.tsx +32 -0
  60. package/templates/apps/api-ai/actions/summarize.action.ts +33 -0
  61. package/templates/apps/api-ai/agents/support.agent.server.tsx +31 -0
  62. package/templates/apps/api-ai/agents/support.agent.tsx +27 -0
  63. package/templates/apps/api-ai/app.config.ts +57 -0
  64. package/templates/apps/api-ai/database/schema.ts +67 -0
  65. package/templates/apps/api-ai/package.json +27 -0
  66. package/templates/apps/api-ai/seeds/docs.seed.ts +67 -0
  67. package/templates/apps/api-ai/template.json +6 -0
  68. package/templates/apps/api-ai/tests/summarize.test.ts +50 -0
  69. package/templates/apps/api-ai/tools/searchDocs.tool.tsx +60 -0
  70. package/templates/apps/api-ai/tsconfig.json +5 -0
  71. package/templates/apps/api-auth/.env +17 -0
  72. package/templates/apps/api-auth/README.md +109 -0
  73. package/templates/apps/api-auth/actions/me.action.server.ts +20 -0
  74. package/templates/apps/api-auth/actions/me.action.ts +19 -0
  75. package/templates/apps/api-auth/app.config.ts +59 -0
  76. package/templates/apps/api-auth/database/schema.ts +26 -0
  77. package/templates/apps/api-auth/package.json +28 -0
  78. package/templates/apps/api-auth/template.json +6 -0
  79. package/templates/apps/api-auth/tests/me.test.ts +37 -0
  80. package/templates/apps/api-auth/tsconfig.json +5 -0
  81. package/templates/apps/api-backend/README.md +25 -0
  82. package/templates/apps/api-backend/app.config.ts +39 -0
  83. package/templates/apps/api-backend/database/schema.ts +57 -0
  84. package/templates/apps/api-backend/mutations/notes.create.mutation.server.ts +19 -0
  85. package/templates/apps/api-backend/mutations/notes.create.mutation.ts +37 -0
  86. package/templates/apps/api-backend/package.json +28 -0
  87. package/templates/apps/api-backend/queries/notes.query.server.ts +14 -0
  88. package/templates/apps/api-backend/queries/notes.query.ts +20 -0
  89. package/templates/apps/api-backend/template.json +6 -0
  90. package/templates/apps/api-backend/tests/notes.create.test.ts +50 -0
  91. package/templates/apps/api-backend/tsconfig.json +5 -0
  92. package/templates/apps/api-backend-deactivation/README.md +49 -0
  93. package/templates/apps/api-backend-deactivation/actions/users.get.action.server.ts +17 -0
  94. package/templates/apps/api-backend-deactivation/actions/users.get.action.ts +18 -0
  95. package/templates/apps/api-backend-deactivation/app.config.ts +20 -0
  96. package/templates/apps/api-backend-deactivation/database/schema.ts +41 -0
  97. package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.server.ts +6 -0
  98. package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.ts +16 -0
  99. package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.server.ts +10 -0
  100. package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.ts +19 -0
  101. package/templates/apps/api-backend-deactivation/package.json +28 -0
  102. package/templates/apps/api-backend-deactivation/template.json +6 -0
  103. package/templates/apps/api-backend-deactivation/tests/users.deactivate.test.ts +47 -0
  104. package/templates/apps/api-backend-deactivation/tsconfig.json +5 -0
  105. package/templates/apps/api-backend-mail/README.md +39 -0
  106. package/templates/apps/api-backend-mail/actions/sendWelcome.action.server.ts +15 -0
  107. package/templates/apps/api-backend-mail/actions/sendWelcome.action.ts +21 -0
  108. package/templates/apps/api-backend-mail/app.config.ts +34 -0
  109. package/templates/apps/api-backend-mail/database/schema.ts +57 -0
  110. package/templates/apps/api-backend-mail/emails/welcome.email.tsx +106 -0
  111. package/templates/apps/api-backend-mail/mutations/notes.create.mutation.server.ts +19 -0
  112. package/templates/apps/api-backend-mail/mutations/notes.create.mutation.ts +37 -0
  113. package/templates/apps/api-backend-mail/package.json +30 -0
  114. package/templates/apps/api-backend-mail/queries/notes.query.server.ts +14 -0
  115. package/templates/apps/api-backend-mail/queries/notes.query.ts +20 -0
  116. package/templates/apps/api-backend-mail/template.json +6 -0
  117. package/templates/apps/api-backend-mail/tests/notes.create.test.ts +50 -0
  118. package/templates/apps/api-backend-mail/tsconfig.json +5 -0
  119. package/templates/apps/api-backend-mariadb/.env.example +35 -0
  120. package/templates/apps/api-backend-mariadb/README.md +31 -0
  121. package/templates/apps/api-backend-mariadb/app.config.ts +68 -0
  122. package/templates/apps/api-backend-mariadb/database/schema.ts +57 -0
  123. package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.server.ts +19 -0
  124. package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.ts +37 -0
  125. package/templates/apps/api-backend-mariadb/package.json +30 -0
  126. package/templates/apps/api-backend-mariadb/queries/notes.query.server.ts +14 -0
  127. package/templates/apps/api-backend-mariadb/queries/notes.query.ts +20 -0
  128. package/templates/apps/api-backend-mariadb/template.json +6 -0
  129. package/templates/apps/api-backend-mariadb/tests/notes.create.test.ts +50 -0
  130. package/templates/apps/api-backend-mariadb/tsconfig.json +5 -0
  131. package/templates/apps/api-backend-storage/README.md +86 -0
  132. package/templates/apps/api-backend-storage/actions/uploadAvatar.action.server.ts +21 -0
  133. package/templates/apps/api-backend-storage/actions/uploadAvatar.action.ts +21 -0
  134. package/templates/apps/api-backend-storage/actions/uploadDocument.action.server.ts +21 -0
  135. package/templates/apps/api-backend-storage/actions/uploadDocument.action.ts +20 -0
  136. package/templates/apps/api-backend-storage/app.config.ts +38 -0
  137. package/templates/apps/api-backend-storage/database/schema.ts +57 -0
  138. package/templates/apps/api-backend-storage/mutations/notes.create.mutation.server.ts +19 -0
  139. package/templates/apps/api-backend-storage/mutations/notes.create.mutation.ts +37 -0
  140. package/templates/apps/api-backend-storage/package.json +27 -0
  141. package/templates/apps/api-backend-storage/queries/notes.query.server.ts +14 -0
  142. package/templates/apps/api-backend-storage/queries/notes.query.ts +20 -0
  143. package/templates/apps/api-backend-storage/template.json +6 -0
  144. package/templates/apps/api-backend-storage/tests/notes.create.test.ts +50 -0
  145. package/templates/apps/api-backend-storage/tsconfig.json +5 -0
  146. package/templates/apps/api-data-advanced/.env +17 -0
  147. package/templates/apps/api-data-advanced/README.md +88 -0
  148. package/templates/apps/api-data-advanced/app.config.ts +56 -0
  149. package/templates/apps/api-data-advanced/database/actors.entity.ts +14 -0
  150. package/templates/apps/api-data-advanced/database/authors.entity.ts +30 -0
  151. package/templates/apps/api-data-advanced/database/authors.relations.ts +15 -0
  152. package/templates/apps/api-data-advanced/database/books.entity.ts +59 -0
  153. package/templates/apps/api-data-advanced/database/books.relations.ts +10 -0
  154. package/templates/apps/api-data-advanced/database/index.ts +23 -0
  155. package/templates/apps/api-data-advanced/database/tenants.entity.ts +11 -0
  156. package/templates/apps/api-data-advanced/package.json +28 -0
  157. package/templates/apps/api-data-advanced/queries/authors.withBooks.query.server.ts +18 -0
  158. package/templates/apps/api-data-advanced/queries/authors.withBooks.query.ts +40 -0
  159. package/templates/apps/api-data-advanced/queries/books.search.query.server.ts +17 -0
  160. package/templates/apps/api-data-advanced/queries/books.search.query.ts +39 -0
  161. package/templates/apps/api-data-advanced/seeds/catalog.seed.ts +101 -0
  162. package/templates/apps/api-data-advanced/template.json +6 -0
  163. package/templates/apps/api-data-advanced/tests/queries.test.ts +124 -0
  164. package/templates/apps/api-data-advanced/tsconfig.json +5 -0
  165. package/templates/apps/api-durable/README.md +81 -0
  166. package/templates/apps/api-durable/aggregates/orderStats.aggregate.ts +49 -0
  167. package/templates/apps/api-durable/app.config.ts +41 -0
  168. package/templates/apps/api-durable/database/schema.ts +65 -0
  169. package/templates/apps/api-durable/mutations/orders.approve.mutation.server.ts +43 -0
  170. package/templates/apps/api-durable/mutations/orders.approve.mutation.ts +23 -0
  171. package/templates/apps/api-durable/mutations/orders.place.mutation.server.ts +45 -0
  172. package/templates/apps/api-durable/mutations/orders.place.mutation.ts +40 -0
  173. package/templates/apps/api-durable/package.json +28 -0
  174. package/templates/apps/api-durable/schedules/nightlyReport.cron.tsx +37 -0
  175. package/templates/apps/api-durable/startup/warm.startup.tsx +33 -0
  176. package/templates/apps/api-durable/subscribers/orderChanges.subscribe.ts +27 -0
  177. package/templates/apps/api-durable/template.json +6 -0
  178. package/templates/apps/api-durable/tests/orders.place.test.ts +91 -0
  179. package/templates/apps/api-durable/triggers/order.placed.trigger.tsx +21 -0
  180. package/templates/apps/api-durable/tsconfig.json +5 -0
  181. package/templates/apps/api-durable/workflows/order.fulfill.workflow.server.tsx +103 -0
  182. package/templates/apps/api-durable/workflows/order.fulfill.workflow.tsx +25 -0
  183. package/templates/apps/api-feature-flags/README.md +63 -0
  184. package/templates/apps/api-feature-flags/actions/notes.export.action.server.ts +11 -0
  185. package/templates/apps/api-feature-flags/actions/notes.export.action.ts +18 -0
  186. package/templates/apps/api-feature-flags/app.config.ts +41 -0
  187. package/templates/apps/api-feature-flags/database/schema.ts +37 -0
  188. package/templates/apps/api-feature-flags/mutations/notes.create.mutation.server.ts +29 -0
  189. package/templates/apps/api-feature-flags/mutations/notes.create.mutation.ts +28 -0
  190. package/templates/apps/api-feature-flags/package.json +29 -0
  191. package/templates/apps/api-feature-flags/template.json +6 -0
  192. package/templates/apps/api-feature-flags/tests/notes.create.test.ts +67 -0
  193. package/templates/apps/api-feature-flags/tsconfig.json +5 -0
  194. package/templates/apps/api-governance/.env +4 -0
  195. package/templates/apps/api-governance/README.md +61 -0
  196. package/templates/apps/api-governance/actions/profiles.get.action.server.ts +17 -0
  197. package/templates/apps/api-governance/actions/profiles.get.action.ts +17 -0
  198. package/templates/apps/api-governance/app.config.ts +35 -0
  199. package/templates/apps/api-governance/database/schema.ts +41 -0
  200. package/templates/apps/api-governance/mutations/profiles.create.mutation.server.ts +17 -0
  201. package/templates/apps/api-governance/mutations/profiles.create.mutation.ts +21 -0
  202. package/templates/apps/api-governance/package.json +29 -0
  203. package/templates/apps/api-governance/template.json +6 -0
  204. package/templates/apps/api-governance/tests/profiles.create.test.ts +59 -0
  205. package/templates/apps/api-governance/tsconfig.json +5 -0
  206. package/templates/apps/api-kv/README.md +100 -0
  207. package/templates/apps/api-kv/actions/sync.pull.action.server.ts +75 -0
  208. package/templates/apps/api-kv/actions/sync.pull.action.ts +25 -0
  209. package/templates/apps/api-kv/actions/sync.reset.action.server.ts +25 -0
  210. package/templates/apps/api-kv/actions/sync.reset.action.ts +22 -0
  211. package/templates/apps/api-kv/actions/sync.status.action.server.ts +28 -0
  212. package/templates/apps/api-kv/actions/sync.status.action.ts +17 -0
  213. package/templates/apps/api-kv/app.config.ts +48 -0
  214. package/templates/apps/api-kv/database/schema.ts +62 -0
  215. package/templates/apps/api-kv/package.json +28 -0
  216. package/templates/apps/api-kv/queries/events.list.query.server.ts +14 -0
  217. package/templates/apps/api-kv/queries/events.list.query.ts +23 -0
  218. package/templates/apps/api-kv/template.json +6 -0
  219. package/templates/apps/api-kv/tests/sync.test.ts +103 -0
  220. package/templates/apps/api-kv/tsconfig.json +5 -0
  221. package/templates/apps/api-moderation/README.md +46 -0
  222. package/templates/apps/api-moderation/app.config.ts +33 -0
  223. package/templates/apps/api-moderation/database/schema.ts +45 -0
  224. package/templates/apps/api-moderation/mutations/comments.create.mutation.server.ts +8 -0
  225. package/templates/apps/api-moderation/mutations/comments.create.mutation.ts +20 -0
  226. package/templates/apps/api-moderation/mutations/posts.create.mutation.server.ts +9 -0
  227. package/templates/apps/api-moderation/mutations/posts.create.mutation.ts +25 -0
  228. package/templates/apps/api-moderation/package.json +29 -0
  229. package/templates/apps/api-moderation/template.json +6 -0
  230. package/templates/apps/api-moderation/tests/posts.create.test.ts +79 -0
  231. package/templates/apps/api-moderation/tsconfig.json +5 -0
  232. package/templates/apps/api-observability/README.md +106 -0
  233. package/templates/apps/api-observability/app.config.ts +32 -0
  234. package/templates/apps/api-observability/database/schema.ts +38 -0
  235. package/templates/apps/api-observability/mutations/notes.create.mutation.server.ts +33 -0
  236. package/templates/apps/api-observability/mutations/notes.create.mutation.ts +15 -0
  237. package/templates/apps/api-observability/package.json +29 -0
  238. package/templates/apps/api-observability/queries/notes.list.query.server.ts +7 -0
  239. package/templates/apps/api-observability/queries/notes.list.query.ts +14 -0
  240. package/templates/apps/api-observability/template.json +6 -0
  241. package/templates/apps/api-observability/tests/notes.create.test.ts +36 -0
  242. package/templates/apps/api-observability/tsconfig.json +5 -0
  243. package/templates/apps/api-ratelimit/README.md +49 -0
  244. package/templates/apps/api-ratelimit/app.config.ts +42 -0
  245. package/templates/apps/api-ratelimit/database/schema.ts +37 -0
  246. package/templates/apps/api-ratelimit/mutations/notes.create.mutation.server.ts +16 -0
  247. package/templates/apps/api-ratelimit/mutations/notes.create.mutation.ts +34 -0
  248. package/templates/apps/api-ratelimit/package.json +29 -0
  249. package/templates/apps/api-ratelimit/template.json +6 -0
  250. package/templates/apps/api-ratelimit/tests/notes.create.test.ts +69 -0
  251. package/templates/apps/api-ratelimit/tsconfig.json +5 -0
  252. package/templates/apps/api-rbac/README.md +59 -0
  253. package/templates/apps/api-rbac/app.config.ts +48 -0
  254. package/templates/apps/api-rbac/database/schema.ts +37 -0
  255. package/templates/apps/api-rbac/mutations/notes.create.mutation.server.ts +22 -0
  256. package/templates/apps/api-rbac/mutations/notes.create.mutation.ts +26 -0
  257. package/templates/apps/api-rbac/package.json +29 -0
  258. package/templates/apps/api-rbac/template.json +6 -0
  259. package/templates/apps/api-rbac/tests/notes.create.test.ts +80 -0
  260. package/templates/apps/api-rbac/tsconfig.json +5 -0
  261. package/templates/apps/api-rest/README.md +85 -0
  262. package/templates/apps/api-rest/app.config.ts +70 -0
  263. package/templates/apps/api-rest/database/schema.ts +52 -0
  264. package/templates/apps/api-rest/lib/product.ts +30 -0
  265. package/templates/apps/api-rest/package.json +27 -0
  266. package/templates/apps/api-rest/routes/v1/products.create.route.tsx +45 -0
  267. package/templates/apps/api-rest/routes/v1/products.delete.route.tsx +25 -0
  268. package/templates/apps/api-rest/routes/v1/products.get.route.tsx +29 -0
  269. package/templates/apps/api-rest/routes/v1/products.list.route.tsx +43 -0
  270. package/templates/apps/api-rest/template.json +6 -0
  271. package/templates/apps/api-rest/tests/products.create.test.ts +53 -0
  272. package/templates/apps/api-rest/tsconfig.json +5 -0
  273. package/templates/apps/api-saas/README.md +106 -0
  274. package/templates/apps/api-saas/app.config.ts +51 -0
  275. package/templates/apps/api-saas/database/schema.ts +50 -0
  276. package/templates/apps/api-saas/mutations/projects.create.mutation.server.ts +52 -0
  277. package/templates/apps/api-saas/mutations/projects.create.mutation.ts +18 -0
  278. package/templates/apps/api-saas/package.json +31 -0
  279. package/templates/apps/api-saas/queries/projects.list.query.server.ts +7 -0
  280. package/templates/apps/api-saas/queries/projects.list.query.ts +18 -0
  281. package/templates/apps/api-saas/template.json +6 -0
  282. package/templates/apps/api-saas/tests/projects.create.test.ts +47 -0
  283. package/templates/apps/api-saas/tsconfig.json +5 -0
  284. package/templates/apps/api-search/README.md +68 -0
  285. package/templates/apps/api-search/app.config.ts +31 -0
  286. package/templates/apps/api-search/database/schema.ts +47 -0
  287. package/templates/apps/api-search/lib/search.ts +27 -0
  288. package/templates/apps/api-search/mutations/articles.create.mutation.server.ts +19 -0
  289. package/templates/apps/api-search/mutations/articles.create.mutation.ts +35 -0
  290. package/templates/apps/api-search/package.json +29 -0
  291. package/templates/apps/api-search/queries/articles.list.query.server.ts +14 -0
  292. package/templates/apps/api-search/queries/articles.list.query.ts +19 -0
  293. package/templates/apps/api-search/seeds/articles.seed.ts +41 -0
  294. package/templates/apps/api-search/startup/searchBackfill.startup.tsx +24 -0
  295. package/templates/apps/api-search/template.json +6 -0
  296. package/templates/apps/api-search/tests/articles.create.test.ts +69 -0
  297. package/templates/apps/api-search/tsconfig.json +5 -0
  298. package/templates/apps/api-versioning/README.md +51 -0
  299. package/templates/apps/api-versioning/actions/documents.asOf.action.server.ts +13 -0
  300. package/templates/apps/api-versioning/actions/documents.asOf.action.ts +14 -0
  301. package/templates/apps/api-versioning/actions/documents.history.action.server.ts +15 -0
  302. package/templates/apps/api-versioning/actions/documents.history.action.ts +17 -0
  303. package/templates/apps/api-versioning/app.config.ts +24 -0
  304. package/templates/apps/api-versioning/database/schema.ts +38 -0
  305. package/templates/apps/api-versioning/mutations/documents.create.mutation.server.ts +8 -0
  306. package/templates/apps/api-versioning/mutations/documents.create.mutation.ts +21 -0
  307. package/templates/apps/api-versioning/mutations/documents.update.mutation.server.ts +9 -0
  308. package/templates/apps/api-versioning/mutations/documents.update.mutation.ts +21 -0
  309. package/templates/apps/api-versioning/package.json +29 -0
  310. package/templates/apps/api-versioning/template.json +6 -0
  311. package/templates/apps/api-versioning/tests/documents.create.test.ts +37 -0
  312. package/templates/apps/api-versioning/tsconfig.json +5 -0
  313. package/templates/apps/api-webhooks/.env +6 -0
  314. package/templates/apps/api-webhooks/README.md +106 -0
  315. package/templates/apps/api-webhooks/app.config.ts +16 -0
  316. package/templates/apps/api-webhooks/database/schema.ts +49 -0
  317. package/templates/apps/api-webhooks/events/order.completed.webhook.tsx +22 -0
  318. package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.server.ts +37 -0
  319. package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.ts +15 -0
  320. package/templates/apps/api-webhooks/package.json +28 -0
  321. package/templates/apps/api-webhooks/queries/orders.list.query.server.ts +7 -0
  322. package/templates/apps/api-webhooks/queries/orders.list.query.ts +15 -0
  323. package/templates/apps/api-webhooks/template.json +6 -0
  324. package/templates/apps/api-webhooks/tests/orders.fulfill.test.ts +51 -0
  325. package/templates/apps/api-webhooks/tsconfig.json +5 -0
  326. package/templates/apps/api-webhooks/webhooks/orders.webhook.tsx +35 -0
  327. package/templates/apps/changelog/README.md +77 -0
  328. package/templates/apps/changelog/app.config.ts +27 -0
  329. package/templates/apps/changelog/content/releases/0.1.0.mdx +19 -0
  330. package/templates/apps/changelog/content/releases/0.2.0.mdx +28 -0
  331. package/templates/apps/changelog/package.json +30 -0
  332. package/templates/apps/changelog/scripts/generate-rss.mjs +38 -0
  333. package/templates/apps/changelog/src/globals.css +66 -0
  334. package/templates/apps/changelog/src/globals.d.ts +16 -0
  335. package/templates/apps/changelog/src/lib/locale.test.ts +72 -0
  336. package/templates/apps/changelog/src/lib/locale.ts +55 -0
  337. package/templates/apps/changelog/src/lib/releases.ts +21 -0
  338. package/templates/apps/changelog/src/locales/de.ts +22 -0
  339. package/templates/apps/changelog/src/locales/en.ts +30 -0
  340. package/templates/apps/changelog/src/pages/[locale]/[slug].tsx +24 -0
  341. package/templates/apps/changelog/src/pages/[locale]/index.tsx +13 -0
  342. package/templates/apps/changelog/src/pages/[locale]/mirrors.test.tsx +95 -0
  343. package/templates/apps/changelog/src/pages/[slug].test.tsx +127 -0
  344. package/templates/apps/changelog/src/pages/[slug].tsx +52 -0
  345. package/templates/apps/changelog/src/pages/index.test.tsx +112 -0
  346. package/templates/apps/changelog/src/pages/index.tsx +55 -0
  347. package/templates/apps/changelog/src/pages/layout.tsx +84 -0
  348. package/templates/apps/changelog/template.json +6 -0
  349. package/templates/apps/changelog/tsconfig.json +11 -0
  350. package/templates/apps/edge-functions/README.md +55 -0
  351. package/templates/apps/edge-functions/functions/aiComplete.serverless.ts +58 -0
  352. package/templates/apps/edge-functions/functions/currencyConvert.serverless.ts +47 -0
  353. package/templates/apps/edge-functions/functions/geoGreeting.serverless.ts +44 -0
  354. package/templates/apps/edge-functions/functions/health.serverless.ts +29 -0
  355. package/templates/apps/edge-functions/functions/resolveLink.serverless.ts +32 -0
  356. package/templates/apps/edge-functions/functions/shareLink.serverless.ts +30 -0
  357. package/templates/apps/edge-functions/functions/slackNotify.serverless.ts +40 -0
  358. package/templates/apps/edge-functions/functions/verifySignature.serverless.ts +52 -0
  359. package/templates/apps/edge-functions/package.json +21 -0
  360. package/templates/apps/edge-functions/template.json +6 -0
  361. package/templates/apps/edge-functions/tsconfig.json +10 -0
  362. package/templates/apps/frontend-admin/README.md +40 -0
  363. package/templates/apps/frontend-admin/app.config.ts +37 -0
  364. package/templates/apps/frontend-admin/package.json +30 -0
  365. package/templates/apps/frontend-admin/src/config.ts +8 -0
  366. package/templates/apps/frontend-admin/src/globals.css +76 -0
  367. package/templates/apps/frontend-admin/src/globals.d.ts +6 -0
  368. package/templates/apps/frontend-admin/src/lib/admin.ts +16 -0
  369. package/templates/apps/frontend-admin/src/lib/auth.ts +24 -0
  370. package/templates/apps/frontend-admin/src/locales/de.ts +67 -0
  371. package/templates/apps/frontend-admin/src/locales/en.ts +79 -0
  372. package/templates/apps/frontend-admin/src/locales/index.ts +15 -0
  373. package/templates/apps/frontend-admin/src/pages/(marketing)/index.test.tsx +55 -0
  374. package/templates/apps/frontend-admin/src/pages/(marketing)/index.tsx +32 -0
  375. package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +29 -0
  376. package/templates/apps/frontend-admin/src/pages/(marketing)/login.test.tsx +73 -0
  377. package/templates/apps/frontend-admin/src/pages/(marketing)/login.tsx +35 -0
  378. package/templates/apps/frontend-admin/src/pages/admin/[entity].tsx +121 -0
  379. package/templates/apps/frontend-admin/src/pages/admin/entity.test.tsx +119 -0
  380. package/templates/apps/frontend-admin/src/pages/admin/error.tsx +20 -0
  381. package/templates/apps/frontend-admin/src/pages/admin/fallbacks.test.tsx +68 -0
  382. package/templates/apps/frontend-admin/src/pages/admin/index.test.tsx +88 -0
  383. package/templates/apps/frontend-admin/src/pages/admin/index.tsx +65 -0
  384. package/templates/apps/frontend-admin/src/pages/admin/layout.test.tsx +114 -0
  385. package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +97 -0
  386. package/templates/apps/frontend-admin/src/pages/admin/loading.tsx +15 -0
  387. package/templates/apps/frontend-admin/src/pages/admin/not-found.tsx +15 -0
  388. package/templates/apps/frontend-admin/src/pages/layout.tsx +12 -0
  389. package/templates/apps/frontend-admin/src/pages/layouts.test.tsx +54 -0
  390. package/templates/apps/frontend-admin/template.json +6 -0
  391. package/templates/apps/frontend-admin/tsconfig.json +11 -0
  392. package/templates/apps/frontend-app/README.md +98 -0
  393. package/templates/apps/frontend-app/app.config.ts +43 -0
  394. package/templates/apps/frontend-app/package.json +30 -0
  395. package/templates/apps/frontend-app/src/locales/de.ts +36 -0
  396. package/templates/apps/frontend-app/src/locales/en.ts +43 -0
  397. package/templates/apps/frontend-app/src/locales/index.ts +15 -0
  398. package/templates/apps/frontend-app/src/pages/index.test.tsx +167 -0
  399. package/templates/apps/frontend-app/src/pages/index.tsx +136 -0
  400. package/templates/apps/frontend-app/src/pages/layout.tsx +41 -0
  401. package/templates/apps/frontend-app/src/pages/schema-ui.test.tsx +99 -0
  402. package/templates/apps/frontend-app/src/pages/schema-ui.tsx +74 -0
  403. package/templates/apps/frontend-app/template.json +6 -0
  404. package/templates/apps/frontend-app/tsconfig.json +11 -0
  405. package/templates/apps/frontend-blank/README.md +18 -0
  406. package/templates/apps/frontend-blank/app.config.ts +29 -0
  407. package/templates/apps/frontend-blank/package.json +29 -0
  408. package/templates/apps/frontend-blank/src/locales/de.ts +15 -0
  409. package/templates/apps/frontend-blank/src/locales/en.ts +22 -0
  410. package/templates/apps/frontend-blank/src/locales/index.ts +15 -0
  411. package/templates/apps/frontend-blank/src/pages/index.test.tsx +55 -0
  412. package/templates/apps/frontend-blank/src/pages/index.tsx +27 -0
  413. package/templates/apps/frontend-blank/src/pages/layout.test.tsx +54 -0
  414. package/templates/apps/frontend-blank/src/pages/layout.tsx +35 -0
  415. package/templates/apps/frontend-blank/template.json +6 -0
  416. package/templates/apps/frontend-blank/tsconfig.json +11 -0
  417. package/templates/apps/frontend-contact/README.md +65 -0
  418. package/templates/apps/frontend-contact/app.config.ts +25 -0
  419. package/templates/apps/frontend-contact/functions/sendMessage.serverless.ts +69 -0
  420. package/templates/apps/frontend-contact/package.json +33 -0
  421. package/templates/apps/frontend-contact/src/components/ContactForm.island.test.tsx +142 -0
  422. package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +104 -0
  423. package/templates/apps/frontend-contact/src/config.ts +12 -0
  424. package/templates/apps/frontend-contact/src/globals.css +84 -0
  425. package/templates/apps/frontend-contact/src/lib/locale.ts +55 -0
  426. package/templates/apps/frontend-contact/src/locales/de.ts +26 -0
  427. package/templates/apps/frontend-contact/src/locales/en.ts +29 -0
  428. package/templates/apps/frontend-contact/src/pages/[locale]/index.tsx +14 -0
  429. package/templates/apps/frontend-contact/src/pages/index.test.tsx +70 -0
  430. package/templates/apps/frontend-contact/src/pages/index.tsx +63 -0
  431. package/templates/apps/frontend-contact/src/pages/layout.tsx +65 -0
  432. package/templates/apps/frontend-contact/template.json +6 -0
  433. package/templates/apps/frontend-contact/tsconfig.json +11 -0
  434. package/templates/apps/frontend-dashboard/README.md +54 -0
  435. package/templates/apps/frontend-dashboard/app.config.ts +39 -0
  436. package/templates/apps/frontend-dashboard/package.json +29 -0
  437. package/templates/apps/frontend-dashboard/src/config.ts +8 -0
  438. package/templates/apps/frontend-dashboard/src/globals.css +72 -0
  439. package/templates/apps/frontend-dashboard/src/globals.d.ts +6 -0
  440. package/templates/apps/frontend-dashboard/src/lib/auth.ts +27 -0
  441. package/templates/apps/frontend-dashboard/src/locales/de.ts +49 -0
  442. package/templates/apps/frontend-dashboard/src/locales/en.ts +60 -0
  443. package/templates/apps/frontend-dashboard/src/locales/index.ts +15 -0
  444. package/templates/apps/frontend-dashboard/src/pages/(marketing)/index.test.tsx +55 -0
  445. package/templates/apps/frontend-dashboard/src/pages/(marketing)/index.tsx +34 -0
  446. package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +32 -0
  447. package/templates/apps/frontend-dashboard/src/pages/(marketing)/login.test.tsx +74 -0
  448. package/templates/apps/frontend-dashboard/src/pages/(marketing)/login.tsx +40 -0
  449. package/templates/apps/frontend-dashboard/src/pages/dashboard/error.tsx +21 -0
  450. package/templates/apps/frontend-dashboard/src/pages/dashboard/fallbacks.test.tsx +68 -0
  451. package/templates/apps/frontend-dashboard/src/pages/dashboard/index.test.tsx +55 -0
  452. package/templates/apps/frontend-dashboard/src/pages/dashboard/index.tsx +38 -0
  453. package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.test.tsx +88 -0
  454. package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +69 -0
  455. package/templates/apps/frontend-dashboard/src/pages/dashboard/loading.tsx +21 -0
  456. package/templates/apps/frontend-dashboard/src/pages/dashboard/not-found.tsx +19 -0
  457. package/templates/apps/frontend-dashboard/src/pages/dashboard/settings.test.tsx +69 -0
  458. package/templates/apps/frontend-dashboard/src/pages/dashboard/settings.tsx +35 -0
  459. package/templates/apps/frontend-dashboard/src/pages/layout.tsx +12 -0
  460. package/templates/apps/frontend-dashboard/src/pages/layouts.test.tsx +54 -0
  461. package/templates/apps/frontend-dashboard/template.json +6 -0
  462. package/templates/apps/frontend-dashboard/tsconfig.json +11 -0
  463. package/templates/apps/frontend-docs/README.md +19 -0
  464. package/templates/apps/frontend-docs/app.config.ts +25 -0
  465. package/templates/apps/frontend-docs/package.json +29 -0
  466. package/templates/apps/frontend-docs/src/globals.css +32 -0
  467. package/templates/apps/frontend-docs/src/lib/locale.test.ts +72 -0
  468. package/templates/apps/frontend-docs/src/lib/locale.ts +56 -0
  469. package/templates/apps/frontend-docs/src/locales/de.ts +24 -0
  470. package/templates/apps/frontend-docs/src/locales/en.ts +28 -0
  471. package/templates/apps/frontend-docs/src/pages/[locale]/docs/[...slug].tsx +18 -0
  472. package/templates/apps/frontend-docs/src/pages/[locale]/index.tsx +13 -0
  473. package/templates/apps/frontend-docs/src/pages/[locale]/mirrors.test.tsx +67 -0
  474. package/templates/apps/frontend-docs/src/pages/docs/[...slug].test.tsx +115 -0
  475. package/templates/apps/frontend-docs/src/pages/docs/[...slug].tsx +82 -0
  476. package/templates/apps/frontend-docs/src/pages/index.test.tsx +90 -0
  477. package/templates/apps/frontend-docs/src/pages/index.tsx +45 -0
  478. package/templates/apps/frontend-docs/src/pages/layout.test.tsx +84 -0
  479. package/templates/apps/frontend-docs/src/pages/layout.tsx +66 -0
  480. package/templates/apps/frontend-docs/template.json +6 -0
  481. package/templates/apps/frontend-docs/tsconfig.json +11 -0
  482. package/templates/apps/frontend-i18n/README.md +61 -0
  483. package/templates/apps/frontend-i18n/app.config.ts +33 -0
  484. package/templates/apps/frontend-i18n/package.json +28 -0
  485. package/templates/apps/frontend-i18n/src/globals.css +46 -0
  486. package/templates/apps/frontend-i18n/src/globals.d.ts +6 -0
  487. package/templates/apps/frontend-i18n/src/lib/locale.test.ts +72 -0
  488. package/templates/apps/frontend-i18n/src/lib/locale.ts +55 -0
  489. package/templates/apps/frontend-i18n/src/locales/de.ts +24 -0
  490. package/templates/apps/frontend-i18n/src/locales/en.ts +25 -0
  491. package/templates/apps/frontend-i18n/src/pages/[locale]/about.tsx +11 -0
  492. package/templates/apps/frontend-i18n/src/pages/[locale]/index.tsx +13 -0
  493. package/templates/apps/frontend-i18n/src/pages/[locale]/mirrors.test.tsx +50 -0
  494. package/templates/apps/frontend-i18n/src/pages/about.test.tsx +75 -0
  495. package/templates/apps/frontend-i18n/src/pages/about.tsx +31 -0
  496. package/templates/apps/frontend-i18n/src/pages/index.test.tsx +102 -0
  497. package/templates/apps/frontend-i18n/src/pages/index.tsx +43 -0
  498. package/templates/apps/frontend-i18n/src/pages/layout.test.tsx +86 -0
  499. package/templates/apps/frontend-i18n/src/pages/layout.tsx +70 -0
  500. package/templates/apps/frontend-i18n/template.json +6 -0
  501. package/templates/apps/frontend-i18n/tsconfig.json +11 -0
  502. package/templates/apps/frontend-landing/README.md +17 -0
  503. package/templates/apps/frontend-landing/app.config.ts +25 -0
  504. package/templates/apps/frontend-landing/package.json +29 -0
  505. package/templates/apps/frontend-landing/src/globals.css +23 -0
  506. package/templates/apps/frontend-landing/src/lib/locale.test.ts +72 -0
  507. package/templates/apps/frontend-landing/src/lib/locale.ts +55 -0
  508. package/templates/apps/frontend-landing/src/locales/de.ts +24 -0
  509. package/templates/apps/frontend-landing/src/locales/en.ts +26 -0
  510. package/templates/apps/frontend-landing/src/pages/[locale]/index.tsx +13 -0
  511. package/templates/apps/frontend-landing/src/pages/[locale]/mirrors.test.tsx +37 -0
  512. package/templates/apps/frontend-landing/src/pages/index.test.tsx +110 -0
  513. package/templates/apps/frontend-landing/src/pages/index.tsx +75 -0
  514. package/templates/apps/frontend-landing/src/pages/layout.test.tsx +84 -0
  515. package/templates/apps/frontend-landing/src/pages/layout.tsx +66 -0
  516. package/templates/apps/frontend-landing/template.json +6 -0
  517. package/templates/apps/frontend-landing/tsconfig.json +11 -0
  518. package/templates/apps/frontend-spa/README.md +45 -0
  519. package/templates/apps/frontend-spa/app.config.ts +27 -0
  520. package/templates/apps/frontend-spa/package.json +29 -0
  521. package/templates/apps/frontend-spa/src/globals.css +84 -0
  522. package/templates/apps/frontend-spa/src/locales/de.ts +22 -0
  523. package/templates/apps/frontend-spa/src/locales/en.ts +29 -0
  524. package/templates/apps/frontend-spa/src/locales/index.ts +15 -0
  525. package/templates/apps/frontend-spa/src/pages/index.test.tsx +137 -0
  526. package/templates/apps/frontend-spa/src/pages/index.tsx +123 -0
  527. package/templates/apps/frontend-spa/src/pages/layout.tsx +27 -0
  528. package/templates/apps/frontend-spa/template.json +6 -0
  529. package/templates/apps/frontend-spa/tsconfig.json +11 -0
  530. package/templates/apps/frontend-ssr/README.md +68 -0
  531. package/templates/apps/frontend-ssr/app.config.ts +32 -0
  532. package/templates/apps/frontend-ssr/package.json +29 -0
  533. package/templates/apps/frontend-ssr/src/globals.css +67 -0
  534. package/templates/apps/frontend-ssr/src/locales/de.ts +41 -0
  535. package/templates/apps/frontend-ssr/src/locales/en.ts +54 -0
  536. package/templates/apps/frontend-ssr/src/locales/index.ts +16 -0
  537. package/templates/apps/frontend-ssr/src/pages/feed-swr.test.tsx +69 -0
  538. package/templates/apps/frontend-ssr/src/pages/feed-swr.tsx +54 -0
  539. package/templates/apps/frontend-ssr/src/pages/feed.test.tsx +73 -0
  540. package/templates/apps/frontend-ssr/src/pages/feed.tsx +64 -0
  541. package/templates/apps/frontend-ssr/src/pages/index.test.tsx +89 -0
  542. package/templates/apps/frontend-ssr/src/pages/index.tsx +72 -0
  543. package/templates/apps/frontend-ssr/src/pages/layout.tsx +37 -0
  544. package/templates/apps/frontend-ssr/template.json +6 -0
  545. package/templates/apps/frontend-ssr/tsconfig.json +11 -0
  546. package/templates/apps/frontend-ssr-api/README.md +50 -0
  547. package/templates/apps/frontend-ssr-api/app.config.ts +43 -0
  548. package/templates/apps/frontend-ssr-api/package.json +30 -0
  549. package/templates/apps/frontend-ssr-api/src/globals.css +38 -0
  550. package/templates/apps/frontend-ssr-api/src/globals.d.ts +6 -0
  551. package/templates/apps/frontend-ssr-api/src/locales/de.ts +20 -0
  552. package/templates/apps/frontend-ssr-api/src/locales/en.ts +31 -0
  553. package/templates/apps/frontend-ssr-api/src/locales/index.ts +16 -0
  554. package/templates/apps/frontend-ssr-api/src/pages/index.test.tsx +105 -0
  555. package/templates/apps/frontend-ssr-api/src/pages/index.tsx +83 -0
  556. package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +28 -0
  557. package/templates/apps/frontend-ssr-api/template.json +6 -0
  558. package/templates/apps/frontend-ssr-api/tsconfig.json +11 -0
  559. package/templates/apps/frontend-static-blog/README.md +49 -0
  560. package/templates/apps/frontend-static-blog/app.config.ts +34 -0
  561. package/templates/apps/frontend-static-blog/package.json +28 -0
  562. package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.test.tsx +65 -0
  563. package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +35 -0
  564. package/templates/apps/frontend-static-blog/src/content/posts.ts +64 -0
  565. package/templates/apps/frontend-static-blog/src/globals.css +75 -0
  566. package/templates/apps/frontend-static-blog/src/lib/locale.test.ts +72 -0
  567. package/templates/apps/frontend-static-blog/src/lib/locale.ts +55 -0
  568. package/templates/apps/frontend-static-blog/src/locales/de.ts +19 -0
  569. package/templates/apps/frontend-static-blog/src/locales/en.ts +26 -0
  570. package/templates/apps/frontend-static-blog/src/pages/[locale]/blog/[slug].tsx +20 -0
  571. package/templates/apps/frontend-static-blog/src/pages/[locale]/index.tsx +13 -0
  572. package/templates/apps/frontend-static-blog/src/pages/[locale]/mirrors.test.tsx +62 -0
  573. package/templates/apps/frontend-static-blog/src/pages/blog/[slug].test.tsx +116 -0
  574. package/templates/apps/frontend-static-blog/src/pages/blog/[slug].tsx +69 -0
  575. package/templates/apps/frontend-static-blog/src/pages/index.test.tsx +100 -0
  576. package/templates/apps/frontend-static-blog/src/pages/index.tsx +58 -0
  577. package/templates/apps/frontend-static-blog/src/pages/layout.tsx +63 -0
  578. package/templates/apps/frontend-static-blog/template.json +6 -0
  579. package/templates/apps/frontend-static-blog/tsconfig.json +11 -0
  580. package/templates/baselines/bare/.env.example +37 -0
  581. package/templates/baselines/bare/README.md +47 -0
  582. package/templates/baselines/bare/baseline.json +31 -0
  583. package/templates/baselines/bare/deploy/README.md +43 -0
  584. package/templates/baselines/bare/deploy/voltro.service.example +36 -0
  585. package/templates/baselines/compose/.env.example +46 -0
  586. package/templates/baselines/compose/README.md +69 -0
  587. package/templates/baselines/compose/baseline.json +51 -0
  588. package/templates/baselines/compose/docker/.dockerignore +38 -0
  589. package/templates/baselines/compose/docker/api.Dockerfile +57 -0
  590. package/templates/baselines/compose/docker/dev.Dockerfile +35 -0
  591. package/templates/baselines/compose/docker/web.Dockerfile +59 -0
  592. package/templates/baselines/compose/docker-compose.dev.yml +89 -0
  593. package/templates/baselines/compose/docker-compose.prod.yml +87 -0
  594. package/templates/baselines/compose/docker-compose.yml +41 -0
  595. package/templates/baselines/compose-mariadb/.env.example +57 -0
  596. package/templates/baselines/compose-mariadb/README.md +78 -0
  597. package/templates/baselines/compose-mariadb/baseline.json +51 -0
  598. package/templates/baselines/compose-mariadb/docker/.dockerignore +38 -0
  599. package/templates/baselines/compose-mariadb/docker/api.Dockerfile +57 -0
  600. package/templates/baselines/compose-mariadb/docker/dev.Dockerfile +35 -0
  601. package/templates/baselines/compose-mariadb/docker/mariadb-init.sql +6 -0
  602. package/templates/baselines/compose-mariadb/docker/web.Dockerfile +59 -0
  603. package/templates/baselines/compose-mariadb/docker-compose.dev.yml +117 -0
  604. package/templates/baselines/compose-mariadb/docker-compose.prod.yml +114 -0
  605. package/templates/baselines/compose-mariadb/docker-compose.yml +79 -0
  606. package/templates/baselines/helm/.env.example +39 -0
  607. package/templates/baselines/helm/README.md +98 -0
  608. package/templates/baselines/helm/baseline.json +53 -0
  609. package/templates/baselines/helm/charts/voltro-app/.helmignore +10 -0
  610. package/templates/baselines/helm/charts/voltro-app/Chart.yaml +10 -0
  611. package/templates/baselines/helm/charts/voltro-app/templates/_helpers.tpl +36 -0
  612. package/templates/baselines/helm/charts/voltro-app/templates/configmap.yaml +13 -0
  613. package/templates/baselines/helm/charts/voltro-app/templates/deployment-api.yaml +120 -0
  614. package/templates/baselines/helm/charts/voltro-app/templates/deployment-web.yaml +45 -0
  615. package/templates/baselines/helm/charts/voltro-app/templates/ingress.yaml +37 -0
  616. package/templates/baselines/helm/charts/voltro-app/templates/postgres-service.yaml +19 -0
  617. package/templates/baselines/helm/charts/voltro-app/templates/postgres-statefulset.yaml +73 -0
  618. package/templates/baselines/helm/charts/voltro-app/templates/secret.yaml +33 -0
  619. package/templates/baselines/helm/charts/voltro-app/templates/service-api.yaml +19 -0
  620. package/templates/baselines/helm/charts/voltro-app/templates/service-web.yaml +19 -0
  621. package/templates/baselines/helm/charts/voltro-app/values-dev.yaml +21 -0
  622. package/templates/baselines/helm/charts/voltro-app/values-prod.yaml +58 -0
  623. package/templates/baselines/helm/charts/voltro-app/values-staging.yaml +25 -0
  624. package/templates/baselines/helm/charts/voltro-app/values.yaml +109 -0
  625. package/templates/baselines/helm/deploy/README.md +94 -0
  626. package/templates/patches/@effect__cluster@0.59.0.patch +262 -0
@@ -0,0 +1,120 @@
1
+ {{- if .Values.api.enabled -}}
2
+ apiVersion: apps/v1
3
+ kind: Deployment
4
+ metadata:
5
+ name: {{ include "voltro-app.fullname" . }}-api
6
+ labels:
7
+ {{- include "voltro-app.labels" . | nindent 4 }}
8
+ app.kubernetes.io/component: api
9
+ spec:
10
+ replicas: {{ .Values.api.replicaCount }}
11
+ selector:
12
+ matchLabels:
13
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
14
+ app.kubernetes.io/instance: {{ .Release.Name }}
15
+ app.kubernetes.io/component: api
16
+ template:
17
+ metadata:
18
+ labels:
19
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
20
+ app.kubernetes.io/instance: {{ .Release.Name }}
21
+ app.kubernetes.io/component: api
22
+ spec:
23
+ serviceAccountName: {{ include "voltro-app.serviceAccountName" . }}
24
+ containers:
25
+ - name: api
26
+ image: "{{ if .Values.global.imageRegistry }}{{ .Values.global.imageRegistry }}/{{ end }}{{ .Values.api.image.repository }}:{{ .Values.api.image.tag }}"
27
+ imagePullPolicy: {{ .Values.global.imagePullPolicy }}
28
+ ports:
29
+ - name: http
30
+ containerPort: {{ .Values.api.port }}
31
+ env:
32
+ # ── Per-pod identity (K8s downward API) ──────────────────
33
+ # POD_NAME → a unique CDC binlog `server_id` per replica (the
34
+ # app derives it via FNV-1a; duplicate server_ids silently
35
+ # break binlog streams). POD_IP → the routable workflow-runner
36
+ # host so a workflow can resume on another pod after a
37
+ # reschedule (the runner defaults to localhost = unreachable
38
+ # cross-pod). Both are MANDATORY at api.replicaCount > 1.
39
+ - name: POD_NAME
40
+ valueFrom:
41
+ fieldRef:
42
+ fieldPath: metadata.name
43
+ - name: POD_IP
44
+ valueFrom:
45
+ fieldRef:
46
+ fieldPath: status.podIP
47
+ - name: VOLTRO_WORKFLOW_RUNNER_HOST
48
+ value: "$(POD_IP)"
49
+ {{- if eq .Values.db.dialect "mariadb" }}
50
+ # ── MariaDB (binlog CDC) ─────────────────────────────────
51
+ - name: DB_DIALECT
52
+ value: "mariadb"
53
+ - name: CDC
54
+ value: {{ .Values.db.mariadb.cdc | quote }}
55
+ - name: DB_URL
56
+ valueFrom:
57
+ secretKeyRef:
58
+ name: {{ required "db.mariadb.urlSecretName is required when db.dialect=mariadb" .Values.db.mariadb.urlSecretName }}
59
+ key: url
60
+ {{- else }}
61
+ # ── Postgres ─────────────────────────────────────────────
62
+ - name: POSTGRES_PASSWORD
63
+ valueFrom:
64
+ secretKeyRef:
65
+ name: {{ default (printf "%s-postgres" (include "voltro-app.fullname" .)) .Values.postgres.passwordSecretName }}
66
+ key: POSTGRES_PASSWORD
67
+ - name: DB_URL
68
+ {{- if .Values.postgres.embedded }}
69
+ value: "postgres://{{ .Values.postgres.user }}:$(POSTGRES_PASSWORD)@{{ include "voltro-app.fullname" . }}-postgres:5432/{{ .Values.postgres.database }}"
70
+ {{- else }}
71
+ valueFrom:
72
+ secretKeyRef:
73
+ name: {{ .Values.postgres.passwordSecretName }}
74
+ key: url
75
+ {{- end }}
76
+ {{- end }}
77
+ - name: VOLTRO_SESSION_SECRET
78
+ valueFrom:
79
+ secretKeyRef:
80
+ name: {{ include "voltro-app.fullname" . }}-session
81
+ key: VOLTRO_SESSION_SECRET
82
+ {{- if .Values.storage.enabled }}
83
+ # ── Object storage (S3 / MinIO) ──────────────────────────
84
+ - name: STORAGE_PROVIDER
85
+ value: {{ .Values.storage.provider | quote }}
86
+ - name: S3_ENDPOINT
87
+ value: {{ .Values.storage.endpoint | quote }}
88
+ - name: S3_BUCKET
89
+ value: {{ .Values.storage.bucket | quote }}
90
+ - name: S3_FORCE_PATH_STYLE
91
+ value: {{ .Values.storage.forcePathStyle | quote }}
92
+ - name: S3_ACCESS_KEY_ID
93
+ valueFrom:
94
+ secretKeyRef:
95
+ name: {{ required "storage.credentialsSecretName is required when storage.enabled" .Values.storage.credentialsSecretName }}
96
+ key: accessKeyId
97
+ - name: S3_SECRET_ACCESS_KEY
98
+ valueFrom:
99
+ secretKeyRef:
100
+ name: {{ .Values.storage.credentialsSecretName }}
101
+ key: secretAccessKey
102
+ {{- end }}
103
+ envFrom:
104
+ - configMapRef:
105
+ name: {{ include "voltro-app.fullname" . }}-config
106
+ resources:
107
+ {{- toYaml .Values.api.resources | nindent 12 }}
108
+ readinessProbe:
109
+ httpGet:
110
+ path: /healthz
111
+ port: http
112
+ initialDelaySeconds: 5
113
+ periodSeconds: 10
114
+ livenessProbe:
115
+ httpGet:
116
+ path: /healthz
117
+ port: http
118
+ initialDelaySeconds: 30
119
+ periodSeconds: 20
120
+ {{- end }}
@@ -0,0 +1,45 @@
1
+ {{- if .Values.web.enabled -}}
2
+ apiVersion: apps/v1
3
+ kind: Deployment
4
+ metadata:
5
+ name: {{ include "voltro-app.fullname" . }}-web
6
+ labels:
7
+ {{- include "voltro-app.labels" . | nindent 4 }}
8
+ app.kubernetes.io/component: web
9
+ spec:
10
+ replicas: {{ .Values.web.replicaCount }}
11
+ selector:
12
+ matchLabels:
13
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
14
+ app.kubernetes.io/instance: {{ .Release.Name }}
15
+ app.kubernetes.io/component: web
16
+ template:
17
+ metadata:
18
+ labels:
19
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
20
+ app.kubernetes.io/instance: {{ .Release.Name }}
21
+ app.kubernetes.io/component: web
22
+ spec:
23
+ serviceAccountName: {{ include "voltro-app.serviceAccountName" . }}
24
+ containers:
25
+ - name: web
26
+ image: "{{ if .Values.global.imageRegistry }}{{ .Values.global.imageRegistry }}/{{ end }}{{ .Values.web.image.repository }}:{{ .Values.web.image.tag }}"
27
+ imagePullPolicy: {{ .Values.global.imagePullPolicy }}
28
+ ports:
29
+ - name: http
30
+ containerPort: {{ .Values.web.port }}
31
+ resources:
32
+ {{- toYaml .Values.web.resources | nindent 12 }}
33
+ readinessProbe:
34
+ httpGet:
35
+ path: /
36
+ port: http
37
+ initialDelaySeconds: 5
38
+ periodSeconds: 10
39
+ livenessProbe:
40
+ httpGet:
41
+ path: /
42
+ port: http
43
+ initialDelaySeconds: 30
44
+ periodSeconds: 20
45
+ {{- end }}
@@ -0,0 +1,37 @@
1
+ {{- if .Values.ingress.enabled -}}
2
+ apiVersion: networking.k8s.io/v1
3
+ kind: Ingress
4
+ metadata:
5
+ name: {{ include "voltro-app.fullname" . }}
6
+ labels:
7
+ {{- include "voltro-app.labels" . | nindent 4 }}
8
+ spec:
9
+ {{- if .Values.ingress.className }}
10
+ ingressClassName: {{ .Values.ingress.className }}
11
+ {{- end }}
12
+ {{- if .Values.ingress.tls }}
13
+ tls:
14
+ {{- range .Values.ingress.tls }}
15
+ - hosts:
16
+ {{- range .hosts }}
17
+ - {{ . | quote }}
18
+ {{- end }}
19
+ secretName: {{ .secretName }}
20
+ {{- end }}
21
+ {{- end }}
22
+ rules:
23
+ {{- range .Values.ingress.hosts }}
24
+ - host: {{ .host | quote }}
25
+ http:
26
+ paths:
27
+ {{- range .paths }}
28
+ - path: {{ .path }}
29
+ pathType: Prefix
30
+ backend:
31
+ service:
32
+ name: {{ include "voltro-app.fullname" $ }}-{{ .service }}
33
+ port:
34
+ number: {{ if eq .service "api" }}{{ $.Values.api.port }}{{ else }}{{ $.Values.web.port }}{{ end }}
35
+ {{- end }}
36
+ {{- end }}
37
+ {{- end }}
@@ -0,0 +1,19 @@
1
+ {{- if and (eq .Values.db.dialect "postgres") .Values.postgres.embedded -}}
2
+ apiVersion: v1
3
+ kind: Service
4
+ metadata:
5
+ name: {{ include "voltro-app.fullname" . }}-postgres
6
+ labels:
7
+ {{- include "voltro-app.labels" . | nindent 4 }}
8
+ app.kubernetes.io/component: postgres
9
+ spec:
10
+ type: ClusterIP
11
+ ports:
12
+ - name: postgres
13
+ port: 5432
14
+ targetPort: 5432
15
+ selector:
16
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
17
+ app.kubernetes.io/instance: {{ .Release.Name }}
18
+ app.kubernetes.io/component: postgres
19
+ {{- end }}
@@ -0,0 +1,73 @@
1
+ {{- if and (eq .Values.db.dialect "postgres") .Values.postgres.embedded -}}
2
+ apiVersion: apps/v1
3
+ kind: StatefulSet
4
+ metadata:
5
+ name: {{ include "voltro-app.fullname" . }}-postgres
6
+ labels:
7
+ {{- include "voltro-app.labels" . | nindent 4 }}
8
+ app.kubernetes.io/component: postgres
9
+ spec:
10
+ serviceName: {{ include "voltro-app.fullname" . }}-postgres
11
+ replicas: 1
12
+ selector:
13
+ matchLabels:
14
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
15
+ app.kubernetes.io/instance: {{ .Release.Name }}
16
+ app.kubernetes.io/component: postgres
17
+ template:
18
+ metadata:
19
+ labels:
20
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
21
+ app.kubernetes.io/instance: {{ .Release.Name }}
22
+ app.kubernetes.io/component: postgres
23
+ spec:
24
+ containers:
25
+ - name: postgres
26
+ image: "{{ .Values.postgres.image.repository }}:{{ .Values.postgres.image.tag }}"
27
+ imagePullPolicy: {{ .Values.global.imagePullPolicy }}
28
+ ports:
29
+ - name: postgres
30
+ containerPort: 5432
31
+ args:
32
+ - "postgres"
33
+ - "-c"
34
+ - "wal_level=logical"
35
+ - "-c"
36
+ - "max_wal_senders=4"
37
+ - "-c"
38
+ - "max_replication_slots=4"
39
+ env:
40
+ - name: POSTGRES_USER
41
+ value: {{ .Values.postgres.user | quote }}
42
+ - name: POSTGRES_DB
43
+ value: {{ .Values.postgres.database | quote }}
44
+ - name: POSTGRES_PASSWORD
45
+ valueFrom:
46
+ secretKeyRef:
47
+ name: {{ default (printf "%s-postgres" (include "voltro-app.fullname" .)) .Values.postgres.passwordSecretName }}
48
+ key: POSTGRES_PASSWORD
49
+ volumeMounts:
50
+ - name: data
51
+ mountPath: /var/lib/postgresql/data
52
+ readinessProbe:
53
+ exec:
54
+ command: ["pg_isready", "-U", "{{ .Values.postgres.user }}", "-d", "{{ .Values.postgres.database }}"]
55
+ initialDelaySeconds: 5
56
+ periodSeconds: 5
57
+ livenessProbe:
58
+ exec:
59
+ command: ["pg_isready", "-U", "{{ .Values.postgres.user }}", "-d", "{{ .Values.postgres.database }}"]
60
+ initialDelaySeconds: 30
61
+ periodSeconds: 10
62
+ volumeClaimTemplates:
63
+ - metadata:
64
+ name: data
65
+ spec:
66
+ accessModes: ["ReadWriteOnce"]
67
+ {{- if .Values.postgres.storageClassName }}
68
+ storageClassName: {{ .Values.postgres.storageClassName }}
69
+ {{- end }}
70
+ resources:
71
+ requests:
72
+ storage: {{ .Values.postgres.storageSize }}
73
+ {{- end }}
@@ -0,0 +1,33 @@
1
+ {{/*
2
+ EXAMPLE Secret. In real deploys, manage the session secret and the
3
+ Postgres credentials via a secret store (Sealed Secrets, External
4
+ Secrets Operator, SOPS+helm-secrets). NEVER commit real secrets.
5
+
6
+ This Secret is created only when sessionSecret is set inline (dev/staging
7
+ convenience). In prod, set passwordSecretName / sessionSecret via a
8
+ pre-existing Secret you reference; values-prod.yaml leaves sessionSecret
9
+ empty so this resource skips itself.
10
+ */}}
11
+ {{- if .Values.sessionSecret -}}
12
+ apiVersion: v1
13
+ kind: Secret
14
+ metadata:
15
+ name: {{ include "voltro-app.fullname" . }}-session
16
+ labels:
17
+ {{- include "voltro-app.labels" . | nindent 4 }}
18
+ type: Opaque
19
+ stringData:
20
+ VOLTRO_SESSION_SECRET: {{ .Values.sessionSecret | quote }}
21
+ {{- end }}
22
+ ---
23
+ {{- if and .Values.postgres.embedded (not .Values.postgres.passwordSecretName) -}}
24
+ apiVersion: v1
25
+ kind: Secret
26
+ metadata:
27
+ name: {{ include "voltro-app.fullname" . }}-postgres
28
+ labels:
29
+ {{- include "voltro-app.labels" . | nindent 4 }}
30
+ type: Opaque
31
+ stringData:
32
+ POSTGRES_PASSWORD: {{ default "change-me-in-dev" .Values.postgres.password | quote }}
33
+ {{- end }}
@@ -0,0 +1,19 @@
1
+ {{- if .Values.api.enabled -}}
2
+ apiVersion: v1
3
+ kind: Service
4
+ metadata:
5
+ name: {{ include "voltro-app.fullname" . }}-api
6
+ labels:
7
+ {{- include "voltro-app.labels" . | nindent 4 }}
8
+ app.kubernetes.io/component: api
9
+ spec:
10
+ type: ClusterIP
11
+ ports:
12
+ - name: http
13
+ port: {{ .Values.api.port }}
14
+ targetPort: http
15
+ selector:
16
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
17
+ app.kubernetes.io/instance: {{ .Release.Name }}
18
+ app.kubernetes.io/component: api
19
+ {{- end }}
@@ -0,0 +1,19 @@
1
+ {{- if .Values.web.enabled -}}
2
+ apiVersion: v1
3
+ kind: Service
4
+ metadata:
5
+ name: {{ include "voltro-app.fullname" . }}-web
6
+ labels:
7
+ {{- include "voltro-app.labels" . | nindent 4 }}
8
+ app.kubernetes.io/component: web
9
+ spec:
10
+ type: ClusterIP
11
+ ports:
12
+ - name: http
13
+ port: {{ .Values.web.port }}
14
+ targetPort: http
15
+ selector:
16
+ app.kubernetes.io/name: {{ include "voltro-app.name" . }}
17
+ app.kubernetes.io/instance: {{ .Release.Name }}
18
+ app.kubernetes.io/component: web
19
+ {{- end }}
@@ -0,0 +1,21 @@
1
+ # Dev cluster overrides for {{projectName}}.
2
+ # Use: pnpm helm:install:dev (which adds -f charts/voltro-app/values-dev.yaml).
3
+
4
+ api:
5
+ replicaCount: 1
6
+ resources:
7
+ requests: { cpu: 50m, memory: 128Mi }
8
+ limits: { cpu: 250m, memory: 256Mi }
9
+
10
+ web:
11
+ replicaCount: 1
12
+ resources:
13
+ requests: { cpu: 50m, memory: 128Mi }
14
+ limits: { cpu: 250m, memory: 256Mi }
15
+
16
+ postgres:
17
+ embedded: true
18
+ storageSize: 1Gi
19
+
20
+ ingress:
21
+ enabled: false # use port-forward in dev clusters
@@ -0,0 +1,58 @@
1
+ # Production overrides for {{projectName}}.
2
+ # REVIEW EVERY VALUE before applying to prod — defaults are conservative
3
+ # but every cluster is different.
4
+
5
+ api:
6
+ replicaCount: 4 # CDC fan-out + cluster workflows scale horizontally
7
+ resources:
8
+ requests: { cpu: 250m, memory: 512Mi }
9
+ limits: { cpu: 1000m, memory: 1Gi }
10
+
11
+ web:
12
+ replicaCount: 3
13
+ resources:
14
+ requests: { cpu: 250m, memory: 512Mi }
15
+ limits: { cpu: 1000m, memory: 1Gi }
16
+
17
+ # ── Database: MariaDB (the company cluster, externally managed) ──────────
18
+ # The MariaDB server MUST run binlog_format=ROW + binlog_row_image=FULL and
19
+ # the DB user MUST hold REPLICATION SLAVE, REPLICATION CLIENT — the binlog
20
+ # reader tails the log for cross-replica real-time. Per-pod POD_NAME/POD_IP
21
+ # (→ unique CDC server_id + routable workflow-runner host) is injected
22
+ # automatically by deployment-api.yaml at replicaCount > 1.
23
+ db:
24
+ dialect: mariadb
25
+ mariadb:
26
+ urlSecretName: {{projectName}}-mariadb # Secret, key 'url' = mysql://…
27
+ cdc: "1"
28
+
29
+ # Embedded Postgres is off under db.dialect=mariadb (kept for the postgres
30
+ # path). NEVER run an embedded DB in prod for a real load.
31
+ postgres:
32
+ embedded: false
33
+
34
+ # ── Object storage ──────────────────────────────────────────────────────
35
+ storage:
36
+ enabled: true
37
+ provider: s3 # or 'minio' for in-cluster MinIO
38
+ bucket: {{projectNameSnake}}
39
+ # endpoint: https://s3.eu-central-1.amazonaws.com # for non-AWS / MinIO
40
+ credentialsSecretName: {{projectName}}-s3 # Secret: accessKeyId + secretAccessKey
41
+
42
+ # Set via a real secret — see templates/secret.yaml comment.
43
+ sessionSecret: "" # MUST come from a Secret
44
+
45
+ ingress:
46
+ enabled: true
47
+ className: nginx
48
+ hosts:
49
+ - host: {{projectName}}.example.com
50
+ paths:
51
+ - path: /api
52
+ service: api
53
+ - path: /
54
+ service: web
55
+ tls:
56
+ - secretName: {{projectName}}-prod-tls
57
+ hosts:
58
+ - {{projectName}}.example.com
@@ -0,0 +1,25 @@
1
+ # Staging overrides for {{projectName}}.
2
+
3
+ api:
4
+ replicaCount: 2
5
+
6
+ web:
7
+ replicaCount: 2
8
+
9
+ postgres:
10
+ embedded: true
11
+ storageSize: 10Gi
12
+
13
+ ingress:
14
+ enabled: true
15
+ hosts:
16
+ - host: staging.{{projectName}}.example.com
17
+ paths:
18
+ - path: /api
19
+ service: api
20
+ - path: /
21
+ service: web
22
+ tls:
23
+ - secretName: {{projectName}}-staging-tls
24
+ hosts:
25
+ - staging.{{projectName}}.example.com
@@ -0,0 +1,109 @@
1
+ # Default values for the {{projectName}} chart.
2
+ # Override these per-env in values-dev.yaml / values-staging.yaml / values-prod.yaml.
3
+
4
+ global:
5
+ imagePullPolicy: IfNotPresent
6
+ imageRegistry: "" # e.g. ghcr.io/your-org — empty means use local image
7
+
8
+ # ---------- API service ----------
9
+ api:
10
+ enabled: true
11
+ image:
12
+ repository: {{projectName}}-api
13
+ tag: latest
14
+ replicaCount: 1
15
+ port: 4000
16
+ resources:
17
+ requests: { cpu: 100m, memory: 256Mi }
18
+ limits: { cpu: 500m, memory: 512Mi }
19
+ env: {}
20
+ # env:
21
+ # LOG_LEVEL: info
22
+
23
+ # ---------- Web service ----------
24
+ web:
25
+ enabled: true
26
+ image:
27
+ repository: {{projectName}}-web
28
+ tag: latest
29
+ replicaCount: 1
30
+ port: 5173
31
+ resources:
32
+ requests: { cpu: 100m, memory: 256Mi }
33
+ limits: { cpu: 500m, memory: 512Mi }
34
+
35
+ # ---------- Database dialect switch ----------
36
+ # 'postgres' uses the postgres block below (embedded StatefulSet or
37
+ # external). 'mariadb' uses an EXTERNALLY-managed MariaDB (the company
38
+ # cluster) reached via a Secret holding the connection url — no embedded
39
+ # DB is shipped to prod. MariaDB turns on binlog CDC; it REQUIRES
40
+ # binlog_format=ROW + binlog_row_image=FULL + a replication grant on the
41
+ # server, and api.replicaCount > 1 needs the per-pod POD_NAME/POD_IP
42
+ # downward-API injection (wired in deployment-api.yaml).
43
+ db:
44
+ dialect: postgres # postgres | mariadb
45
+ mariadb:
46
+ # Secret with key `url` = mysql://user:pass@host:3306/dbname.
47
+ # The DB user must hold REPLICATION SLAVE, REPLICATION CLIENT.
48
+ urlSecretName: ""
49
+ cdc: "1"
50
+
51
+ # ---------- Postgres (used when db.dialect=postgres) ----------
52
+ postgres:
53
+ # Embedded = StatefulSet inside the cluster (fine for dev, not for prod).
54
+ # Set false to point at an externally-managed Postgres.
55
+ embedded: true
56
+
57
+ # Used when embedded: true.
58
+ image:
59
+ repository: postgres
60
+ tag: 17-alpine
61
+ storageSize: 5Gi
62
+ storageClassName: ""
63
+
64
+ # Connection details (used by api as DB_URL).
65
+ user: app
66
+ database: {{projectNameSnake}}
67
+ # passwordSecretName: existing-secret # use an existing Secret in prod
68
+
69
+ # Used when embedded: false. Point at your managed Postgres URL.
70
+ externalUrl: ""
71
+
72
+ # ---------- Object storage (S3 / MinIO) ----------
73
+ # Blobs (avatars, AI-analysis artifacts) live in object storage; the DB
74
+ # holds only refs (_voltro_storage_refs). Disabled by default; enable +
75
+ # point at S3 or an in-cluster MinIO.
76
+ storage:
77
+ enabled: false
78
+ provider: s3 # s3 | minio | filesystem
79
+ endpoint: "" # required for minio / non-AWS S3
80
+ bucket: {{projectNameSnake}}
81
+ forcePathStyle: "0" # "1" for MinIO / path-style endpoints
82
+ # Secret with keys `accessKeyId` + `secretAccessKey`.
83
+ credentialsSecretName: ""
84
+
85
+ # ---------- Session signing secret ----------
86
+ # Set via Secret in prod (see templates/secret.yaml).
87
+ sessionSecret: "change-me-in-prod"
88
+
89
+ # ---------- Ingress ----------
90
+ ingress:
91
+ enabled: false
92
+ className: nginx
93
+ hosts:
94
+ - host: {{projectName}}.example.com
95
+ paths:
96
+ - path: /api
97
+ service: api
98
+ - path: /
99
+ service: web
100
+ tls: []
101
+ # tls:
102
+ # - secretName: {{projectName}}-tls
103
+ # hosts:
104
+ # - {{projectName}}.example.com
105
+
106
+ # ---------- Service account ----------
107
+ serviceAccount:
108
+ create: true
109
+ name: ""
@@ -0,0 +1,94 @@
1
+ # Deploy notes — helm baseline
2
+
3
+ This baseline ships a Helm chart at `charts/voltro-app/` with
4
+ per-env overlays. Deploy is `helm upgrade --install` against the
5
+ right cluster + values file.
6
+
7
+ ## Pre-deploy checklist
8
+
9
+ - [ ] Container images built + pushed to your registry
10
+ - [ ] kubeconfig points at the right cluster
11
+ - [ ] Namespace exists OR `--create-namespace` is in the command
12
+ - [ ] Secrets in place (sealed-secrets / external-secrets / SOPS)
13
+ - [ ] Ingress controller installed (nginx / Traefik / istio)
14
+ - [ ] cert-manager installed if using `tls:` in values
15
+ - [ ] (Prod only) Managed Postgres ready; `postgres.externalUrl` set
16
+
17
+ ## Pushing images
18
+
19
+ The chart references images by `repository:tag`. Build + push from
20
+ the project root:
21
+
22
+ ```sh
23
+ docker build -f docker/api.Dockerfile -t ghcr.io/you/{{projectName}}-api:0.1.0 .
24
+ docker build -f docker/web.Dockerfile -t ghcr.io/you/{{projectName}}-web:0.1.0 .
25
+ docker push ghcr.io/you/{{projectName}}-api:0.1.0
26
+ docker push ghcr.io/you/{{projectName}}-web:0.1.0
27
+ ```
28
+
29
+ Then set the registry in values:
30
+
31
+ ```yaml
32
+ global:
33
+ imageRegistry: ghcr.io/you
34
+ api:
35
+ image: { tag: "0.1.0" }
36
+ web:
37
+ image: { tag: "0.1.0" }
38
+ ```
39
+
40
+ Note: the Dockerfiles ship as part of the `compose` baseline. If
41
+ you switched away from compose and need them back without enabling
42
+ the full docker-compose pipeline, run `voltro baseline set compose`
43
+ once, copy the `docker/` dir, then `voltro baseline set helm` to
44
+ restore the helm baseline.
45
+
46
+ ## Per-env install
47
+
48
+ ```sh
49
+ # Dev cluster (kind / minikube / k3d)
50
+ pnpm helm:install:dev
51
+
52
+ # Staging
53
+ pnpm helm:install:staging
54
+
55
+ # Production
56
+ pnpm helm:install:prod
57
+ ```
58
+
59
+ Each wraps `helm upgrade --install ... -f charts/voltro-app/values-<env>.yaml`.
60
+
61
+ ## GitOps
62
+
63
+ The CLI helpers above are fine for prototyping. For prod, hand the
64
+ chart to ArgoCD / Flux:
65
+
66
+ ```yaml
67
+ # argocd Application
68
+ apiVersion: argoproj.io/v1alpha1
69
+ kind: Application
70
+ metadata:
71
+ name: {{projectName}}-prod
72
+ spec:
73
+ source:
74
+ repoURL: https://github.com/you/{{projectName}}
75
+ path: charts/voltro-app
76
+ helm:
77
+ valueFiles: [values.yaml, values-prod.yaml]
78
+ destination:
79
+ server: https://kubernetes.default.svc
80
+ namespace: {{projectName}}-prod
81
+ syncPolicy:
82
+ automated:
83
+ prune: true
84
+ selfHeal: true
85
+ ```
86
+
87
+ ## Rollback
88
+
89
+ ```sh
90
+ helm rollback {{projectName}}-prod --namespace {{projectName}}-prod
91
+ ```
92
+
93
+ GitOps does the same automatically when you revert the values
94
+ commit. Prefer that path in prod.