@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.
- package/CHANGELOG.md +52 -0
- package/LICENSE +57 -0
- package/README.md +26 -0
- package/SECURITY.md +56 -0
- package/THIRD-PARTY-NOTICES.md +20236 -0
- package/bin/voltro.mjs +43 -0
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +9 -0
- package/dist/commands-CfPH2Wf4.js +18061 -0
- package/dist/frameworkInspectState-CX2250XB.js +86 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.js +5 -0
- package/dist/inspectState.d.ts +116 -0
- package/dist/inspectState.js +2 -0
- package/dist/startup.d.ts +26 -0
- package/dist/startup.js +2 -0
- package/dist/startupRunner-CRhuUl91.js +71 -0
- package/package.json +88 -0
- package/templates/AGENTS.core.md +258 -0
- package/templates/AGENTS.md +351 -0
- package/templates/agent-docs/_index.md +93 -0
- package/templates/agent-docs/_manifest.json +655 -0
- package/templates/agent-docs/ai.md +1845 -0
- package/templates/agent-docs/authentication.md +1788 -0
- package/templates/agent-docs/caching.md +624 -0
- package/templates/agent-docs/cli.md +1650 -0
- package/templates/agent-docs/configuration.md +295 -0
- package/templates/agent-docs/data.md +2172 -0
- package/templates/agent-docs/database/advancedqueries.md +1583 -0
- package/templates/agent-docs/database/columntypes.md +1200 -0
- package/templates/agent-docs/database/hosting.md +881 -0
- package/templates/agent-docs/database/migrations.md +2938 -0
- package/templates/agent-docs/database/misc.md +270 -0
- package/templates/agent-docs/database/overview.md +108 -0
- package/templates/agent-docs/database/querying.md +1622 -0
- package/templates/agent-docs/database/scaling.md +331 -0
- package/templates/agent-docs/database/schema.md +1458 -0
- package/templates/agent-docs/database/seedsdialects.md +1235 -0
- package/templates/agent-docs/database/transactions.md +285 -0
- package/templates/agent-docs/deployment.md +999 -0
- package/templates/agent-docs/internationalization.md +359 -0
- package/templates/agent-docs/introduction.md +438 -0
- package/templates/agent-docs/multi-tenancy.md +610 -0
- package/templates/agent-docs/observability.md +350 -0
- package/templates/agent-docs/plugins.md +1273 -0
- package/templates/agent-docs/reference.md +978 -0
- package/templates/agent-docs/routing.md +1553 -0
- package/templates/agent-docs/scheduling.md +666 -0
- package/templates/agent-docs/schema-driven-ui.md +607 -0
- package/templates/agent-docs/security.md +42 -0
- package/templates/agent-docs/templates/apibackends.md +3214 -0
- package/templates/agent-docs/templates/appshells.md +2062 -0
- package/templates/agent-docs/templates/custom.md +128 -0
- package/templates/agent-docs/templates/overview.md +122 -0
- package/templates/agent-docs/templates/serverless.md +315 -0
- package/templates/agent-docs/testing.md +376 -0
- package/templates/agent-docs/workflows.md +1351 -0
- package/templates/apps/api-ai/README.md +105 -0
- package/templates/apps/api-ai/actions/summarize.action.server.tsx +32 -0
- package/templates/apps/api-ai/actions/summarize.action.ts +33 -0
- package/templates/apps/api-ai/agents/support.agent.server.tsx +31 -0
- package/templates/apps/api-ai/agents/support.agent.tsx +27 -0
- package/templates/apps/api-ai/app.config.ts +57 -0
- package/templates/apps/api-ai/database/schema.ts +67 -0
- package/templates/apps/api-ai/package.json +27 -0
- package/templates/apps/api-ai/seeds/docs.seed.ts +67 -0
- package/templates/apps/api-ai/template.json +6 -0
- package/templates/apps/api-ai/tests/summarize.test.ts +50 -0
- package/templates/apps/api-ai/tools/searchDocs.tool.tsx +60 -0
- package/templates/apps/api-ai/tsconfig.json +5 -0
- package/templates/apps/api-auth/.env +17 -0
- package/templates/apps/api-auth/README.md +109 -0
- package/templates/apps/api-auth/actions/me.action.server.ts +20 -0
- package/templates/apps/api-auth/actions/me.action.ts +19 -0
- package/templates/apps/api-auth/app.config.ts +59 -0
- package/templates/apps/api-auth/database/schema.ts +26 -0
- package/templates/apps/api-auth/package.json +28 -0
- package/templates/apps/api-auth/template.json +6 -0
- package/templates/apps/api-auth/tests/me.test.ts +37 -0
- package/templates/apps/api-auth/tsconfig.json +5 -0
- package/templates/apps/api-backend/README.md +25 -0
- package/templates/apps/api-backend/app.config.ts +39 -0
- package/templates/apps/api-backend/database/schema.ts +57 -0
- package/templates/apps/api-backend/mutations/notes.create.mutation.server.ts +19 -0
- package/templates/apps/api-backend/mutations/notes.create.mutation.ts +37 -0
- package/templates/apps/api-backend/package.json +28 -0
- package/templates/apps/api-backend/queries/notes.query.server.ts +14 -0
- package/templates/apps/api-backend/queries/notes.query.ts +20 -0
- package/templates/apps/api-backend/template.json +6 -0
- package/templates/apps/api-backend/tests/notes.create.test.ts +50 -0
- package/templates/apps/api-backend/tsconfig.json +5 -0
- package/templates/apps/api-backend-deactivation/README.md +49 -0
- package/templates/apps/api-backend-deactivation/actions/users.get.action.server.ts +17 -0
- package/templates/apps/api-backend-deactivation/actions/users.get.action.ts +18 -0
- package/templates/apps/api-backend-deactivation/app.config.ts +20 -0
- package/templates/apps/api-backend-deactivation/database/schema.ts +41 -0
- package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.server.ts +6 -0
- package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.ts +16 -0
- package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.server.ts +10 -0
- package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.ts +19 -0
- package/templates/apps/api-backend-deactivation/package.json +28 -0
- package/templates/apps/api-backend-deactivation/template.json +6 -0
- package/templates/apps/api-backend-deactivation/tests/users.deactivate.test.ts +47 -0
- package/templates/apps/api-backend-deactivation/tsconfig.json +5 -0
- package/templates/apps/api-backend-mail/README.md +39 -0
- package/templates/apps/api-backend-mail/actions/sendWelcome.action.server.ts +15 -0
- package/templates/apps/api-backend-mail/actions/sendWelcome.action.ts +21 -0
- package/templates/apps/api-backend-mail/app.config.ts +34 -0
- package/templates/apps/api-backend-mail/database/schema.ts +57 -0
- package/templates/apps/api-backend-mail/emails/welcome.email.tsx +106 -0
- package/templates/apps/api-backend-mail/mutations/notes.create.mutation.server.ts +19 -0
- package/templates/apps/api-backend-mail/mutations/notes.create.mutation.ts +37 -0
- package/templates/apps/api-backend-mail/package.json +30 -0
- package/templates/apps/api-backend-mail/queries/notes.query.server.ts +14 -0
- package/templates/apps/api-backend-mail/queries/notes.query.ts +20 -0
- package/templates/apps/api-backend-mail/template.json +6 -0
- package/templates/apps/api-backend-mail/tests/notes.create.test.ts +50 -0
- package/templates/apps/api-backend-mail/tsconfig.json +5 -0
- package/templates/apps/api-backend-mariadb/.env.example +35 -0
- package/templates/apps/api-backend-mariadb/README.md +31 -0
- package/templates/apps/api-backend-mariadb/app.config.ts +68 -0
- package/templates/apps/api-backend-mariadb/database/schema.ts +57 -0
- package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.server.ts +19 -0
- package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.ts +37 -0
- package/templates/apps/api-backend-mariadb/package.json +30 -0
- package/templates/apps/api-backend-mariadb/queries/notes.query.server.ts +14 -0
- package/templates/apps/api-backend-mariadb/queries/notes.query.ts +20 -0
- package/templates/apps/api-backend-mariadb/template.json +6 -0
- package/templates/apps/api-backend-mariadb/tests/notes.create.test.ts +50 -0
- package/templates/apps/api-backend-mariadb/tsconfig.json +5 -0
- package/templates/apps/api-backend-storage/README.md +86 -0
- package/templates/apps/api-backend-storage/actions/uploadAvatar.action.server.ts +21 -0
- package/templates/apps/api-backend-storage/actions/uploadAvatar.action.ts +21 -0
- package/templates/apps/api-backend-storage/actions/uploadDocument.action.server.ts +21 -0
- package/templates/apps/api-backend-storage/actions/uploadDocument.action.ts +20 -0
- package/templates/apps/api-backend-storage/app.config.ts +38 -0
- package/templates/apps/api-backend-storage/database/schema.ts +57 -0
- package/templates/apps/api-backend-storage/mutations/notes.create.mutation.server.ts +19 -0
- package/templates/apps/api-backend-storage/mutations/notes.create.mutation.ts +37 -0
- package/templates/apps/api-backend-storage/package.json +27 -0
- package/templates/apps/api-backend-storage/queries/notes.query.server.ts +14 -0
- package/templates/apps/api-backend-storage/queries/notes.query.ts +20 -0
- package/templates/apps/api-backend-storage/template.json +6 -0
- package/templates/apps/api-backend-storage/tests/notes.create.test.ts +50 -0
- package/templates/apps/api-backend-storage/tsconfig.json +5 -0
- package/templates/apps/api-data-advanced/.env +17 -0
- package/templates/apps/api-data-advanced/README.md +88 -0
- package/templates/apps/api-data-advanced/app.config.ts +56 -0
- package/templates/apps/api-data-advanced/database/actors.entity.ts +14 -0
- package/templates/apps/api-data-advanced/database/authors.entity.ts +30 -0
- package/templates/apps/api-data-advanced/database/authors.relations.ts +15 -0
- package/templates/apps/api-data-advanced/database/books.entity.ts +59 -0
- package/templates/apps/api-data-advanced/database/books.relations.ts +10 -0
- package/templates/apps/api-data-advanced/database/index.ts +23 -0
- package/templates/apps/api-data-advanced/database/tenants.entity.ts +11 -0
- package/templates/apps/api-data-advanced/package.json +28 -0
- package/templates/apps/api-data-advanced/queries/authors.withBooks.query.server.ts +18 -0
- package/templates/apps/api-data-advanced/queries/authors.withBooks.query.ts +40 -0
- package/templates/apps/api-data-advanced/queries/books.search.query.server.ts +17 -0
- package/templates/apps/api-data-advanced/queries/books.search.query.ts +39 -0
- package/templates/apps/api-data-advanced/seeds/catalog.seed.ts +101 -0
- package/templates/apps/api-data-advanced/template.json +6 -0
- package/templates/apps/api-data-advanced/tests/queries.test.ts +124 -0
- package/templates/apps/api-data-advanced/tsconfig.json +5 -0
- package/templates/apps/api-durable/README.md +81 -0
- package/templates/apps/api-durable/aggregates/orderStats.aggregate.ts +49 -0
- package/templates/apps/api-durable/app.config.ts +41 -0
- package/templates/apps/api-durable/database/schema.ts +65 -0
- package/templates/apps/api-durable/mutations/orders.approve.mutation.server.ts +43 -0
- package/templates/apps/api-durable/mutations/orders.approve.mutation.ts +23 -0
- package/templates/apps/api-durable/mutations/orders.place.mutation.server.ts +45 -0
- package/templates/apps/api-durable/mutations/orders.place.mutation.ts +40 -0
- package/templates/apps/api-durable/package.json +28 -0
- package/templates/apps/api-durable/schedules/nightlyReport.cron.tsx +37 -0
- package/templates/apps/api-durable/startup/warm.startup.tsx +33 -0
- package/templates/apps/api-durable/subscribers/orderChanges.subscribe.ts +27 -0
- package/templates/apps/api-durable/template.json +6 -0
- package/templates/apps/api-durable/tests/orders.place.test.ts +91 -0
- package/templates/apps/api-durable/triggers/order.placed.trigger.tsx +21 -0
- package/templates/apps/api-durable/tsconfig.json +5 -0
- package/templates/apps/api-durable/workflows/order.fulfill.workflow.server.tsx +103 -0
- package/templates/apps/api-durable/workflows/order.fulfill.workflow.tsx +25 -0
- package/templates/apps/api-feature-flags/README.md +63 -0
- package/templates/apps/api-feature-flags/actions/notes.export.action.server.ts +11 -0
- package/templates/apps/api-feature-flags/actions/notes.export.action.ts +18 -0
- package/templates/apps/api-feature-flags/app.config.ts +41 -0
- package/templates/apps/api-feature-flags/database/schema.ts +37 -0
- package/templates/apps/api-feature-flags/mutations/notes.create.mutation.server.ts +29 -0
- package/templates/apps/api-feature-flags/mutations/notes.create.mutation.ts +28 -0
- package/templates/apps/api-feature-flags/package.json +29 -0
- package/templates/apps/api-feature-flags/template.json +6 -0
- package/templates/apps/api-feature-flags/tests/notes.create.test.ts +67 -0
- package/templates/apps/api-feature-flags/tsconfig.json +5 -0
- package/templates/apps/api-governance/.env +4 -0
- package/templates/apps/api-governance/README.md +61 -0
- package/templates/apps/api-governance/actions/profiles.get.action.server.ts +17 -0
- package/templates/apps/api-governance/actions/profiles.get.action.ts +17 -0
- package/templates/apps/api-governance/app.config.ts +35 -0
- package/templates/apps/api-governance/database/schema.ts +41 -0
- package/templates/apps/api-governance/mutations/profiles.create.mutation.server.ts +17 -0
- package/templates/apps/api-governance/mutations/profiles.create.mutation.ts +21 -0
- package/templates/apps/api-governance/package.json +29 -0
- package/templates/apps/api-governance/template.json +6 -0
- package/templates/apps/api-governance/tests/profiles.create.test.ts +59 -0
- package/templates/apps/api-governance/tsconfig.json +5 -0
- package/templates/apps/api-kv/README.md +100 -0
- package/templates/apps/api-kv/actions/sync.pull.action.server.ts +75 -0
- package/templates/apps/api-kv/actions/sync.pull.action.ts +25 -0
- package/templates/apps/api-kv/actions/sync.reset.action.server.ts +25 -0
- package/templates/apps/api-kv/actions/sync.reset.action.ts +22 -0
- package/templates/apps/api-kv/actions/sync.status.action.server.ts +28 -0
- package/templates/apps/api-kv/actions/sync.status.action.ts +17 -0
- package/templates/apps/api-kv/app.config.ts +48 -0
- package/templates/apps/api-kv/database/schema.ts +62 -0
- package/templates/apps/api-kv/package.json +28 -0
- package/templates/apps/api-kv/queries/events.list.query.server.ts +14 -0
- package/templates/apps/api-kv/queries/events.list.query.ts +23 -0
- package/templates/apps/api-kv/template.json +6 -0
- package/templates/apps/api-kv/tests/sync.test.ts +103 -0
- package/templates/apps/api-kv/tsconfig.json +5 -0
- package/templates/apps/api-moderation/README.md +46 -0
- package/templates/apps/api-moderation/app.config.ts +33 -0
- package/templates/apps/api-moderation/database/schema.ts +45 -0
- package/templates/apps/api-moderation/mutations/comments.create.mutation.server.ts +8 -0
- package/templates/apps/api-moderation/mutations/comments.create.mutation.ts +20 -0
- package/templates/apps/api-moderation/mutations/posts.create.mutation.server.ts +9 -0
- package/templates/apps/api-moderation/mutations/posts.create.mutation.ts +25 -0
- package/templates/apps/api-moderation/package.json +29 -0
- package/templates/apps/api-moderation/template.json +6 -0
- package/templates/apps/api-moderation/tests/posts.create.test.ts +79 -0
- package/templates/apps/api-moderation/tsconfig.json +5 -0
- package/templates/apps/api-observability/README.md +106 -0
- package/templates/apps/api-observability/app.config.ts +32 -0
- package/templates/apps/api-observability/database/schema.ts +38 -0
- package/templates/apps/api-observability/mutations/notes.create.mutation.server.ts +33 -0
- package/templates/apps/api-observability/mutations/notes.create.mutation.ts +15 -0
- package/templates/apps/api-observability/package.json +29 -0
- package/templates/apps/api-observability/queries/notes.list.query.server.ts +7 -0
- package/templates/apps/api-observability/queries/notes.list.query.ts +14 -0
- package/templates/apps/api-observability/template.json +6 -0
- package/templates/apps/api-observability/tests/notes.create.test.ts +36 -0
- package/templates/apps/api-observability/tsconfig.json +5 -0
- package/templates/apps/api-ratelimit/README.md +49 -0
- package/templates/apps/api-ratelimit/app.config.ts +42 -0
- package/templates/apps/api-ratelimit/database/schema.ts +37 -0
- package/templates/apps/api-ratelimit/mutations/notes.create.mutation.server.ts +16 -0
- package/templates/apps/api-ratelimit/mutations/notes.create.mutation.ts +34 -0
- package/templates/apps/api-ratelimit/package.json +29 -0
- package/templates/apps/api-ratelimit/template.json +6 -0
- package/templates/apps/api-ratelimit/tests/notes.create.test.ts +69 -0
- package/templates/apps/api-ratelimit/tsconfig.json +5 -0
- package/templates/apps/api-rbac/README.md +59 -0
- package/templates/apps/api-rbac/app.config.ts +48 -0
- package/templates/apps/api-rbac/database/schema.ts +37 -0
- package/templates/apps/api-rbac/mutations/notes.create.mutation.server.ts +22 -0
- package/templates/apps/api-rbac/mutations/notes.create.mutation.ts +26 -0
- package/templates/apps/api-rbac/package.json +29 -0
- package/templates/apps/api-rbac/template.json +6 -0
- package/templates/apps/api-rbac/tests/notes.create.test.ts +80 -0
- package/templates/apps/api-rbac/tsconfig.json +5 -0
- package/templates/apps/api-rest/README.md +85 -0
- package/templates/apps/api-rest/app.config.ts +70 -0
- package/templates/apps/api-rest/database/schema.ts +52 -0
- package/templates/apps/api-rest/lib/product.ts +30 -0
- package/templates/apps/api-rest/package.json +27 -0
- package/templates/apps/api-rest/routes/v1/products.create.route.tsx +45 -0
- package/templates/apps/api-rest/routes/v1/products.delete.route.tsx +25 -0
- package/templates/apps/api-rest/routes/v1/products.get.route.tsx +29 -0
- package/templates/apps/api-rest/routes/v1/products.list.route.tsx +43 -0
- package/templates/apps/api-rest/template.json +6 -0
- package/templates/apps/api-rest/tests/products.create.test.ts +53 -0
- package/templates/apps/api-rest/tsconfig.json +5 -0
- package/templates/apps/api-saas/README.md +106 -0
- package/templates/apps/api-saas/app.config.ts +51 -0
- package/templates/apps/api-saas/database/schema.ts +50 -0
- package/templates/apps/api-saas/mutations/projects.create.mutation.server.ts +52 -0
- package/templates/apps/api-saas/mutations/projects.create.mutation.ts +18 -0
- package/templates/apps/api-saas/package.json +31 -0
- package/templates/apps/api-saas/queries/projects.list.query.server.ts +7 -0
- package/templates/apps/api-saas/queries/projects.list.query.ts +18 -0
- package/templates/apps/api-saas/template.json +6 -0
- package/templates/apps/api-saas/tests/projects.create.test.ts +47 -0
- package/templates/apps/api-saas/tsconfig.json +5 -0
- package/templates/apps/api-search/README.md +68 -0
- package/templates/apps/api-search/app.config.ts +31 -0
- package/templates/apps/api-search/database/schema.ts +47 -0
- package/templates/apps/api-search/lib/search.ts +27 -0
- package/templates/apps/api-search/mutations/articles.create.mutation.server.ts +19 -0
- package/templates/apps/api-search/mutations/articles.create.mutation.ts +35 -0
- package/templates/apps/api-search/package.json +29 -0
- package/templates/apps/api-search/queries/articles.list.query.server.ts +14 -0
- package/templates/apps/api-search/queries/articles.list.query.ts +19 -0
- package/templates/apps/api-search/seeds/articles.seed.ts +41 -0
- package/templates/apps/api-search/startup/searchBackfill.startup.tsx +24 -0
- package/templates/apps/api-search/template.json +6 -0
- package/templates/apps/api-search/tests/articles.create.test.ts +69 -0
- package/templates/apps/api-search/tsconfig.json +5 -0
- package/templates/apps/api-versioning/README.md +51 -0
- package/templates/apps/api-versioning/actions/documents.asOf.action.server.ts +13 -0
- package/templates/apps/api-versioning/actions/documents.asOf.action.ts +14 -0
- package/templates/apps/api-versioning/actions/documents.history.action.server.ts +15 -0
- package/templates/apps/api-versioning/actions/documents.history.action.ts +17 -0
- package/templates/apps/api-versioning/app.config.ts +24 -0
- package/templates/apps/api-versioning/database/schema.ts +38 -0
- package/templates/apps/api-versioning/mutations/documents.create.mutation.server.ts +8 -0
- package/templates/apps/api-versioning/mutations/documents.create.mutation.ts +21 -0
- package/templates/apps/api-versioning/mutations/documents.update.mutation.server.ts +9 -0
- package/templates/apps/api-versioning/mutations/documents.update.mutation.ts +21 -0
- package/templates/apps/api-versioning/package.json +29 -0
- package/templates/apps/api-versioning/template.json +6 -0
- package/templates/apps/api-versioning/tests/documents.create.test.ts +37 -0
- package/templates/apps/api-versioning/tsconfig.json +5 -0
- package/templates/apps/api-webhooks/.env +6 -0
- package/templates/apps/api-webhooks/README.md +106 -0
- package/templates/apps/api-webhooks/app.config.ts +16 -0
- package/templates/apps/api-webhooks/database/schema.ts +49 -0
- package/templates/apps/api-webhooks/events/order.completed.webhook.tsx +22 -0
- package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.server.ts +37 -0
- package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.ts +15 -0
- package/templates/apps/api-webhooks/package.json +28 -0
- package/templates/apps/api-webhooks/queries/orders.list.query.server.ts +7 -0
- package/templates/apps/api-webhooks/queries/orders.list.query.ts +15 -0
- package/templates/apps/api-webhooks/template.json +6 -0
- package/templates/apps/api-webhooks/tests/orders.fulfill.test.ts +51 -0
- package/templates/apps/api-webhooks/tsconfig.json +5 -0
- package/templates/apps/api-webhooks/webhooks/orders.webhook.tsx +35 -0
- package/templates/apps/changelog/README.md +77 -0
- package/templates/apps/changelog/app.config.ts +27 -0
- package/templates/apps/changelog/content/releases/0.1.0.mdx +19 -0
- package/templates/apps/changelog/content/releases/0.2.0.mdx +28 -0
- package/templates/apps/changelog/package.json +30 -0
- package/templates/apps/changelog/scripts/generate-rss.mjs +38 -0
- package/templates/apps/changelog/src/globals.css +66 -0
- package/templates/apps/changelog/src/globals.d.ts +16 -0
- package/templates/apps/changelog/src/lib/locale.test.ts +72 -0
- package/templates/apps/changelog/src/lib/locale.ts +55 -0
- package/templates/apps/changelog/src/lib/releases.ts +21 -0
- package/templates/apps/changelog/src/locales/de.ts +22 -0
- package/templates/apps/changelog/src/locales/en.ts +30 -0
- package/templates/apps/changelog/src/pages/[locale]/[slug].tsx +24 -0
- package/templates/apps/changelog/src/pages/[locale]/index.tsx +13 -0
- package/templates/apps/changelog/src/pages/[locale]/mirrors.test.tsx +95 -0
- package/templates/apps/changelog/src/pages/[slug].test.tsx +127 -0
- package/templates/apps/changelog/src/pages/[slug].tsx +52 -0
- package/templates/apps/changelog/src/pages/index.test.tsx +112 -0
- package/templates/apps/changelog/src/pages/index.tsx +55 -0
- package/templates/apps/changelog/src/pages/layout.tsx +84 -0
- package/templates/apps/changelog/template.json +6 -0
- package/templates/apps/changelog/tsconfig.json +11 -0
- package/templates/apps/edge-functions/README.md +55 -0
- package/templates/apps/edge-functions/functions/aiComplete.serverless.ts +58 -0
- package/templates/apps/edge-functions/functions/currencyConvert.serverless.ts +47 -0
- package/templates/apps/edge-functions/functions/geoGreeting.serverless.ts +44 -0
- package/templates/apps/edge-functions/functions/health.serverless.ts +29 -0
- package/templates/apps/edge-functions/functions/resolveLink.serverless.ts +32 -0
- package/templates/apps/edge-functions/functions/shareLink.serverless.ts +30 -0
- package/templates/apps/edge-functions/functions/slackNotify.serverless.ts +40 -0
- package/templates/apps/edge-functions/functions/verifySignature.serverless.ts +52 -0
- package/templates/apps/edge-functions/package.json +21 -0
- package/templates/apps/edge-functions/template.json +6 -0
- package/templates/apps/edge-functions/tsconfig.json +10 -0
- package/templates/apps/frontend-admin/README.md +40 -0
- package/templates/apps/frontend-admin/app.config.ts +37 -0
- package/templates/apps/frontend-admin/package.json +30 -0
- package/templates/apps/frontend-admin/src/config.ts +8 -0
- package/templates/apps/frontend-admin/src/globals.css +76 -0
- package/templates/apps/frontend-admin/src/globals.d.ts +6 -0
- package/templates/apps/frontend-admin/src/lib/admin.ts +16 -0
- package/templates/apps/frontend-admin/src/lib/auth.ts +24 -0
- package/templates/apps/frontend-admin/src/locales/de.ts +67 -0
- package/templates/apps/frontend-admin/src/locales/en.ts +79 -0
- package/templates/apps/frontend-admin/src/locales/index.ts +15 -0
- package/templates/apps/frontend-admin/src/pages/(marketing)/index.test.tsx +55 -0
- package/templates/apps/frontend-admin/src/pages/(marketing)/index.tsx +32 -0
- package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +29 -0
- package/templates/apps/frontend-admin/src/pages/(marketing)/login.test.tsx +73 -0
- package/templates/apps/frontend-admin/src/pages/(marketing)/login.tsx +35 -0
- package/templates/apps/frontend-admin/src/pages/admin/[entity].tsx +121 -0
- package/templates/apps/frontend-admin/src/pages/admin/entity.test.tsx +119 -0
- package/templates/apps/frontend-admin/src/pages/admin/error.tsx +20 -0
- package/templates/apps/frontend-admin/src/pages/admin/fallbacks.test.tsx +68 -0
- package/templates/apps/frontend-admin/src/pages/admin/index.test.tsx +88 -0
- package/templates/apps/frontend-admin/src/pages/admin/index.tsx +65 -0
- package/templates/apps/frontend-admin/src/pages/admin/layout.test.tsx +114 -0
- package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +97 -0
- package/templates/apps/frontend-admin/src/pages/admin/loading.tsx +15 -0
- package/templates/apps/frontend-admin/src/pages/admin/not-found.tsx +15 -0
- package/templates/apps/frontend-admin/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-admin/src/pages/layouts.test.tsx +54 -0
- package/templates/apps/frontend-admin/template.json +6 -0
- package/templates/apps/frontend-admin/tsconfig.json +11 -0
- package/templates/apps/frontend-app/README.md +98 -0
- package/templates/apps/frontend-app/app.config.ts +43 -0
- package/templates/apps/frontend-app/package.json +30 -0
- package/templates/apps/frontend-app/src/locales/de.ts +36 -0
- package/templates/apps/frontend-app/src/locales/en.ts +43 -0
- package/templates/apps/frontend-app/src/locales/index.ts +15 -0
- package/templates/apps/frontend-app/src/pages/index.test.tsx +167 -0
- package/templates/apps/frontend-app/src/pages/index.tsx +136 -0
- package/templates/apps/frontend-app/src/pages/layout.tsx +41 -0
- package/templates/apps/frontend-app/src/pages/schema-ui.test.tsx +99 -0
- package/templates/apps/frontend-app/src/pages/schema-ui.tsx +74 -0
- package/templates/apps/frontend-app/template.json +6 -0
- package/templates/apps/frontend-app/tsconfig.json +11 -0
- package/templates/apps/frontend-blank/README.md +18 -0
- package/templates/apps/frontend-blank/app.config.ts +29 -0
- package/templates/apps/frontend-blank/package.json +29 -0
- package/templates/apps/frontend-blank/src/locales/de.ts +15 -0
- package/templates/apps/frontend-blank/src/locales/en.ts +22 -0
- package/templates/apps/frontend-blank/src/locales/index.ts +15 -0
- package/templates/apps/frontend-blank/src/pages/index.test.tsx +55 -0
- package/templates/apps/frontend-blank/src/pages/index.tsx +27 -0
- package/templates/apps/frontend-blank/src/pages/layout.test.tsx +54 -0
- package/templates/apps/frontend-blank/src/pages/layout.tsx +35 -0
- package/templates/apps/frontend-blank/template.json +6 -0
- package/templates/apps/frontend-blank/tsconfig.json +11 -0
- package/templates/apps/frontend-contact/README.md +65 -0
- package/templates/apps/frontend-contact/app.config.ts +25 -0
- package/templates/apps/frontend-contact/functions/sendMessage.serverless.ts +69 -0
- package/templates/apps/frontend-contact/package.json +33 -0
- package/templates/apps/frontend-contact/src/components/ContactForm.island.test.tsx +142 -0
- package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +104 -0
- package/templates/apps/frontend-contact/src/config.ts +12 -0
- package/templates/apps/frontend-contact/src/globals.css +84 -0
- package/templates/apps/frontend-contact/src/lib/locale.ts +55 -0
- package/templates/apps/frontend-contact/src/locales/de.ts +26 -0
- package/templates/apps/frontend-contact/src/locales/en.ts +29 -0
- package/templates/apps/frontend-contact/src/pages/[locale]/index.tsx +14 -0
- package/templates/apps/frontend-contact/src/pages/index.test.tsx +70 -0
- package/templates/apps/frontend-contact/src/pages/index.tsx +63 -0
- package/templates/apps/frontend-contact/src/pages/layout.tsx +65 -0
- package/templates/apps/frontend-contact/template.json +6 -0
- package/templates/apps/frontend-contact/tsconfig.json +11 -0
- package/templates/apps/frontend-dashboard/README.md +54 -0
- package/templates/apps/frontend-dashboard/app.config.ts +39 -0
- package/templates/apps/frontend-dashboard/package.json +29 -0
- package/templates/apps/frontend-dashboard/src/config.ts +8 -0
- package/templates/apps/frontend-dashboard/src/globals.css +72 -0
- package/templates/apps/frontend-dashboard/src/globals.d.ts +6 -0
- package/templates/apps/frontend-dashboard/src/lib/auth.ts +27 -0
- package/templates/apps/frontend-dashboard/src/locales/de.ts +49 -0
- package/templates/apps/frontend-dashboard/src/locales/en.ts +60 -0
- package/templates/apps/frontend-dashboard/src/locales/index.ts +15 -0
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/index.test.tsx +55 -0
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/index.tsx +34 -0
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +32 -0
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/login.test.tsx +74 -0
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/login.tsx +40 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/error.tsx +21 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/fallbacks.test.tsx +68 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/index.test.tsx +55 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/index.tsx +38 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.test.tsx +88 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +69 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/loading.tsx +21 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/not-found.tsx +19 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/settings.test.tsx +69 -0
- package/templates/apps/frontend-dashboard/src/pages/dashboard/settings.tsx +35 -0
- package/templates/apps/frontend-dashboard/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-dashboard/src/pages/layouts.test.tsx +54 -0
- package/templates/apps/frontend-dashboard/template.json +6 -0
- package/templates/apps/frontend-dashboard/tsconfig.json +11 -0
- package/templates/apps/frontend-docs/README.md +19 -0
- package/templates/apps/frontend-docs/app.config.ts +25 -0
- package/templates/apps/frontend-docs/package.json +29 -0
- package/templates/apps/frontend-docs/src/globals.css +32 -0
- package/templates/apps/frontend-docs/src/lib/locale.test.ts +72 -0
- package/templates/apps/frontend-docs/src/lib/locale.ts +56 -0
- package/templates/apps/frontend-docs/src/locales/de.ts +24 -0
- package/templates/apps/frontend-docs/src/locales/en.ts +28 -0
- package/templates/apps/frontend-docs/src/pages/[locale]/docs/[...slug].tsx +18 -0
- package/templates/apps/frontend-docs/src/pages/[locale]/index.tsx +13 -0
- package/templates/apps/frontend-docs/src/pages/[locale]/mirrors.test.tsx +67 -0
- package/templates/apps/frontend-docs/src/pages/docs/[...slug].test.tsx +115 -0
- package/templates/apps/frontend-docs/src/pages/docs/[...slug].tsx +82 -0
- package/templates/apps/frontend-docs/src/pages/index.test.tsx +90 -0
- package/templates/apps/frontend-docs/src/pages/index.tsx +45 -0
- package/templates/apps/frontend-docs/src/pages/layout.test.tsx +84 -0
- package/templates/apps/frontend-docs/src/pages/layout.tsx +66 -0
- package/templates/apps/frontend-docs/template.json +6 -0
- package/templates/apps/frontend-docs/tsconfig.json +11 -0
- package/templates/apps/frontend-i18n/README.md +61 -0
- package/templates/apps/frontend-i18n/app.config.ts +33 -0
- package/templates/apps/frontend-i18n/package.json +28 -0
- package/templates/apps/frontend-i18n/src/globals.css +46 -0
- package/templates/apps/frontend-i18n/src/globals.d.ts +6 -0
- package/templates/apps/frontend-i18n/src/lib/locale.test.ts +72 -0
- package/templates/apps/frontend-i18n/src/lib/locale.ts +55 -0
- package/templates/apps/frontend-i18n/src/locales/de.ts +24 -0
- package/templates/apps/frontend-i18n/src/locales/en.ts +25 -0
- package/templates/apps/frontend-i18n/src/pages/[locale]/about.tsx +11 -0
- package/templates/apps/frontend-i18n/src/pages/[locale]/index.tsx +13 -0
- package/templates/apps/frontend-i18n/src/pages/[locale]/mirrors.test.tsx +50 -0
- package/templates/apps/frontend-i18n/src/pages/about.test.tsx +75 -0
- package/templates/apps/frontend-i18n/src/pages/about.tsx +31 -0
- package/templates/apps/frontend-i18n/src/pages/index.test.tsx +102 -0
- package/templates/apps/frontend-i18n/src/pages/index.tsx +43 -0
- package/templates/apps/frontend-i18n/src/pages/layout.test.tsx +86 -0
- package/templates/apps/frontend-i18n/src/pages/layout.tsx +70 -0
- package/templates/apps/frontend-i18n/template.json +6 -0
- package/templates/apps/frontend-i18n/tsconfig.json +11 -0
- package/templates/apps/frontend-landing/README.md +17 -0
- package/templates/apps/frontend-landing/app.config.ts +25 -0
- package/templates/apps/frontend-landing/package.json +29 -0
- package/templates/apps/frontend-landing/src/globals.css +23 -0
- package/templates/apps/frontend-landing/src/lib/locale.test.ts +72 -0
- package/templates/apps/frontend-landing/src/lib/locale.ts +55 -0
- package/templates/apps/frontend-landing/src/locales/de.ts +24 -0
- package/templates/apps/frontend-landing/src/locales/en.ts +26 -0
- package/templates/apps/frontend-landing/src/pages/[locale]/index.tsx +13 -0
- package/templates/apps/frontend-landing/src/pages/[locale]/mirrors.test.tsx +37 -0
- package/templates/apps/frontend-landing/src/pages/index.test.tsx +110 -0
- package/templates/apps/frontend-landing/src/pages/index.tsx +75 -0
- package/templates/apps/frontend-landing/src/pages/layout.test.tsx +84 -0
- package/templates/apps/frontend-landing/src/pages/layout.tsx +66 -0
- package/templates/apps/frontend-landing/template.json +6 -0
- package/templates/apps/frontend-landing/tsconfig.json +11 -0
- package/templates/apps/frontend-spa/README.md +45 -0
- package/templates/apps/frontend-spa/app.config.ts +27 -0
- package/templates/apps/frontend-spa/package.json +29 -0
- package/templates/apps/frontend-spa/src/globals.css +84 -0
- package/templates/apps/frontend-spa/src/locales/de.ts +22 -0
- package/templates/apps/frontend-spa/src/locales/en.ts +29 -0
- package/templates/apps/frontend-spa/src/locales/index.ts +15 -0
- package/templates/apps/frontend-spa/src/pages/index.test.tsx +137 -0
- package/templates/apps/frontend-spa/src/pages/index.tsx +123 -0
- package/templates/apps/frontend-spa/src/pages/layout.tsx +27 -0
- package/templates/apps/frontend-spa/template.json +6 -0
- package/templates/apps/frontend-spa/tsconfig.json +11 -0
- package/templates/apps/frontend-ssr/README.md +68 -0
- package/templates/apps/frontend-ssr/app.config.ts +32 -0
- package/templates/apps/frontend-ssr/package.json +29 -0
- package/templates/apps/frontend-ssr/src/globals.css +67 -0
- package/templates/apps/frontend-ssr/src/locales/de.ts +41 -0
- package/templates/apps/frontend-ssr/src/locales/en.ts +54 -0
- package/templates/apps/frontend-ssr/src/locales/index.ts +16 -0
- package/templates/apps/frontend-ssr/src/pages/feed-swr.test.tsx +69 -0
- package/templates/apps/frontend-ssr/src/pages/feed-swr.tsx +54 -0
- package/templates/apps/frontend-ssr/src/pages/feed.test.tsx +73 -0
- package/templates/apps/frontend-ssr/src/pages/feed.tsx +64 -0
- package/templates/apps/frontend-ssr/src/pages/index.test.tsx +89 -0
- package/templates/apps/frontend-ssr/src/pages/index.tsx +72 -0
- package/templates/apps/frontend-ssr/src/pages/layout.tsx +37 -0
- package/templates/apps/frontend-ssr/template.json +6 -0
- package/templates/apps/frontend-ssr/tsconfig.json +11 -0
- package/templates/apps/frontend-ssr-api/README.md +50 -0
- package/templates/apps/frontend-ssr-api/app.config.ts +43 -0
- package/templates/apps/frontend-ssr-api/package.json +30 -0
- package/templates/apps/frontend-ssr-api/src/globals.css +38 -0
- package/templates/apps/frontend-ssr-api/src/globals.d.ts +6 -0
- package/templates/apps/frontend-ssr-api/src/locales/de.ts +20 -0
- package/templates/apps/frontend-ssr-api/src/locales/en.ts +31 -0
- package/templates/apps/frontend-ssr-api/src/locales/index.ts +16 -0
- package/templates/apps/frontend-ssr-api/src/pages/index.test.tsx +105 -0
- package/templates/apps/frontend-ssr-api/src/pages/index.tsx +83 -0
- package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +28 -0
- package/templates/apps/frontend-ssr-api/template.json +6 -0
- package/templates/apps/frontend-ssr-api/tsconfig.json +11 -0
- package/templates/apps/frontend-static-blog/README.md +49 -0
- package/templates/apps/frontend-static-blog/app.config.ts +34 -0
- package/templates/apps/frontend-static-blog/package.json +28 -0
- package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.test.tsx +65 -0
- package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +35 -0
- package/templates/apps/frontend-static-blog/src/content/posts.ts +64 -0
- package/templates/apps/frontend-static-blog/src/globals.css +75 -0
- package/templates/apps/frontend-static-blog/src/lib/locale.test.ts +72 -0
- package/templates/apps/frontend-static-blog/src/lib/locale.ts +55 -0
- package/templates/apps/frontend-static-blog/src/locales/de.ts +19 -0
- package/templates/apps/frontend-static-blog/src/locales/en.ts +26 -0
- package/templates/apps/frontend-static-blog/src/pages/[locale]/blog/[slug].tsx +20 -0
- package/templates/apps/frontend-static-blog/src/pages/[locale]/index.tsx +13 -0
- package/templates/apps/frontend-static-blog/src/pages/[locale]/mirrors.test.tsx +62 -0
- package/templates/apps/frontend-static-blog/src/pages/blog/[slug].test.tsx +116 -0
- package/templates/apps/frontend-static-blog/src/pages/blog/[slug].tsx +69 -0
- package/templates/apps/frontend-static-blog/src/pages/index.test.tsx +100 -0
- package/templates/apps/frontend-static-blog/src/pages/index.tsx +58 -0
- package/templates/apps/frontend-static-blog/src/pages/layout.tsx +63 -0
- package/templates/apps/frontend-static-blog/template.json +6 -0
- package/templates/apps/frontend-static-blog/tsconfig.json +11 -0
- package/templates/baselines/bare/.env.example +37 -0
- package/templates/baselines/bare/README.md +47 -0
- package/templates/baselines/bare/baseline.json +31 -0
- package/templates/baselines/bare/deploy/README.md +43 -0
- package/templates/baselines/bare/deploy/voltro.service.example +36 -0
- package/templates/baselines/compose/.env.example +46 -0
- package/templates/baselines/compose/README.md +69 -0
- package/templates/baselines/compose/baseline.json +51 -0
- package/templates/baselines/compose/docker/.dockerignore +38 -0
- package/templates/baselines/compose/docker/api.Dockerfile +57 -0
- package/templates/baselines/compose/docker/dev.Dockerfile +35 -0
- package/templates/baselines/compose/docker/web.Dockerfile +59 -0
- package/templates/baselines/compose/docker-compose.dev.yml +89 -0
- package/templates/baselines/compose/docker-compose.prod.yml +87 -0
- package/templates/baselines/compose/docker-compose.yml +41 -0
- package/templates/baselines/compose-mariadb/.env.example +57 -0
- package/templates/baselines/compose-mariadb/README.md +78 -0
- package/templates/baselines/compose-mariadb/baseline.json +51 -0
- package/templates/baselines/compose-mariadb/docker/.dockerignore +38 -0
- package/templates/baselines/compose-mariadb/docker/api.Dockerfile +57 -0
- package/templates/baselines/compose-mariadb/docker/dev.Dockerfile +35 -0
- package/templates/baselines/compose-mariadb/docker/mariadb-init.sql +6 -0
- package/templates/baselines/compose-mariadb/docker/web.Dockerfile +59 -0
- package/templates/baselines/compose-mariadb/docker-compose.dev.yml +117 -0
- package/templates/baselines/compose-mariadb/docker-compose.prod.yml +114 -0
- package/templates/baselines/compose-mariadb/docker-compose.yml +79 -0
- package/templates/baselines/helm/.env.example +39 -0
- package/templates/baselines/helm/README.md +98 -0
- package/templates/baselines/helm/baseline.json +53 -0
- package/templates/baselines/helm/charts/voltro-app/.helmignore +10 -0
- package/templates/baselines/helm/charts/voltro-app/Chart.yaml +10 -0
- package/templates/baselines/helm/charts/voltro-app/templates/_helpers.tpl +36 -0
- package/templates/baselines/helm/charts/voltro-app/templates/configmap.yaml +13 -0
- package/templates/baselines/helm/charts/voltro-app/templates/deployment-api.yaml +120 -0
- package/templates/baselines/helm/charts/voltro-app/templates/deployment-web.yaml +45 -0
- package/templates/baselines/helm/charts/voltro-app/templates/ingress.yaml +37 -0
- package/templates/baselines/helm/charts/voltro-app/templates/postgres-service.yaml +19 -0
- package/templates/baselines/helm/charts/voltro-app/templates/postgres-statefulset.yaml +73 -0
- package/templates/baselines/helm/charts/voltro-app/templates/secret.yaml +33 -0
- package/templates/baselines/helm/charts/voltro-app/templates/service-api.yaml +19 -0
- package/templates/baselines/helm/charts/voltro-app/templates/service-web.yaml +19 -0
- package/templates/baselines/helm/charts/voltro-app/values-dev.yaml +21 -0
- package/templates/baselines/helm/charts/voltro-app/values-prod.yaml +58 -0
- package/templates/baselines/helm/charts/voltro-app/values-staging.yaml +25 -0
- package/templates/baselines/helm/charts/voltro-app/values.yaml +109 -0
- package/templates/baselines/helm/deploy/README.md +94 -0
- 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.
|