@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,117 @@
|
|
|
1
|
+
# {{projectName}} full-stack DEV docker compose.
|
|
2
|
+
#
|
|
3
|
+
# Boots Postgres + apps with hot-reload. Each app container runs as
|
|
4
|
+
# the HOST user (via `user: ${HOST_UID}:${HOST_GID}`) so files written
|
|
5
|
+
# into the bind-mounted workspace land owned by you, not root. Without
|
|
6
|
+
# this, switching between docker dev and native pnpm dev leaves
|
|
7
|
+
# permission-denied errors on the cached vite deps.
|
|
8
|
+
#
|
|
9
|
+
# The pnpm-prebaked dev image (docker/dev.Dockerfile) is built once
|
|
10
|
+
# on first `up`; subsequent `up` calls reuse the cached layer.
|
|
11
|
+
#
|
|
12
|
+
# Prereqs on the host BEFORE running this:
|
|
13
|
+
# 1. pnpm install in the project root (deps need to exist on host
|
|
14
|
+
# because they're mounted in)
|
|
15
|
+
# 2. .env in place — see .env.example
|
|
16
|
+
#
|
|
17
|
+
# Run:
|
|
18
|
+
# pnpm dev:docker # wraps `HOST_UID=... HOST_GID=... docker compose up`
|
|
19
|
+
#
|
|
20
|
+
# Native-pnpm-dev alternative (faster HMR, no container overhead):
|
|
21
|
+
# pnpm dev:hybrid
|
|
22
|
+
#
|
|
23
|
+
# As you add apps to apps/, copy a service block and bump the port.
|
|
24
|
+
|
|
25
|
+
x-node-defaults: &node-defaults
|
|
26
|
+
build:
|
|
27
|
+
context: ./
|
|
28
|
+
dockerfile: docker/dev.Dockerfile
|
|
29
|
+
image: {{projectName}}-dev:latest
|
|
30
|
+
user: "${HOST_UID:-1000}:${HOST_GID:-1000}"
|
|
31
|
+
volumes:
|
|
32
|
+
- ./:/workspace:cached
|
|
33
|
+
depends_on:
|
|
34
|
+
mariadb:
|
|
35
|
+
condition: service_healthy
|
|
36
|
+
|
|
37
|
+
services:
|
|
38
|
+
mariadb:
|
|
39
|
+
image: mariadb:11
|
|
40
|
+
container_name: {{projectName}}-mariadb
|
|
41
|
+
restart: unless-stopped
|
|
42
|
+
environment:
|
|
43
|
+
MARIADB_ROOT_PASSWORD: root
|
|
44
|
+
MARIADB_DATABASE: {{projectNameSnake}}
|
|
45
|
+
MARIADB_USER: app
|
|
46
|
+
MARIADB_PASSWORD: app
|
|
47
|
+
ports:
|
|
48
|
+
- "3307:3306"
|
|
49
|
+
command:
|
|
50
|
+
- "--log-bin=mysql-bin"
|
|
51
|
+
- "--binlog-format=ROW"
|
|
52
|
+
- "--binlog-row-image=FULL"
|
|
53
|
+
- "--server-id=1"
|
|
54
|
+
- "--binlog-expire-logs-seconds=86400"
|
|
55
|
+
volumes:
|
|
56
|
+
- {{projectName}}-mariadbdata:/var/lib/mysql
|
|
57
|
+
- ./docker/mariadb-init.sql:/docker-entrypoint-initdb.d/10-replication.sql:ro
|
|
58
|
+
healthcheck:
|
|
59
|
+
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
|
60
|
+
interval: 2s
|
|
61
|
+
timeout: 2s
|
|
62
|
+
retries: 15
|
|
63
|
+
|
|
64
|
+
minio:
|
|
65
|
+
image: minio/minio
|
|
66
|
+
container_name: {{projectName}}-minio
|
|
67
|
+
restart: unless-stopped
|
|
68
|
+
environment:
|
|
69
|
+
MINIO_ROOT_USER: minioadmin
|
|
70
|
+
MINIO_ROOT_PASSWORD: minioadmin
|
|
71
|
+
ports:
|
|
72
|
+
- "9000:9000"
|
|
73
|
+
- "9001:9001"
|
|
74
|
+
command: server /data --console-address ":9001"
|
|
75
|
+
volumes:
|
|
76
|
+
- {{projectName}}-miniodata:/data
|
|
77
|
+
healthcheck:
|
|
78
|
+
test: ["CMD", "mc", "ready", "local"]
|
|
79
|
+
interval: 3s
|
|
80
|
+
timeout: 2s
|
|
81
|
+
retries: 15
|
|
82
|
+
|
|
83
|
+
api:
|
|
84
|
+
<<: *node-defaults
|
|
85
|
+
container_name: {{projectName}}-api-dev
|
|
86
|
+
working_dir: /workspace/apps/{{projectName}}/api
|
|
87
|
+
command: pnpm voltro dev .
|
|
88
|
+
environment:
|
|
89
|
+
NODE_ENV: development
|
|
90
|
+
HOME: /tmp
|
|
91
|
+
DB_DIALECT: mariadb
|
|
92
|
+
DB_URL: mysql://app:app@mariadb:3306/{{projectNameSnake}}
|
|
93
|
+
CDC: "1"
|
|
94
|
+
STORAGE_PROVIDER: minio
|
|
95
|
+
S3_ENDPOINT: http://minio:9000
|
|
96
|
+
S3_BUCKET: {{projectNameSnake}}
|
|
97
|
+
S3_ACCESS_KEY_ID: minioadmin
|
|
98
|
+
S3_SECRET_ACCESS_KEY: minioadmin
|
|
99
|
+
S3_FORCE_PATH_STYLE: "1"
|
|
100
|
+
VOLTRO_SESSION_SECRET: ${VOLTRO_SESSION_SECRET:-dev-only-secret-please-rotate-in-prod}
|
|
101
|
+
ports:
|
|
102
|
+
- "4000:4000"
|
|
103
|
+
|
|
104
|
+
web:
|
|
105
|
+
<<: *node-defaults
|
|
106
|
+
container_name: {{projectName}}-web-dev
|
|
107
|
+
working_dir: /workspace/apps/{{projectName}}/web
|
|
108
|
+
command: pnpm voltro dev .
|
|
109
|
+
environment:
|
|
110
|
+
NODE_ENV: development
|
|
111
|
+
HOME: /tmp
|
|
112
|
+
ports:
|
|
113
|
+
- "5173:5173"
|
|
114
|
+
|
|
115
|
+
volumes:
|
|
116
|
+
{{projectName}}-mariadbdata:
|
|
117
|
+
{{projectName}}-miniodata:
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# {{projectName}} full-stack PROD docker compose.
|
|
2
|
+
#
|
|
3
|
+
# Builds locked images per app via docker/{api,web}.Dockerfile and
|
|
4
|
+
# runs them behind Postgres. No source volumes — each app's code is
|
|
5
|
+
# baked in at image-build time. Use this to smoke-test prod config
|
|
6
|
+
# locally before deploying.
|
|
7
|
+
#
|
|
8
|
+
# This is NOT the production deploy target itself — that's helm or
|
|
9
|
+
# your cloud provider's container runtime. This file gives parity
|
|
10
|
+
# checking on localhost.
|
|
11
|
+
#
|
|
12
|
+
# Run:
|
|
13
|
+
# pnpm prod:build # build all images (slow, ~5 min)
|
|
14
|
+
# pnpm prod:up # boot the stack
|
|
15
|
+
# pnpm prod:down # tear down
|
|
16
|
+
#
|
|
17
|
+
# Different DB user from dev so accidental `pnpm db:reset` against
|
|
18
|
+
# the dev compose doesn't wipe a prod-shape dataset you wanted to
|
|
19
|
+
# poke at.
|
|
20
|
+
|
|
21
|
+
services:
|
|
22
|
+
mariadb:
|
|
23
|
+
image: mariadb:11
|
|
24
|
+
container_name: {{projectName}}-mariadb-prod
|
|
25
|
+
restart: unless-stopped
|
|
26
|
+
environment:
|
|
27
|
+
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-change-me-in-prod}
|
|
28
|
+
MARIADB_DATABASE: {{projectNameSnake}}
|
|
29
|
+
MARIADB_USER: app
|
|
30
|
+
MARIADB_PASSWORD: ${MARIADB_PASSWORD:-app}
|
|
31
|
+
ports:
|
|
32
|
+
- "3308:3306"
|
|
33
|
+
command:
|
|
34
|
+
- "--log-bin=mysql-bin"
|
|
35
|
+
- "--binlog-format=ROW"
|
|
36
|
+
- "--binlog-row-image=FULL"
|
|
37
|
+
- "--server-id=1"
|
|
38
|
+
- "--binlog-expire-logs-seconds=86400"
|
|
39
|
+
volumes:
|
|
40
|
+
- {{projectName}}-prod-mariadbdata:/var/lib/mysql
|
|
41
|
+
- ./docker/mariadb-init.sql:/docker-entrypoint-initdb.d/10-replication.sql:ro
|
|
42
|
+
healthcheck:
|
|
43
|
+
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
|
44
|
+
interval: 5s
|
|
45
|
+
timeout: 3s
|
|
46
|
+
retries: 20
|
|
47
|
+
|
|
48
|
+
minio:
|
|
49
|
+
image: minio/minio
|
|
50
|
+
container_name: {{projectName}}-minio-prod
|
|
51
|
+
restart: unless-stopped
|
|
52
|
+
environment:
|
|
53
|
+
MINIO_ROOT_USER: ${S3_ACCESS_KEY_ID:-minioadmin}
|
|
54
|
+
MINIO_ROOT_PASSWORD: ${S3_SECRET_ACCESS_KEY:-minioadmin}
|
|
55
|
+
command: server /data --console-address ":9001"
|
|
56
|
+
volumes:
|
|
57
|
+
- {{projectName}}-prod-miniodata:/data
|
|
58
|
+
healthcheck:
|
|
59
|
+
test: ["CMD", "mc", "ready", "local"]
|
|
60
|
+
interval: 5s
|
|
61
|
+
timeout: 3s
|
|
62
|
+
retries: 20
|
|
63
|
+
|
|
64
|
+
api:
|
|
65
|
+
build:
|
|
66
|
+
context: ./
|
|
67
|
+
dockerfile: docker/api.Dockerfile
|
|
68
|
+
target: prod
|
|
69
|
+
args:
|
|
70
|
+
APP_PATH: apps/{{projectName}}/api
|
|
71
|
+
image: {{projectName}}-api:latest
|
|
72
|
+
container_name: {{projectName}}-api
|
|
73
|
+
restart: unless-stopped
|
|
74
|
+
environment:
|
|
75
|
+
NODE_ENV: production
|
|
76
|
+
DB_DIALECT: mariadb
|
|
77
|
+
DB_URL: mysql://app:${MARIADB_PASSWORD:-app}@mariadb:3306/{{projectNameSnake}}
|
|
78
|
+
CDC: "1"
|
|
79
|
+
STORAGE_PROVIDER: minio
|
|
80
|
+
S3_ENDPOINT: http://minio:9000
|
|
81
|
+
S3_BUCKET: {{projectNameSnake}}
|
|
82
|
+
S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-minioadmin}
|
|
83
|
+
S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-minioadmin}
|
|
84
|
+
S3_FORCE_PATH_STYLE: "1"
|
|
85
|
+
VOLTRO_SESSION_SECRET: ${VOLTRO_SESSION_SECRET:?must be set for prod compose}
|
|
86
|
+
ports:
|
|
87
|
+
- "4000:4000"
|
|
88
|
+
depends_on:
|
|
89
|
+
mariadb:
|
|
90
|
+
condition: service_healthy
|
|
91
|
+
minio:
|
|
92
|
+
condition: service_healthy
|
|
93
|
+
|
|
94
|
+
web:
|
|
95
|
+
build:
|
|
96
|
+
context: ./
|
|
97
|
+
dockerfile: docker/web.Dockerfile
|
|
98
|
+
target: prod
|
|
99
|
+
args:
|
|
100
|
+
APP_PATH: apps/{{projectName}}/web
|
|
101
|
+
APP_PORT: "5173"
|
|
102
|
+
image: {{projectName}}-web:latest
|
|
103
|
+
container_name: {{projectName}}-web
|
|
104
|
+
restart: unless-stopped
|
|
105
|
+
environment:
|
|
106
|
+
NODE_ENV: production
|
|
107
|
+
ports:
|
|
108
|
+
- "5173:5173"
|
|
109
|
+
depends_on:
|
|
110
|
+
- api
|
|
111
|
+
|
|
112
|
+
volumes:
|
|
113
|
+
{{projectName}}-prod-mariadbdata:
|
|
114
|
+
{{projectName}}-prod-miniodata:
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# {{projectName}} infra docker compose — MariaDB (binlog CDC) + MinIO.
|
|
2
|
+
#
|
|
3
|
+
# Brought up by `pnpm db:up`. Apps run natively via `pnpm dev` against
|
|
4
|
+
# this. For full-docker dev use `pnpm dev:docker`.
|
|
5
|
+
#
|
|
6
|
+
# MariaDB on 3307 (NOT default 3306) so it never clashes with a host
|
|
7
|
+
# MySQL/MariaDB. The binlog flags are MANDATORY for Voltro's CDC reader:
|
|
8
|
+
# real-time subscriptions fan out across replicas by tailing the binary
|
|
9
|
+
# log (the binlog IS the message bus — no Redis/NATS).
|
|
10
|
+
|
|
11
|
+
services:
|
|
12
|
+
mariadb:
|
|
13
|
+
image: mariadb:11
|
|
14
|
+
container_name: {{projectName}}-mariadb
|
|
15
|
+
restart: unless-stopped
|
|
16
|
+
environment:
|
|
17
|
+
MARIADB_ROOT_PASSWORD: root
|
|
18
|
+
MARIADB_DATABASE: {{projectNameSnake}}
|
|
19
|
+
MARIADB_USER: app
|
|
20
|
+
MARIADB_PASSWORD: app
|
|
21
|
+
ports:
|
|
22
|
+
- "3307:3306"
|
|
23
|
+
command:
|
|
24
|
+
# CDC requirements — ROW format + FULL row image so the reader sees
|
|
25
|
+
# complete before/after images; a server_id (unique per replica in
|
|
26
|
+
# prod — see the Helm baseline); generous binlog retention.
|
|
27
|
+
- "--log-bin=mysql-bin"
|
|
28
|
+
- "--binlog-format=ROW"
|
|
29
|
+
- "--binlog-row-image=FULL"
|
|
30
|
+
- "--server-id=1"
|
|
31
|
+
- "--binlog-expire-logs-seconds=86400"
|
|
32
|
+
volumes:
|
|
33
|
+
- {{projectName}}-mariadbdata:/var/lib/mysql
|
|
34
|
+
# Grants the app user REPLICATION SLAVE/CLIENT (the binlog reader needs it).
|
|
35
|
+
- ./docker/mariadb-init.sql:/docker-entrypoint-initdb.d/10-replication.sql:ro
|
|
36
|
+
healthcheck:
|
|
37
|
+
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
|
38
|
+
interval: 2s
|
|
39
|
+
timeout: 2s
|
|
40
|
+
retries: 15
|
|
41
|
+
|
|
42
|
+
# Object storage for the file-storage primitive (@voltro/plugin-storage).
|
|
43
|
+
minio:
|
|
44
|
+
image: minio/minio
|
|
45
|
+
container_name: {{projectName}}-minio
|
|
46
|
+
restart: unless-stopped
|
|
47
|
+
environment:
|
|
48
|
+
MINIO_ROOT_USER: minioadmin
|
|
49
|
+
MINIO_ROOT_PASSWORD: minioadmin
|
|
50
|
+
ports:
|
|
51
|
+
- "9000:9000" # S3 API
|
|
52
|
+
- "9001:9001" # console
|
|
53
|
+
command: server /data --console-address ":9001"
|
|
54
|
+
volumes:
|
|
55
|
+
- {{projectName}}-miniodata:/data
|
|
56
|
+
healthcheck:
|
|
57
|
+
test: ["CMD", "mc", "ready", "local"]
|
|
58
|
+
interval: 3s
|
|
59
|
+
timeout: 2s
|
|
60
|
+
retries: 15
|
|
61
|
+
|
|
62
|
+
# One-shot: create the app bucket + make it publicly readable (avatars
|
|
63
|
+
# are served via the public /_voltro/storage/:id route).
|
|
64
|
+
createbuckets:
|
|
65
|
+
image: minio/mc
|
|
66
|
+
depends_on:
|
|
67
|
+
minio:
|
|
68
|
+
condition: service_healthy
|
|
69
|
+
entrypoint: >
|
|
70
|
+
/bin/sh -c "
|
|
71
|
+
mc alias set local http://minio:9000 minioadmin minioadmin &&
|
|
72
|
+
mc mb -p local/{{projectNameSnake}} &&
|
|
73
|
+
mc anonymous set download local/{{projectNameSnake}};
|
|
74
|
+
exit 0;
|
|
75
|
+
"
|
|
76
|
+
|
|
77
|
+
volumes:
|
|
78
|
+
{{projectName}}-mariadbdata:
|
|
79
|
+
{{projectName}}-miniodata:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Voltro local env — helm baseline.
|
|
2
|
+
#
|
|
3
|
+
# Helm is your DEPLOY target, not your dev loop. This .env governs
|
|
4
|
+
# local dev (run via `pnpm dev` against a local Postgres).
|
|
5
|
+
#
|
|
6
|
+
# In-cluster env values come from the Helm chart's ConfigMap +
|
|
7
|
+
# Secret, NOT from this file. See charts/voltro-app/templates/.
|
|
8
|
+
|
|
9
|
+
# Local Postgres (your install — or a docker run sidecar — or any
|
|
10
|
+
# managed instance you can reach from your laptop).
|
|
11
|
+
DB_URL=postgres://app:app@localhost:5432/{{projectName}}
|
|
12
|
+
|
|
13
|
+
# Local session signing secret. The chart's Secret is the source of
|
|
14
|
+
# truth in the cluster.
|
|
15
|
+
VOLTRO_SESSION_SECRET=dev-only-secret-please-rotate-in-prod
|
|
16
|
+
|
|
17
|
+
# ─── Optional backends — ALL OFF by default; uncomment to activate ───────────
|
|
18
|
+
# The cache and the durable KV each run on a zero-infra default (in-process
|
|
19
|
+
# memory / your SQL store). Point either at a RESP server (Redis / Valkey /
|
|
20
|
+
# KeyDB / Dragonfly / Upstash) ONLY when you want cross-instance sharing.
|
|
21
|
+
# In-cluster these come from the chart's ConfigMap/Secret; this file governs
|
|
22
|
+
# local dev. Enablement is per concern — a bare REDIS_URL is NOT a master
|
|
23
|
+
# switch; each reads its own <NAME>_REDIS_URL first, then a shared REDIS_URL.
|
|
24
|
+
|
|
25
|
+
# @voltro/cache → Redis: a distributed query/result cache. `voltro add redis`
|
|
26
|
+
# wires this for you (flips app.config `cache: 'redis'` + adds the infra).
|
|
27
|
+
# CACHE_BACKEND=redis
|
|
28
|
+
# CACHE_REDIS_URL=redis://localhost:6379
|
|
29
|
+
|
|
30
|
+
# @voltro/kv → Redis: durable `ctx.kv`. Default backend is `database`
|
|
31
|
+
# (durable, shared across replicas, survives restarts) — leave it unless you
|
|
32
|
+
# specifically want KV on Redis. If you do, use a PERSISTENT redis (AOF/RDB),
|
|
33
|
+
# NOT an ephemeral cache-only one: an eviction/restart is data loss for
|
|
34
|
+
# durable KV. See docs → Caching → Key-value backends.
|
|
35
|
+
# KV_BACKEND=redis
|
|
36
|
+
# KV_REDIS_URL=redis://localhost:6379
|
|
37
|
+
|
|
38
|
+
# One server for everything, instead of the per-concern URLs above:
|
|
39
|
+
# REDIS_URL=redis://localhost:6379
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Helm baseline
|
|
2
|
+
|
|
3
|
+
Kubernetes-first deploy via a Helm chart at `charts/voltro-app/`.
|
|
4
|
+
Per-env overlay values for dev / staging / prod. Local dev still uses
|
|
5
|
+
native pnpm or docker-compose — Helm is for deploy, not the dev loop.
|
|
6
|
+
|
|
7
|
+
## Layout
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
.
|
|
11
|
+
├── charts/
|
|
12
|
+
│ └── voltro-app/
|
|
13
|
+
│ ├── Chart.yaml
|
|
14
|
+
│ ├── values.yaml # defaults
|
|
15
|
+
│ ├── values-dev.yaml # dev cluster overrides
|
|
16
|
+
│ ├── values-staging.yaml # staging overrides
|
|
17
|
+
│ ├── values-prod.yaml # prod overrides
|
|
18
|
+
│ ├── .helmignore
|
|
19
|
+
│ └── templates/
|
|
20
|
+
│ ├── _helpers.tpl
|
|
21
|
+
│ ├── deployment-api.yaml
|
|
22
|
+
│ ├── deployment-web.yaml
|
|
23
|
+
│ ├── service-api.yaml
|
|
24
|
+
│ ├── service-web.yaml
|
|
25
|
+
│ ├── ingress.yaml
|
|
26
|
+
│ ├── configmap.yaml
|
|
27
|
+
│ ├── secret.yaml
|
|
28
|
+
│ ├── postgres-statefulset.yaml
|
|
29
|
+
│ └── postgres-service.yaml
|
|
30
|
+
└── deploy/README.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Common flows
|
|
34
|
+
|
|
35
|
+
### Local dev
|
|
36
|
+
|
|
37
|
+
You don't run Helm for local dev. Either:
|
|
38
|
+
- `pnpm dev` (native, fastest) + your own local Postgres, OR
|
|
39
|
+
- Add the **compose** baseline back temporarily for full-docker dev:
|
|
40
|
+
`voltro baseline set compose` (you can then add helm back; baselines
|
|
41
|
+
aren't mutually exclusive at the file level, only one is "active"
|
|
42
|
+
for tracking purposes).
|
|
43
|
+
|
|
44
|
+
### Cluster dev (kind / minikube / k3d)
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
kind create cluster --name {{projectName}}-dev
|
|
48
|
+
pnpm helm:lint
|
|
49
|
+
pnpm helm:install:dev
|
|
50
|
+
kubectl -n {{projectName}}-dev get pods
|
|
51
|
+
kubectl -n {{projectName}}-dev port-forward svc/{{projectName}}-web 5173:5173
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Staging / prod deploy
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
# Set kubeconfig to your prod cluster first
|
|
58
|
+
pnpm helm:install:prod
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
GitOps-style (recommended): commit the chart + values, let ArgoCD or
|
|
62
|
+
Flux watch the repo and sync changes. The `pnpm helm:install:*` scripts
|
|
63
|
+
are CLI escape hatches, not the primary deploy path.
|
|
64
|
+
|
|
65
|
+
## Secrets
|
|
66
|
+
|
|
67
|
+
`templates/secret.yaml` ships an EXAMPLE secret with `change-me`
|
|
68
|
+
placeholders. **Never commit real secrets**. Production options:
|
|
69
|
+
|
|
70
|
+
- **Sealed Secrets** (Bitnami) — encrypted-in-git
|
|
71
|
+
- **External Secrets Operator** — pulls from AWS Secrets Manager / Vault
|
|
72
|
+
- **SOPS** + helm-secrets plugin — encrypted YAML
|
|
73
|
+
|
|
74
|
+
Pick one for your cluster + replace the placeholder secret accordingly.
|
|
75
|
+
|
|
76
|
+
## Postgres in the chart vs external
|
|
77
|
+
|
|
78
|
+
`values.yaml` defaults to `postgres.embedded: true` which provisions a
|
|
79
|
+
single-replica StatefulSet inside the cluster. Fine for dev, **not fine
|
|
80
|
+
for prod** — you want a managed Postgres (RDS / Cloud SQL / Crunchy
|
|
81
|
+
Operator). Switch by setting:
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
# values-prod.yaml
|
|
85
|
+
postgres:
|
|
86
|
+
embedded: false
|
|
87
|
+
externalUrl: postgres://... # from a Secret, not literal
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Switching baselines
|
|
91
|
+
|
|
92
|
+
`voltro baseline set compose` → restores docker-compose, keeps the
|
|
93
|
+
Helm chart on disk (you may want both: compose for local, helm for
|
|
94
|
+
deploy). `voltro baseline set bare` → strips everything containerized.
|
|
95
|
+
|
|
96
|
+
The "active" baseline is tracked in `.voltro/baseline.json` — it
|
|
97
|
+
controls what `voltro baseline status` reports and what `voltro
|
|
98
|
+
baseline sync` (future) regenerates.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "helm",
|
|
3
|
+
"displayName": "Helm Chart",
|
|
4
|
+
"summary": "Kubernetes-first deploy via Helm chart. Per-env overlays (dev/staging/prod). Postgres (embedded StatefulSet) OR MariaDB (external, binlog CDC) via a db.dialect switch. Per-pod POD_NAME/POD_IP downward-API for CDC server_id + workflow-runner host; 4-replica prod; S3/MinIO storage.",
|
|
5
|
+
"tags": ["kubernetes", "helm", "k8s", "prod", "mariadb", "cdc", "storage"],
|
|
6
|
+
"recommendedFor": "k8s shops; GitOps setups (ArgoCD / Flux); multi-cluster prod deploys.",
|
|
7
|
+
"tradeoffs": {
|
|
8
|
+
"pros": [
|
|
9
|
+
"Standard k8s manifests — fits any CNCF cluster",
|
|
10
|
+
"Per-env overlays via values-{dev,staging,prod}.yaml",
|
|
11
|
+
"GitOps-friendly: tools like ArgoCD watch the chart and sync",
|
|
12
|
+
"Horizontal autoscaling, rolling updates, health probes built in"
|
|
13
|
+
],
|
|
14
|
+
"cons": [
|
|
15
|
+
"Requires a running k8s cluster to test (kind/minikube/k3d for local)",
|
|
16
|
+
"Helm + k8s YAML is more verbose than docker-compose",
|
|
17
|
+
"Local dev STILL uses native pnpm / docker-compose — Helm is a deploy target, not a dev loop",
|
|
18
|
+
"Operator must know k8s (ingress, cert-manager, secrets management)"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
".env.example",
|
|
23
|
+
"charts/voltro-app/Chart.yaml",
|
|
24
|
+
"charts/voltro-app/values.yaml",
|
|
25
|
+
"charts/voltro-app/values-dev.yaml",
|
|
26
|
+
"charts/voltro-app/values-staging.yaml",
|
|
27
|
+
"charts/voltro-app/values-prod.yaml",
|
|
28
|
+
"charts/voltro-app/.helmignore",
|
|
29
|
+
"charts/voltro-app/templates/_helpers.tpl",
|
|
30
|
+
"charts/voltro-app/templates/deployment-api.yaml",
|
|
31
|
+
"charts/voltro-app/templates/deployment-web.yaml",
|
|
32
|
+
"charts/voltro-app/templates/service-api.yaml",
|
|
33
|
+
"charts/voltro-app/templates/service-web.yaml",
|
|
34
|
+
"charts/voltro-app/templates/ingress.yaml",
|
|
35
|
+
"charts/voltro-app/templates/configmap.yaml",
|
|
36
|
+
"charts/voltro-app/templates/secret.yaml",
|
|
37
|
+
"charts/voltro-app/templates/postgres-statefulset.yaml",
|
|
38
|
+
"charts/voltro-app/templates/postgres-service.yaml",
|
|
39
|
+
"deploy/README.md"
|
|
40
|
+
],
|
|
41
|
+
"packageJsonScripts": {
|
|
42
|
+
"dev": "turbo run dev",
|
|
43
|
+
"build": "turbo run build",
|
|
44
|
+
"test": "turbo run test",
|
|
45
|
+
"typecheck": "turbo run typecheck",
|
|
46
|
+
"helm:lint": "helm lint charts/voltro-app",
|
|
47
|
+
"helm:template:dev": "helm template {{projectName}}-dev charts/voltro-app -f charts/voltro-app/values-dev.yaml",
|
|
48
|
+
"helm:install:dev": "helm upgrade --install {{projectName}}-dev charts/voltro-app -f charts/voltro-app/values-dev.yaml --namespace {{projectName}}-dev --create-namespace",
|
|
49
|
+
"helm:install:staging":"helm upgrade --install {{projectName}}-staging charts/voltro-app -f charts/voltro-app/values-staging.yaml --namespace {{projectName}}-staging --create-namespace",
|
|
50
|
+
"helm:install:prod": "helm upgrade --install {{projectName}}-prod charts/voltro-app -f charts/voltro-app/values-prod.yaml --namespace {{projectName}}-prod --create-namespace",
|
|
51
|
+
"helm:uninstall:dev": "helm uninstall {{projectName}}-dev --namespace {{projectName}}-dev"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
apiVersion: v2
|
|
2
|
+
name: {{projectName}}
|
|
3
|
+
description: Helm chart for {{projectName}} — a Voltro framework project.
|
|
4
|
+
type: application
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
appVersion: "0.0.0"
|
|
7
|
+
|
|
8
|
+
# Maintainers — replace with your team contact.
|
|
9
|
+
maintainers:
|
|
10
|
+
- name: {{projectName}} team
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{{/*
|
|
2
|
+
Helm chart helpers for the {{projectName}} chart.
|
|
3
|
+
|
|
4
|
+
Helm uses {{ ... }} syntax; the Voltro scaffolder only substitutes a
|
|
5
|
+
whitelisted set of tokens ({{projectName}} etc.) so other {{ ... }}
|
|
6
|
+
fragments pass through untouched into the installed chart.
|
|
7
|
+
*/}}
|
|
8
|
+
|
|
9
|
+
{{- define "voltro-app.name" -}}
|
|
10
|
+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
|
11
|
+
{{- end -}}
|
|
12
|
+
|
|
13
|
+
{{- define "voltro-app.fullname" -}}
|
|
14
|
+
{{- if .Values.fullnameOverride -}}
|
|
15
|
+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
|
16
|
+
{{- else -}}
|
|
17
|
+
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
|
18
|
+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
|
19
|
+
{{- end -}}
|
|
20
|
+
{{- end -}}
|
|
21
|
+
|
|
22
|
+
{{- define "voltro-app.labels" -}}
|
|
23
|
+
app.kubernetes.io/name: {{ include "voltro-app.name" . }}
|
|
24
|
+
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
25
|
+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
26
|
+
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
27
|
+
helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version }}
|
|
28
|
+
{{- end -}}
|
|
29
|
+
|
|
30
|
+
{{- define "voltro-app.serviceAccountName" -}}
|
|
31
|
+
{{- if .Values.serviceAccount.create -}}
|
|
32
|
+
{{- default (include "voltro-app.fullname" .) .Values.serviceAccount.name -}}
|
|
33
|
+
{{- else -}}
|
|
34
|
+
{{- default "default" .Values.serviceAccount.name -}}
|
|
35
|
+
{{- end -}}
|
|
36
|
+
{{- end -}}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{{- if .Values.api.enabled -}}
|
|
2
|
+
apiVersion: v1
|
|
3
|
+
kind: ConfigMap
|
|
4
|
+
metadata:
|
|
5
|
+
name: {{ include "voltro-app.fullname" . }}-config
|
|
6
|
+
labels:
|
|
7
|
+
{{- include "voltro-app.labels" . | nindent 4 }}
|
|
8
|
+
data:
|
|
9
|
+
NODE_ENV: production
|
|
10
|
+
{{- range $key, $value := .Values.api.env }}
|
|
11
|
+
{{ $key }}: {{ $value | quote }}
|
|
12
|
+
{{- end }}
|
|
13
|
+
{{- end }}
|