@flisk-sh/flisk 0.0.0-stage → 1.3.189
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 +492 -0
- package/LICENSE +21 -0
- package/README.md +479 -2
- package/Tiltfile +151 -0
- package/cli/bin/flisk.js +42 -0
- package/cli/dist/agent-runtimes/custom.js +335 -0
- package/cli/dist/agent-runtimes/registry.js +34 -0
- package/cli/dist/backend-frameworks/elysia.js +38 -0
- package/cli/dist/backend-frameworks/express.js +49 -0
- package/cli/dist/backend-frameworks/fastify.js +43 -0
- package/cli/dist/backend-frameworks/h3.js +37 -0
- package/cli/dist/backend-frameworks/koa.js +47 -0
- package/cli/dist/backend-frameworks/mcp.js +86 -0
- package/cli/dist/backend-frameworks/nestjs.js +55 -0
- package/cli/dist/backend-frameworks/registry.js +134 -0
- package/cli/dist/backend-frameworks/types.js +1 -0
- package/cli/dist/backend-languages/bun.js +76 -0
- package/cli/dist/backend-languages/go.js +125 -0
- package/cli/dist/backend-languages/node.js +122 -0
- package/cli/dist/backend-languages/python.js +94 -0
- package/cli/dist/backend-languages/registry.js +37 -0
- package/cli/dist/backend-languages/rust.js +82 -0
- package/cli/dist/backend-languages/types.js +1 -0
- package/cli/dist/cli.js +29 -0
- package/cli/dist/commands/__tests__/project-e2e-helpers.js +49 -0
- package/cli/dist/commands/__tests__/ui-loading-screen.test.js +16 -0
- package/cli/dist/commands/agent.js +182 -0
- package/cli/dist/commands/completion-candidates.js +116 -0
- package/cli/dist/commands/completion.js +843 -0
- package/cli/dist/commands/config.js +362 -0
- package/cli/dist/commands/doctor.js +1504 -0
- package/cli/dist/commands/down.js +114 -0
- package/cli/dist/commands/eject.js +108 -0
- package/cli/dist/commands/help.js +152 -0
- package/cli/dist/commands/import.js +164 -0
- package/cli/dist/commands/logs.js +119 -0
- package/cli/dist/commands/maintainers.js +102 -0
- package/cli/dist/commands/mcp.js +28 -0
- package/cli/dist/commands/networks.js +306 -0
- package/cli/dist/commands/project.js +447 -0
- package/cli/dist/commands/projects.js +103 -0
- package/cli/dist/commands/registry.js +53 -0
- package/cli/dist/commands/resource.js +992 -0
- package/cli/dist/commands/resources.js +127 -0
- package/cli/dist/commands/restart.js +89 -0
- package/cli/dist/commands/runtime.js +75 -0
- package/cli/dist/commands/stack.js +171 -0
- package/cli/dist/commands/stacks.js +71 -0
- package/cli/dist/commands/status.js +211 -0
- package/cli/dist/commands/ui.js +725 -0
- package/cli/dist/commands/up.js +609 -0
- package/cli/dist/commands/upgrade.js +840 -0
- package/cli/dist/commands/version.js +10 -0
- package/cli/dist/components/Accessible.js +11 -0
- package/cli/dist/components/BaseTooltip.js +30 -0
- package/cli/dist/components/DetailPanel.js +33 -0
- package/cli/dist/components/FileTree.js +51 -0
- package/cli/dist/components/ResourceSelectInput.js +42 -0
- package/cli/dist/components/ResourceTable.js +35 -0
- package/cli/dist/components/ServiceIssues.js +13 -0
- package/cli/dist/components/TUIHeader.js +27 -0
- package/cli/dist/components/TabBar.js +27 -0
- package/cli/dist/components/Tooltip.js +13 -0
- package/cli/dist/components/index.js +11 -0
- package/cli/dist/components/ui-theme.js +120 -0
- package/cli/dist/config/platform-standards.js +182 -0
- package/cli/dist/frontend-frameworks/lit.js +64 -0
- package/cli/dist/frontend-frameworks/preact.js +62 -0
- package/cli/dist/frontend-frameworks/qwik.js +61 -0
- package/cli/dist/frontend-frameworks/react.js +69 -0
- package/cli/dist/frontend-frameworks/registry.js +83 -0
- package/cli/dist/frontend-frameworks/solid.js +62 -0
- package/cli/dist/frontend-frameworks/svelte.js +67 -0
- package/cli/dist/frontend-frameworks/tanstack-router.js +101 -0
- package/cli/dist/frontend-frameworks/types.js +1 -0
- package/cli/dist/frontend-frameworks/vanilla.js +59 -0
- package/cli/dist/frontend-frameworks/vue.js +72 -0
- package/cli/dist/generator/__tests__/golden-helpers.js +43 -0
- package/cli/dist/generator/extension-fetch.js +291 -0
- package/cli/dist/generator/resource-templates.js +133 -0
- package/cli/dist/generator/template-engine.js +801 -0
- package/cli/dist/index.js +10 -0
- package/cli/dist/mcp/server.js +101 -0
- package/cli/dist/mcp/tools.js +351 -0
- package/cli/dist/program.js +37 -0
- package/cli/dist/types/index.js +38 -0
- package/cli/dist/utils/agent-host.js +36 -0
- package/cli/dist/utils/atomic-write.js +36 -0
- package/cli/dist/utils/bun-floor.js +9 -0
- package/cli/dist/utils/bun-requirement.js +10 -0
- package/cli/dist/utils/cache.js +63 -0
- package/cli/dist/utils/cold-preflight.js +257 -0
- package/cli/dist/utils/command-helpers.js +57 -0
- package/cli/dist/utils/constants.js +160 -0
- package/cli/dist/utils/discovery-context.js +71 -0
- package/cli/dist/utils/discovery-paths.js +93 -0
- package/cli/dist/utils/docker.js +34 -0
- package/cli/dist/utils/doctor-crashloop.js +161 -0
- package/cli/dist/utils/doctor-fix.js +391 -0
- package/cli/dist/utils/doctor-host.js +66 -0
- package/cli/dist/utils/doctor-report.js +78 -0
- package/cli/dist/utils/doctor-runtime.js +880 -0
- package/cli/dist/utils/doctor-starlark.js +132 -0
- package/cli/dist/utils/doctor-wiring.js +698 -0
- package/cli/dist/utils/down-cleanup.js +125 -0
- package/cli/dist/utils/env-validator.js +266 -0
- package/cli/dist/utils/errors.js +175 -0
- package/cli/dist/utils/exec-async.js +31 -0
- package/cli/dist/utils/file-helpers.js +104 -0
- package/cli/dist/utils/formatting.js +165 -0
- package/cli/dist/utils/generated-paths.js +51 -0
- package/cli/dist/utils/help-command.js +11 -0
- package/cli/dist/utils/host-port-config.js +140 -0
- package/cli/dist/utils/host-port-plan.js +100 -0
- package/cli/dist/utils/json-output.js +29 -0
- package/cli/dist/utils/machine-output.js +33 -0
- package/cli/dist/utils/paths.js +43 -0
- package/cli/dist/utils/platform.js +58 -0
- package/cli/dist/utils/port-assignment.js +75 -0
- package/cli/dist/utils/port-conflict-fix.js +25 -0
- package/cli/dist/utils/port-fallback-notice.js +17 -0
- package/cli/dist/utils/port-listener-probe.js +20 -0
- package/cli/dist/utils/project-config-defaults.js +17 -0
- package/cli/dist/utils/project-features.js +91 -0
- package/cli/dist/utils/project-templates.js +32 -0
- package/cli/dist/utils/prompt.js +97 -0
- package/cli/dist/utils/resource-features.js +184 -0
- package/cli/dist/utils/resource-kind.js +9 -0
- package/cli/dist/utils/schema-version-gate.js +45 -0
- package/cli/dist/utils/search-status.js +12 -0
- package/cli/dist/utils/secret-redaction.js +73 -0
- package/cli/dist/utils/service-config-checks.js +189 -0
- package/cli/dist/utils/service-manifest.js +254 -0
- package/cli/dist/utils/service-runtime-state.js +66 -0
- package/cli/dist/utils/service-urls.js +112 -0
- package/cli/dist/utils/services.js +360 -0
- package/cli/dist/utils/shared-infra.js +45 -0
- package/cli/dist/utils/shared-platform-postgres.js +232 -0
- package/cli/dist/utils/single-flight.js +21 -0
- package/cli/dist/utils/smoke.js +401 -0
- package/cli/dist/utils/spinner.js +40 -0
- package/cli/dist/utils/stack-features.js +15 -0
- package/cli/dist/utils/stack-status.js +14 -0
- package/cli/dist/utils/startup-report.js +78 -0
- package/cli/dist/utils/status-message.js +21 -0
- package/cli/dist/utils/status-ports.js +33 -0
- package/cli/dist/utils/suggestions.js +63 -0
- package/cli/dist/utils/tar.js +46 -0
- package/cli/dist/utils/tdk-version.js +51 -0
- package/cli/dist/utils/terminal-layout.js +19 -0
- package/cli/dist/utils/tilt-events.js +194 -0
- package/cli/dist/utils/tilt-logs.js +61 -0
- package/cli/dist/utils/tilt-port-owner.js +63 -0
- package/cli/dist/utils/tilt-process.js +54 -0
- package/cli/dist/utils/tilt-resource-state.js +32 -0
- package/cli/dist/utils/tilt-startup.js +49 -0
- package/cli/dist/utils/tilt-unreachable-message.js +9 -0
- package/cli/dist/utils/tilt.js +104 -0
- package/cli/dist/utils/ui-keymap.js +129 -0
- package/cli/dist/utils/ui-service-state.js +34 -0
- package/cli/dist/utils/up-only.js +28 -0
- package/cli/dist/utils/up-readiness.js +118 -0
- package/cli/dist/utils/url-actions.js +103 -0
- package/cli/dist/utils/validation.js +62 -0
- package/cli/dist/utils/which.js +56 -0
- package/cli/dist/utils/windows-doctor.js +176 -0
- package/cli/dist-bundle/chunk-6EA4DGCY.js +2 -0
- package/cli/dist-bundle/chunk-BZ4H7MM4.js +3 -0
- package/cli/dist-bundle/chunk-QWYXYAX6.js +510 -0
- package/cli/dist-bundle/cli.js +2017 -0
- package/cli/dist-bundle/cold-preflight-MM46GFQA.js +2 -0
- package/cli/dist-bundle/devtools-ZUHXW33W.js +5 -0
- package/cli/dist-bundle/extension-fetch-J4FFH7TJ.js +2 -0
- package/cli/package.json +83 -0
- package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
- package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
- package/cli/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
- package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
- package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
- package/cli/templates/.tiltignore.hbs +72 -0
- package/cli/templates/TILT_RESOURCE_DEFAULTS.star.hbs +220 -0
- package/cli/templates/TILT_TECH_STACK.star.hbs +149 -0
- package/cli/templates/Tiltfile.hbs +381 -0
- package/cli/templates/spec.master.hbs +192 -0
- package/discovery/AGENTS.md +362 -0
- package/discovery/TILT_DISCOVERY.star +429 -0
- package/discovery/Tiltfile +58 -0
- package/discovery/config.star +265 -0
- package/discovery/constants.star +167 -0
- package/discovery/deterministic.star +213 -0
- package/discovery/discovery_daemon.star +193 -0
- package/discovery/discovery_orchestrator.star +492 -0
- package/discovery/filtering.star +7 -0
- package/discovery/identity-management-backend/service.yaml +26 -0
- package/discovery/identity-management-frontend/service.yaml +29 -0
- package/discovery/identity-sdk/service.yaml +9 -0
- package/discovery/incremental_discovery.star +215 -0
- package/discovery/indexing.star +9 -0
- package/discovery/json_manifest_scanner.star +57 -0
- package/discovery/libraries.star +48 -0
- package/discovery/loading.star +25 -0
- package/discovery/manifest/constants.star +106 -0
- package/discovery/manifest/loading.star +418 -0
- package/discovery/manifest/normalize.star +289 -0
- package/discovery/manifest/validation.star +110 -0
- package/discovery/normalization.star +13 -0
- package/discovery/registry.star +562 -0
- package/discovery/resource_snapshot.py +384 -0
- package/discovery/resource_snapshot.star +145 -0
- package/discovery/schemas.star +3 -0
- package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
- package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
- package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
- package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
- package/discovery/test_resource_snapshot.py +253 -0
- package/discovery/validation.star +80 -0
- package/discovery/versioning.star +3 -0
- package/engine/AGENTS.md +706 -0
- package/engine/README.md +31 -0
- package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
- package/engine/Tiltfile +86 -0
- package/engine/assets/docker/golden-layers.Dockerfile +204 -0
- package/engine/assets/docker/wake-gateway/Dockerfile +28 -0
- package/engine/assets/docker/wake-gateway/decide.test.ts +177 -0
- package/engine/assets/docker/wake-gateway/decide.ts +135 -0
- package/engine/assets/docker/wake-gateway/server.ts +363 -0
- package/engine/assets/scripts/cleanup-completed-migrator-images.sh +39 -0
- package/engine/assets/scripts/cleanup-tilt-images.sh +122 -0
- package/engine/assets/scripts/mac-m1-resource-monitor.sh +123 -0
- package/engine/config.star +5 -0
- package/engine/entrypoint.star +101 -0
- package/engine/lifecycle/orchestrator.star +263 -0
- package/engine/paths.star +719 -0
- package/engine/schemas/project-schema.json +147 -0
- package/engine/schemas/service-schema.json +537 -0
- package/engine/scripts/README.md +89 -0
- package/engine/scripts/build-and-publish-lib.sh +207 -0
- package/engine/scripts/check-lib-publish.sh +87 -0
- package/engine/scripts/debug-container.sh +265 -0
- package/engine/scripts/generate-manifest.sh +200 -0
- package/engine/spec.master +702 -0
- package/engine/spec.master.example +341 -0
- package/engine/topologies/README.md +33 -0
- package/engine/topologies/platform/docker/AGENTS.md +59 -0
- package/engine/topologies/platform/docker/auth/auth.star +207 -0
- package/engine/topologies/platform/docker/build/frontend_build_plan.star +65 -0
- package/engine/topologies/platform/docker/build/golden_image.star +37 -0
- package/engine/topologies/platform/docker/build/golden_image_build.star +144 -0
- package/engine/topologies/platform/docker/build/golden_image_constants.star +100 -0
- package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +263 -0
- package/engine/topologies/platform/docker/compose/compose.star +637 -0
- package/engine/topologies/platform/docker/compose/compose_helpers.star +54 -0
- package/engine/topologies/platform/docker/compose/traefik_standalone.star +171 -0
- package/engine/topologies/platform/docker/config/bunignore.star +144 -0
- package/engine/topologies/platform/docker/config/dockerignore.star +152 -0
- package/engine/topologies/platform/docker/config/healthcheck.star +58 -0
- package/engine/topologies/platform/docker/constants.star +211 -0
- package/engine/topologies/platform/docker/dockerfile/dockerfile.star +56 -0
- package/engine/topologies/platform/docker/dockerfile/language_dockerfile.star +264 -0
- package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +76 -0
- package/engine/topologies/platform/docker/index.star +40 -0
- package/engine/topologies/platform/docker/layers/bun_helpers.star +25 -0
- package/engine/topologies/platform/docker/layers/infisical/index.star +42 -0
- package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +264 -0
- package/engine/topologies/platform/docker/layers/l1_base_layers.star +89 -0
- package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +147 -0
- package/engine/topologies/platform/docker/layers/l3_builder_layers.star +229 -0
- package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +282 -0
- package/engine/topologies/platform/docker/layers/prisma/constants.star +138 -0
- package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +98 -0
- package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +131 -0
- package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +100 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +128 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +205 -0
- package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +121 -0
- package/engine/topologies/platform/docker/networking/api_path_constants.star +206 -0
- package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +31 -0
- package/engine/topologies/platform/docker/networking/traefik.star +266 -0
- package/engine/topologies/platform/docker/networking/traefik_constants.star +148 -0
- package/engine/topologies/platform/docker/networking/traefik_helpers.star +162 -0
- package/engine/topologies/platform/docker/networking/traefik_static_routes.star +165 -0
- package/engine/topologies/platform/docker/secrets/env_secrets.star +74 -0
- package/engine/topologies/platform/docker/secrets/infisical.star +109 -0
- package/engine/topologies/platform/net/AGENTS.md +64 -0
- package/engine/topologies/platform/net/proxy.star +6 -0
- package/engine/topologies/platform/registries/local.star +6 -0
- package/engine/topologies/platform/registries/verdaccio_loader.star +20 -0
- package/engine/topologies/platform/security/AGENTS.md +49 -0
- package/engine/topologies/platform/security/secrets.star +241 -0
- package/engine/topologies/platform/state/AGENTS.md +64 -0
- package/engine/topologies/platform/state/relational.star +6 -0
- package/engine/topologies/tilt/common/AGENTS.md +59 -0
- package/engine/topologies/tilt/common/utils.star +409 -0
- package/engine/topologies/tilt/common/utils_debug.star +71 -0
- package/engine/topologies/tilt/common/utils_deterministic.star +170 -0
- package/engine/topologies/tilt/common/utils_docker_networks.star +54 -0
- package/engine/topologies/tilt/common/utils_env.star +92 -0
- package/engine/topologies/tilt/common/utils_output.star +99 -0
- package/engine/topologies/tilt/config/AGENTS.md +68 -0
- package/engine/topologies/tilt/config/defaults.star +5 -0
- package/engine/topologies/tilt/config/feature_flags.star +12 -0
- package/engine/topologies/tilt/config/global.star +57 -0
- package/engine/topologies/tilt/config/profiles.star +398 -0
- package/engine/topologies/tilt/generators/agents_md.star +64 -0
- package/engine/topologies/tilt/generators/api_gateway.star +147 -0
- package/engine/topologies/tilt/generators/index.star +126 -0
- package/engine/topologies/tilt/generators/infisical/README.md +424 -0
- package/engine/topologies/tilt/generators/infisical/examples.star +314 -0
- package/engine/topologies/tilt/generators/infisical/index.star +59 -0
- package/engine/topologies/tilt/generators/infisical/machine_identity.star +422 -0
- package/engine/topologies/tilt/generators/infisical/organization.star +536 -0
- package/engine/topologies/tilt/generators/infisical/path_manager.star +478 -0
- package/engine/topologies/tilt/generators/infisical/secrets_generator.star +422 -0
- package/engine/topologies/tilt/generators/nginx_conf.star +145 -0
- package/engine/topologies/tilt/generators/npmrc.star +132 -0
- package/engine/topologies/tilt/generators/tsconfig.star +25 -0
- package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +73 -0
- package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +137 -0
- package/engine/topologies/tilt/generators/typescript/common.star +9 -0
- package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +78 -0
- package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +140 -0
- package/engine/topologies/tilt/generators/typescript/include.star +25 -0
- package/engine/topologies/tilt/generators/typescript/playwright_config.star +42 -0
- package/engine/topologies/tilt/generators/typescript/prisma_config.star +51 -0
- package/engine/topologies/tilt/generators/validators.star +868 -0
- package/engine/topologies/tilt/generators/vite/backend.star +80 -0
- package/engine/topologies/tilt/generators/vite/frameworks/lit.star +92 -0
- package/engine/topologies/tilt/generators/vite/frameworks/preact.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/qwik.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/react.star +128 -0
- package/engine/topologies/tilt/generators/vite/frameworks/solid.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/svelte.star +94 -0
- package/engine/topologies/tilt/generators/vite/frameworks/vanilla.star +92 -0
- package/engine/topologies/tilt/generators/vite/frameworks/vue.star +94 -0
- package/engine/topologies/tilt/generators/vite/frontend.star +153 -0
- package/engine/topologies/tilt/generators/vite/generators.star +45 -0
- package/engine/topologies/tilt/generators/vite/helpers.star +256 -0
- package/engine/topologies/tilt/generators/vite/library.star +67 -0
- package/engine/topologies/tilt/generators/vite/sdk.star +75 -0
- package/engine/topologies/tilt/generators/vite/templates.star +460 -0
- package/engine/topologies/tilt/generators/vite_config.star +24 -0
- package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
- package/engine/topologies/tilt/manifest/README.md +679 -0
- package/engine/topologies/tilt/manifest/__init__.star +220 -0
- package/engine/topologies/tilt/manifest/constants.star +262 -0
- package/engine/topologies/tilt/manifest/errors.star +268 -0
- package/engine/topologies/tilt/manifest/integration.star +348 -0
- package/engine/topologies/tilt/manifest/json_to_yaml.py +61 -0
- package/engine/topologies/tilt/manifest/loader.star +239 -0
- package/engine/topologies/tilt/manifest/mapper.star +229 -0
- package/engine/topologies/tilt/manifest/parser.star +490 -0
- package/engine/topologies/tilt/manifest/schema.star +502 -0
- package/engine/topologies/tilt/manifest/tests/test_integration.star +278 -0
- package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +475 -0
- package/engine/topologies/tilt/manifest/tests/test_manifest.star +319 -0
- package/engine/topologies/tilt/manifest/tests/test_validator.star +472 -0
- package/engine/topologies/tilt/manifest/validator.star +744 -0
- package/engine/topologies/tilt/manifest/yaml_to_json.py +20 -0
- package/engine/topologies/tilt/resources/AGENTS.md +71 -0
- package/engine/topologies/tilt/resources/build_concurrency.star +56 -0
- package/engine/topologies/tilt/resources/conditions.star +5 -0
- package/engine/topologies/tilt/resources/databases.star +246 -0
- package/engine/topologies/tilt/resources/declaration.star +5 -0
- package/engine/topologies/tilt/resources/deps.star +5 -0
- package/engine/topologies/tilt/resources/infra-loader.star +504 -0
- package/engine/topologies/tilt/resources/libs.star +32 -0
- package/engine/topologies/tilt/resources/libs_discovery.star +104 -0
- package/engine/topologies/tilt/resources/libs_paths.star +81 -0
- package/engine/topologies/tilt/resources/libs_resource_definition.star +153 -0
- package/engine/topologies/tilt/resources/libs_setup.star +166 -0
- package/engine/topologies/tilt/resources/libs_tsconfig.star +39 -0
- package/engine/topologies/tilt/resources/orchestrator/apply.star +79 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +864 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +90 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +150 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +38 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +46 -0
- package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +193 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +23 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +136 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/env.star +219 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +172 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +577 -0
- package/engine/topologies/tilt/resources/orchestrator/helpers.star +35 -0
- package/engine/topologies/tilt/resources/orchestrator.star +56 -0
- package/engine/topologies/tilt/resources/ordering.star +5 -0
- package/engine/topologies/tilt/resources/shared-platform-postgres.star +30 -0
- package/engine/topologies/tilt/resources/triggers.star +5 -0
- package/engine/topologies/tilt/resources/watchers.star +304 -0
- package/engine/where-things-live.star +719 -0
- package/examples/tdk-example/LICENSE +21 -0
- package/examples/tdk-example/README.md +23 -0
- package/examples/tdk-example/TILT_SERVICE_DEFAULTS.star +42 -0
- package/examples/tdk-example/TILT_TECH_STACK.star +67 -0
- package/examples/tdk-example/Tiltfile +25 -0
- package/examples/tdk-example/services/platform/messaging/docker-compose.yml +26 -0
- package/examples/tdk-example/services/shop/orders-api/package.json +20 -0
- package/examples/tdk-example/services/shop/orders-api/service.json +14 -0
- package/examples/tdk-example/services/shop/orders-api/src/index.ts +81 -0
- package/examples/tdk-example/services/shop/orders-app/index.html +12 -0
- package/examples/tdk-example/services/shop/orders-app/package.json +23 -0
- package/examples/tdk-example/services/shop/orders-app/public/.gitkeep +0 -0
- package/examples/tdk-example/services/shop/orders-app/service.json +9 -0
- package/examples/tdk-example/services/shop/orders-app/src/main.tsx +9 -0
- package/examples/tdk-example/services/shop/orders-app/src/orders.tsx +67 -0
- package/examples/tdk-example/services/shop/orders-app/src/style.css +15 -0
- package/examples/tdk-example/services/shop/orders-worker/package.json +18 -0
- package/examples/tdk-example/services/shop/orders-worker/service.json +13 -0
- package/examples/tdk-example/services/shop/orders-worker/src/index.ts +33 -0
- package/ext/Tiltfile +66 -0
- package/ext/ide-components/README.md +221 -0
- package/ext/ide-components/code_viewer/server.py +208 -0
- package/ext/ide-components/config_inspector/server.py +1052 -0
- package/ext/ide-components/file_browser/server.py +287 -0
- package/ext/ide-components/shared/config_service.py +471 -0
- package/ext/ide-components/shared/file_utils.py +300 -0
- package/ext/ide-components/shared/http_utils.py +234 -0
- package/ext/ide-components/shared/static/styles.css +1334 -0
- package/ext/ide-components/shared/syntax_highlighter.py +142 -0
- package/ext/ide-components/shared/template_engine.py +125 -0
- package/ext/ide-components/shared/templates/base.html +121 -0
- package/ext/ide-components/shared/test_config_service.py +328 -0
- package/ext/ide-components/shared/tilt_integration.py +160 -0
- package/ext/ui-enhancements/cron-status-server.sh +51 -0
- package/ext/ui-enhancements/cron-status-tracker.sh +148 -0
- package/ext/ui-enhancements/extension.yaml +36 -0
- package/ext/ui-enhancements/tiltfile.py +101 -0
- package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
- package/ext/ui-enhancements/ui/help-panel.css +279 -0
- package/ext/ui-enhancements/ui/icons.css +125 -0
- package/ext/ui-enhancements/ui/tooltips.css +114 -0
- package/package.json +94 -4
- package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
- package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
- package/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
- package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
- package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
- package/specs/specs/TILT_SERVICE_DEFAULTS.star +207 -0
- package/specs/specs/TILT_TECH_STACK.star +161 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __tdkRequire}from'node:module';const require=__tdkRequire(import.meta.url);
|
|
2
|
+
import{$b as d,Yb as a,Zb as b,_b as c,ac as e,bc as f,cc as g,dc as h,ec as i,fc as j}from"./chunk-QWYXYAX6.js";import"./chunk-BZ4H7MM4.js";import"./chunk-6EA4DGCY.js";export{c as MACHINE_CHECK_IDS,a as RUNTIME_CHECK_IDS,b as SCAFFOLD_CHECK_IDS,h as assertMachineReadyOrExit,i as detectRuntimePrerequisites,g as formatColdPreflight,j as formatRuntimeNextSteps,d as nodeTooOld,e as requireVerifiedDockerVersions,f as runColdPreflight};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{createRequire as __tdkRequire}from'node:module';const require=__tdkRequire(import.meta.url);
|
|
2
|
+
import"./chunk-6EA4DGCY.js";var l=globalThis;l.window||=globalThis;l.self||=globalThis;l.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}];import a from"react-devtools-core";var r=async(i="ws://localhost:8097",s=2e3)=>new Promise(t=>{let e=new WebSocket(i),o=setTimeout(()=>{t(!1),e.close()},s);o.unref(),e.addEventListener("open",()=>{clearTimeout(o),e.close(),t(!0)}),e.addEventListener("error",()=>{clearTimeout(o),t(!1)})}),n=r;await n()?(a.initialize(),a.connectToDevTools()):console.warn(`DEV is set to true, but the React DevTools server is not running. Start it with:
|
|
3
|
+
|
|
4
|
+
$ npx react-devtools
|
|
5
|
+
`);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __tdkRequire}from'node:module';const require=__tdkRequire(import.meta.url);
|
|
2
|
+
import{b as a,c as b,d as c,e as d}from"./chunk-BZ4H7MM4.js";import"./chunk-6EA4DGCY.js";export{a as applyPremiumOverlay,c as hasDddLicense,d as hasSablierLicense,b as hasVerdaccioLicense};
|
package/cli/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tdk-cli-internal",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "1.3.189",
|
|
5
|
+
"description": "Flisk CLI — start services on your machine.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"flisk",
|
|
8
|
+
"tilt",
|
|
9
|
+
"cli",
|
|
10
|
+
"local-dev",
|
|
11
|
+
"microservices"
|
|
12
|
+
],
|
|
13
|
+
"homepage": "https://github.com/flisk-sh/flisk#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/flisk-sh/flisk/issues"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/flisk-sh/flisk.git",
|
|
20
|
+
"directory": "cli"
|
|
21
|
+
},
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"author": "Flisk Team",
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "./dist/index.js",
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"bin": {
|
|
28
|
+
"flisk": "bin/flisk.js",
|
|
29
|
+
"tdk": "bin/flisk.js",
|
|
30
|
+
"tdk-cli": "bin/flisk.js"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist",
|
|
34
|
+
"dist-bundle",
|
|
35
|
+
"bin",
|
|
36
|
+
"templates",
|
|
37
|
+
"README.md",
|
|
38
|
+
"Tiltfile",
|
|
39
|
+
"engine",
|
|
40
|
+
"discovery",
|
|
41
|
+
"specs",
|
|
42
|
+
"ext",
|
|
43
|
+
"!ext/ide-components/code_executor",
|
|
44
|
+
"shared-platform-engineering/docker-templates"
|
|
45
|
+
],
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsc && node scripts/bundle.mjs",
|
|
48
|
+
"build:watch": "tsc --watch",
|
|
49
|
+
"check:dist": "npm run build && ../scripts/check-cli-dist.sh",
|
|
50
|
+
"lint": "biome check .",
|
|
51
|
+
"lint:fix": "biome check . --write",
|
|
52
|
+
"typecheck": "tsc --project tsconfig.typecheck.json",
|
|
53
|
+
"clean": "rm -rf dist",
|
|
54
|
+
"dev": "bun run build:watch",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"test:watch": "vitest",
|
|
57
|
+
"test:coverage": "vitest run --coverage --coverage.reportOnFailure --coverage.reporter=text --coverage.reporter=html --coverage.reporter=json-summary --coverage.reporter=json --coverage.reportsDirectory=coverage --reporter=default --reporter=json --outputFile.json=test-results/vitest.json",
|
|
58
|
+
"prepack": "../scripts/stage-npm-engine.sh && npm run build"
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"commander": "^15.0.0",
|
|
62
|
+
"handlebars": "^4.7.8"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@biomejs/biome": "^2.5.13",
|
|
66
|
+
"@types/node": "^22.0.0",
|
|
67
|
+
"@types/react": "^19.3.0",
|
|
68
|
+
"@vitest/coverage-v8": "^5.0.2",
|
|
69
|
+
"ajv": "^8.17.1",
|
|
70
|
+
"chalk": "^6.0.1",
|
|
71
|
+
"esbuild": "^0.28.2",
|
|
72
|
+
"ink": "^8.0.0",
|
|
73
|
+
"knip": "^6.38.0",
|
|
74
|
+
"react": "^19.3.0",
|
|
75
|
+
"react-devtools-core": "^8.0.0",
|
|
76
|
+
"typescript": "^7.0.2",
|
|
77
|
+
"vite": "^8.3.3",
|
|
78
|
+
"vitest": "^5.0.0"
|
|
79
|
+
},
|
|
80
|
+
"engines": {
|
|
81
|
+
"node": ">=22.12.0"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Copyright (c) 2026 Flisk contributors
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
# Fix Bun hoisted package symlinks that can break when copied across Docker stages.
|
|
7
|
+
for pkg in node_modules/.bun/*/node_modules/*; do
|
|
8
|
+
[ -d "$pkg" ] || continue
|
|
9
|
+
name=$(basename "$pkg")
|
|
10
|
+
case "$name" in
|
|
11
|
+
@*) continue ;;
|
|
12
|
+
esac
|
|
13
|
+
ln -sfn "$(pwd)/$pkg" "node_modules/$name"
|
|
14
|
+
done
|
|
15
|
+
|
|
16
|
+
for pkg in node_modules/.bun/*/node_modules/@*/*; do
|
|
17
|
+
[ -d "$pkg" ] || continue
|
|
18
|
+
scope=$(basename "$(dirname "$pkg")")
|
|
19
|
+
name=$(basename "$pkg")
|
|
20
|
+
if [ "$scope" = "@prisma" ] && [ "$name" = "engines" ]; then
|
|
21
|
+
continue
|
|
22
|
+
fi
|
|
23
|
+
mkdir -p "node_modules/$scope"
|
|
24
|
+
ln -sfn "$(pwd)/$pkg" "node_modules/$scope/$name"
|
|
25
|
+
done
|
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Copyright (c) 2026 Flisk contributors
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# 🔐 UNIVERSAL INFISICAL ENTRYPOINT - Zero-Code Secret Injection
|
|
6
|
+
# =============================================================================
|
|
7
|
+
#
|
|
8
|
+
# This entrypoint wrapper injects secrets from Infisical WITHOUT modifying
|
|
9
|
+
# any microservice code. The service thinks it's reading from process.env,
|
|
10
|
+
# but Infisical CLI has already populated those variables.
|
|
11
|
+
#
|
|
12
|
+
# How it works:
|
|
13
|
+
# 1. Detects SERVICE_NAME environment variable (set by Tiltfile)
|
|
14
|
+
# 2. Constructs Infisical secret path: /services/{SERVICE_NAME}
|
|
15
|
+
# 3. Authenticates using Machine Identity (Universal Auth)
|
|
16
|
+
# 4. Uses `infisical run` to fetch secrets and inject into process env
|
|
17
|
+
# 5. Executes the original command (bun, npm, node, etc.)
|
|
18
|
+
#
|
|
19
|
+
# Key Benefits:
|
|
20
|
+
# - Zero refactoring: No SDK imports in microservices
|
|
21
|
+
# - Dynamic pathing: Auto-discovers service-specific secrets
|
|
22
|
+
# - Fallback support: Works without Infisical (for local dev)
|
|
23
|
+
# - Prisma compatible: CLI commands also see injected secrets
|
|
24
|
+
#
|
|
25
|
+
# 🗃️ DATABASE VIRTUALIZATION (BigTech Pattern):
|
|
26
|
+
# - Single PostgreSQL container with logical databases
|
|
27
|
+
# - Entrypoint waits for database to be ready before starting app
|
|
28
|
+
# - Saves ~80% RAM compared to 120 separate PostgreSQL containers
|
|
29
|
+
#
|
|
30
|
+
# 🎯 INVERSION OF CONTROL (Tilt as Single Source of Truth):
|
|
31
|
+
# - TILT_DATABASE_URL: If set by Docker Compose/Tilt, ALWAYS wins over Infisical
|
|
32
|
+
# - This ensures Tilt-created databases match application connections
|
|
33
|
+
# - Solves the "hidden DB secret" paradox without modifying Infisical
|
|
34
|
+
# - Precedence: TILT_DATABASE_URL > Infisical DATABASE_URL > Fallback
|
|
35
|
+
# =============================================================================
|
|
36
|
+
|
|
37
|
+
set -e
|
|
38
|
+
|
|
39
|
+
# Colors for terminal output
|
|
40
|
+
RED='\033[0;31m'
|
|
41
|
+
GREEN='\033[0;32m'
|
|
42
|
+
YELLOW='\033[1;33m'
|
|
43
|
+
BLUE='\033[0;34m'
|
|
44
|
+
CYAN='\033[0;36m'
|
|
45
|
+
NC='\033[0m' # No Color
|
|
46
|
+
|
|
47
|
+
log_info() {
|
|
48
|
+
printf "${BLUE}[ENTRYPOINT]${NC} %s\n" "$1"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
log_success() {
|
|
52
|
+
printf "${GREEN}[ENTRYPOINT]${NC} %s\n" "$1"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
log_warn() {
|
|
56
|
+
printf "${YELLOW}[ENTRYPOINT]${NC} %s\n" "$1"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
log_error() {
|
|
60
|
+
printf "${RED}[ENTRYPOINT]${NC} %s\n" "$1"
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
log_db() {
|
|
64
|
+
printf "${CYAN}[DATABASE]${NC} %s\n" "$1"
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# =============================================================================
|
|
68
|
+
# CONFIGURATION
|
|
69
|
+
# =============================================================================
|
|
70
|
+
|
|
71
|
+
# Service name (auto-detected from container or fallback to env var)
|
|
72
|
+
SERVICE_NAME="${SERVICE_NAME:-unknown-service}"
|
|
73
|
+
|
|
74
|
+
# Infisical configuration
|
|
75
|
+
INFISICAL_SITE_URL="${INFISICAL_SITE_URL:-https://app.infisical.com}"
|
|
76
|
+
INFISICAL_ENV="${INFISICAL_ENV:-dev}"
|
|
77
|
+
INFISICAL_SECRET_PATH="${INFISICAL_SECRET_PATH:-/services/${SERVICE_NAME}}"
|
|
78
|
+
|
|
79
|
+
# Check if Infisical is enabled (can be disabled for local dev)
|
|
80
|
+
INFISICAL_ENABLED="${INFISICAL_ENABLED:-true}"
|
|
81
|
+
|
|
82
|
+
# Database connectivity settings
|
|
83
|
+
DB_WAIT_TIMEOUT="${DB_WAIT_TIMEOUT:-60}"
|
|
84
|
+
DB_WAIT_INTERVAL="${DB_WAIT_INTERVAL:-2}"
|
|
85
|
+
|
|
86
|
+
# =============================================================================
|
|
87
|
+
# 🎯 INVERSION OF CONTROL - Tilt as Single Source of Truth
|
|
88
|
+
# =============================================================================
|
|
89
|
+
#
|
|
90
|
+
# Problem: Tilt creates databases but doesn't know what Infisical contains.
|
|
91
|
+
# This causes DATABASE_URL mismatch (e.g., tdk_project_staff vs staff_db_prod)
|
|
92
|
+
#
|
|
93
|
+
# Solution: TILT_* prefixed variables ALWAYS override Infisical secrets
|
|
94
|
+
# Tilt sets TILT_DATABASE_URL → we export it as DATABASE_URL BEFORE infisical run
|
|
95
|
+
#
|
|
96
|
+
# Variables that can be overridden by Tilt:
|
|
97
|
+
# - TILT_DATABASE_URL → DATABASE_URL
|
|
98
|
+
# - TILT_NATS_URL → NATS_URL
|
|
99
|
+
# - TILT_REDIS_URL → REDIS_URL
|
|
100
|
+
# - TILT_* → * (generic pattern)
|
|
101
|
+
# =============================================================================
|
|
102
|
+
|
|
103
|
+
# List of critical variables that Tilt can override
|
|
104
|
+
TILT_OVERRIDE_VARS="DATABASE_URL NATS_URL REDIS_URL DB_HOST DB_PORT DB_NAME DB_USER DB_PASSWORD"
|
|
105
|
+
|
|
106
|
+
# Track overrides for logging
|
|
107
|
+
TILT_OVERRIDES_APPLIED=0
|
|
108
|
+
|
|
109
|
+
apply_tilt_overrides() {
|
|
110
|
+
log_info "🎯 Checking for Tilt IoC overrides..."
|
|
111
|
+
local overrides_applied=0
|
|
112
|
+
|
|
113
|
+
for var_name in $TILT_OVERRIDE_VARS; do
|
|
114
|
+
tilt_var="TILT_${var_name}"
|
|
115
|
+
tilt_value=$(eval echo \$$tilt_var)
|
|
116
|
+
|
|
117
|
+
if [ -n "$tilt_value" ]; then
|
|
118
|
+
log_success " ✓ TILT_${var_name} overrides ${var_name}"
|
|
119
|
+
export "${var_name}=${tilt_value}"
|
|
120
|
+
overrides_applied=$((overrides_applied + 1))
|
|
121
|
+
TILT_OVERRIDES_APPLIED=$overrides_applied
|
|
122
|
+
fi
|
|
123
|
+
done
|
|
124
|
+
|
|
125
|
+
if [ $overrides_applied -eq 0 ]; then
|
|
126
|
+
log_info " No Tilt overrides found - using Infisical/defaults"
|
|
127
|
+
else
|
|
128
|
+
log_success " 🎯 Applied ${overrides_applied} Tilt override(s) - Tilt is SSOT!"
|
|
129
|
+
fi
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
# =============================================================================
|
|
133
|
+
# DATABASE VIRTUALIZATION FUNCTIONS (BigTech Pattern)
|
|
134
|
+
# =============================================================================
|
|
135
|
+
# Single PostgreSQL container with logical databases per service
|
|
136
|
+
# Saves ~80% RAM on Mac M1/M2 compared to 120 separate containers
|
|
137
|
+
|
|
138
|
+
wait_for_postgres() {
|
|
139
|
+
local db_host="$1"
|
|
140
|
+
local db_port="$2"
|
|
141
|
+
local db_name="$3"
|
|
142
|
+
local timeout="${DB_WAIT_TIMEOUT}"
|
|
143
|
+
local interval="${DB_WAIT_INTERVAL}"
|
|
144
|
+
local elapsed=0
|
|
145
|
+
|
|
146
|
+
log_db "🗃️ Waiting for PostgreSQL: ${db_host}:${db_port}/${db_name}"
|
|
147
|
+
log_db "⏱️ Timeout: ${timeout}s, Check interval: ${interval}s"
|
|
148
|
+
|
|
149
|
+
while [ $elapsed -lt $timeout ]; do
|
|
150
|
+
# TCP check first (port availability)
|
|
151
|
+
if nc -z "${db_host}" "${db_port}" 2>/dev/null; then
|
|
152
|
+
log_db "✓ PostgreSQL port ${db_port} is open"
|
|
153
|
+
|
|
154
|
+
# If we have psql, do a deeper health check
|
|
155
|
+
if command -v psql >/dev/null 2>&1; then
|
|
156
|
+
if PGPASSWORD="${db_password:-}" psql -h "${db_host}" -p "${db_port}" -U "${db_user:-tdk_project}" -d "${db_name}" -c "SELECT 1" >/dev/null 2>&1; then
|
|
157
|
+
log_success "✅ Database ${db_name} is ready!"
|
|
158
|
+
return 0
|
|
159
|
+
fi
|
|
160
|
+
else
|
|
161
|
+
# No psql available, trust TCP check
|
|
162
|
+
log_success "✅ PostgreSQL is reachable (TCP check passed)"
|
|
163
|
+
return 0
|
|
164
|
+
fi
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
log_db "⏳ Waiting... (${elapsed}/${timeout}s)"
|
|
168
|
+
sleep $interval
|
|
169
|
+
elapsed=$((elapsed + interval))
|
|
170
|
+
done
|
|
171
|
+
|
|
172
|
+
log_warn "⚠️ Database connection timeout after ${timeout}s - proceeding anyway"
|
|
173
|
+
return 1
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
parse_database_url() {
|
|
177
|
+
# Parse DATABASE_URL: postgresql://user:password@host:port/dbname?schema=public
|
|
178
|
+
local url="$1"
|
|
179
|
+
|
|
180
|
+
# Extract components using sed
|
|
181
|
+
db_user=$(echo "$url" | sed -n 's|.*://\([^:]*\):.*|\1|p')
|
|
182
|
+
db_password=$(echo "$url" | sed -n 's|.*://[^:]*:\([^@]*\)@.*|\1|p')
|
|
183
|
+
db_host=$(echo "$url" | sed -n 's|.*@\([^:]*\):.*|\1|p')
|
|
184
|
+
db_port=$(echo "$url" | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
|
|
185
|
+
db_name=$(echo "$url" | sed -n 's|.*/\([^?]*\).*|\1|p')
|
|
186
|
+
|
|
187
|
+
# Export for use in other functions
|
|
188
|
+
export DB_USER="${db_user}"
|
|
189
|
+
export DB_PASSWORD="${db_password}"
|
|
190
|
+
export DB_HOST="${db_host}"
|
|
191
|
+
export DB_PORT="${db_port}"
|
|
192
|
+
export DB_NAME="${db_name}"
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
# =============================================================================
|
|
196
|
+
# INFISICAL VALIDATION
|
|
197
|
+
# =============================================================================
|
|
198
|
+
|
|
199
|
+
validate_infisical_config() {
|
|
200
|
+
local missing=""
|
|
201
|
+
|
|
202
|
+
if [ -z "$INFISICAL_CLIENT_ID" ]; then
|
|
203
|
+
missing="${missing}INFISICAL_CLIENT_ID "
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
if [ -z "$INFISICAL_CLIENT_SECRET" ]; then
|
|
207
|
+
missing="${missing}INFISICAL_CLIENT_SECRET "
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
if [ -z "$INFISICAL_PROJECT_ID" ]; then
|
|
211
|
+
missing="${missing}INFISICAL_PROJECT_ID "
|
|
212
|
+
fi
|
|
213
|
+
|
|
214
|
+
if [ -n "$missing" ]; then
|
|
215
|
+
log_warn "Missing Infisical config: ${missing}"
|
|
216
|
+
return 1
|
|
217
|
+
fi
|
|
218
|
+
|
|
219
|
+
return 0
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
# =============================================================================
|
|
223
|
+
# DATABASE CONNECTIVITY VALIDATION (Unified for Database Virtualization)
|
|
224
|
+
# =============================================================================
|
|
225
|
+
|
|
226
|
+
validate_database_connectivity() {
|
|
227
|
+
# Extract database info from DATABASE_URL if available
|
|
228
|
+
if [ -n "$DATABASE_URL" ]; then
|
|
229
|
+
parse_database_url "$DATABASE_URL"
|
|
230
|
+
|
|
231
|
+
log_info "🗃️ Database Virtualization Check:"
|
|
232
|
+
log_info " Host: ${DB_HOST:-unknown}"
|
|
233
|
+
log_info " Port: ${DB_PORT:-5432}"
|
|
234
|
+
log_info " Database: ${DB_NAME:-unknown}"
|
|
235
|
+
log_info " Service: ${SERVICE_NAME}"
|
|
236
|
+
|
|
237
|
+
# Wait for PostgreSQL to be ready
|
|
238
|
+
wait_for_postgres "${DB_HOST}" "${DB_PORT:-5432}" "${DB_NAME}"
|
|
239
|
+
else
|
|
240
|
+
log_warn "DATABASE_URL not set - skipping database connectivity check"
|
|
241
|
+
fi
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
# =============================================================================
|
|
245
|
+
# 📦 PRISMA AUTO-MIGRATION (Architect Level - Uber Pattern)
|
|
246
|
+
# =============================================================================
|
|
247
|
+
#
|
|
248
|
+
# Detects Prisma schema and runs migrations DIRECTLY without relying on
|
|
249
|
+
# package.json scripts. This removes human error dependency and ensures
|
|
250
|
+
# migrations always run regardless of script configuration.
|
|
251
|
+
#
|
|
252
|
+
# Benefits:
|
|
253
|
+
# - No dependency on package.json "db:migrate" script existing
|
|
254
|
+
# - Consistent migration behavior across all services
|
|
255
|
+
# - Self-healing: works even if package.json is misconfigured
|
|
256
|
+
# =============================================================================
|
|
257
|
+
|
|
258
|
+
AUTO_MIGRATE="${AUTO_MIGRATE:-true}"
|
|
259
|
+
|
|
260
|
+
run_prisma_migrations() {
|
|
261
|
+
# Skip if auto-migrate is disabled
|
|
262
|
+
if [ "$AUTO_MIGRATE" = "false" ] || [ "$AUTO_MIGRATE" = "0" ]; then
|
|
263
|
+
log_info "📦 Auto-migration disabled (AUTO_MIGRATE=false)"
|
|
264
|
+
return 0
|
|
265
|
+
fi
|
|
266
|
+
|
|
267
|
+
# Check for Prisma schema in common locations
|
|
268
|
+
local prisma_schema=""
|
|
269
|
+
if [ -f "./prisma/schema.prisma" ]; then
|
|
270
|
+
prisma_schema="./prisma/schema.prisma"
|
|
271
|
+
elif [ -f "./prisma/schema/schema.prisma" ]; then
|
|
272
|
+
prisma_schema="./prisma/schema/schema.prisma"
|
|
273
|
+
elif [ -f "./schema.prisma" ]; then
|
|
274
|
+
prisma_schema="./schema.prisma"
|
|
275
|
+
fi
|
|
276
|
+
|
|
277
|
+
if [ -n "$prisma_schema" ]; then
|
|
278
|
+
log_info "📦 Prisma schema found: ${prisma_schema}"
|
|
279
|
+
|
|
280
|
+
# Auto-resolve failed migrations (P3009) before deploying new ones.
|
|
281
|
+
# In dev/local environments, stale failed records in _prisma_migrations
|
|
282
|
+
# block all subsequent deploys. Resolve them automatically.
|
|
283
|
+
if [ -n "$DATABASE_URL" ]; then
|
|
284
|
+
local deploy_output
|
|
285
|
+
deploy_output=$(bunx prisma migrate deploy 2>&1) || true
|
|
286
|
+
if echo "$deploy_output" | grep -q "P3009"; then
|
|
287
|
+
log_warn "🔧 P3009: Found failed migration(s) — auto-resolving..."
|
|
288
|
+
# Extract migration name(s) from "The `<name>` migration ... failed" lines
|
|
289
|
+
echo "$deploy_output" | sed -n 's/.*The `\([^`]*\)` migration .* failed.*/\1/p' | while IFS= read -r migration_name; do
|
|
290
|
+
log_info " Rolling back: ${migration_name}"
|
|
291
|
+
bunx prisma migrate resolve --rolled-back "$migration_name" 2>&1 || true
|
|
292
|
+
done
|
|
293
|
+
# Retry deploy after resolving failed migrations
|
|
294
|
+
log_info "📦 Retrying database migrations..."
|
|
295
|
+
if bunx prisma migrate deploy 2>&1; then
|
|
296
|
+
log_success "✅ Database migrations completed successfully (after auto-resolve)"
|
|
297
|
+
else
|
|
298
|
+
log_warn "⚠️ Migration still failed after auto-resolve"
|
|
299
|
+
fi
|
|
300
|
+
elif echo "$deploy_output" | grep -q "applied successfully"; then
|
|
301
|
+
log_success "✅ Database migrations completed successfully"
|
|
302
|
+
else
|
|
303
|
+
# No P3009 and no success — could be "already in sync" or other info
|
|
304
|
+
echo "$deploy_output"
|
|
305
|
+
log_info "📦 Migration deploy completed (check output above)"
|
|
306
|
+
fi
|
|
307
|
+
else
|
|
308
|
+
log_warn "📦 DATABASE_URL not set — skipping migration deploy"
|
|
309
|
+
fi
|
|
310
|
+
else
|
|
311
|
+
log_info "📦 No Prisma schema found - skipping auto-migration"
|
|
312
|
+
fi
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
# =============================================================================
|
|
316
|
+
# MAIN EXECUTION
|
|
317
|
+
# =============================================================================
|
|
318
|
+
|
|
319
|
+
main() {
|
|
320
|
+
log_info "═══════════════════════════════════════════════════"
|
|
321
|
+
log_info "🚀 Starting service: ${SERVICE_NAME}"
|
|
322
|
+
log_info "🌍 Environment: ${INFISICAL_ENV}"
|
|
323
|
+
log_info "🔐 Secret path: ${INFISICAL_SECRET_PATH}"
|
|
324
|
+
log_info "🗃️ Database Virtualization: ENABLED (BigTech Pattern)"
|
|
325
|
+
log_info "🎯 Tilt IoC: ENABLED (Single Source of Truth)"
|
|
326
|
+
log_info "═══════════════════════════════════════════════════"
|
|
327
|
+
|
|
328
|
+
# 🎯 CRITICAL: Apply Tilt overrides FIRST (before anything else)
|
|
329
|
+
# This ensures TILT_DATABASE_URL becomes DATABASE_URL BEFORE:
|
|
330
|
+
# 1. validate_database_connectivity() uses it
|
|
331
|
+
# 2. infisical run potentially overwrites it
|
|
332
|
+
apply_tilt_overrides
|
|
333
|
+
|
|
334
|
+
# Check if Infisical is disabled
|
|
335
|
+
if [ "$INFISICAL_ENABLED" = "false" ] || [ "$INFISICAL_ENABLED" = "0" ]; then
|
|
336
|
+
log_warn "Infisical disabled - using direct environment variables"
|
|
337
|
+
validate_database_connectivity
|
|
338
|
+
run_prisma_migrations
|
|
339
|
+
exec "$@"
|
|
340
|
+
fi
|
|
341
|
+
|
|
342
|
+
# Check if infisical CLI is available
|
|
343
|
+
if ! command -v infisical >/dev/null 2>&1; then
|
|
344
|
+
log_warn "Infisical CLI not found - using direct environment variables"
|
|
345
|
+
validate_database_connectivity
|
|
346
|
+
run_prisma_migrations
|
|
347
|
+
exec "$@"
|
|
348
|
+
fi
|
|
349
|
+
|
|
350
|
+
# Validate Infisical configuration
|
|
351
|
+
if ! validate_infisical_config; then
|
|
352
|
+
log_warn "Infisical not configured - falling back to environment variables"
|
|
353
|
+
validate_database_connectivity
|
|
354
|
+
run_prisma_migrations
|
|
355
|
+
exec "$@"
|
|
356
|
+
fi
|
|
357
|
+
|
|
358
|
+
log_success "Infisical configured ✓"
|
|
359
|
+
|
|
360
|
+
# Authenticate with Machine Identity (Universal Auth)
|
|
361
|
+
# This is NON-INTERACTIVE - uses client ID/secret from env vars
|
|
362
|
+
log_info "Authenticating with Machine Identity..."
|
|
363
|
+
|
|
364
|
+
if ! infisical login --method=universal-auth \
|
|
365
|
+
--client-id="$INFISICAL_CLIENT_ID" \
|
|
366
|
+
--client-secret="$INFISICAL_CLIENT_SECRET" \
|
|
367
|
+
--domain="$INFISICAL_SITE_URL" \
|
|
368
|
+
--silent 2>/dev/null; then
|
|
369
|
+
log_warn "Machine Identity auth failed - falling back to environment variables"
|
|
370
|
+
validate_database_connectivity
|
|
371
|
+
run_prisma_migrations
|
|
372
|
+
exec "$@"
|
|
373
|
+
fi
|
|
374
|
+
|
|
375
|
+
log_success "Authenticated ✓"
|
|
376
|
+
|
|
377
|
+
# Validate database connectivity BEFORE starting the app
|
|
378
|
+
# This ensures the shared PostgreSQL is ready (Database Virtualization pattern)
|
|
379
|
+
validate_database_connectivity
|
|
380
|
+
|
|
381
|
+
# 📦 PRISMA AUTO-MIGRATION with Infisical context
|
|
382
|
+
# Run migrations INSIDE infisical run so DATABASE_URL from secrets is available
|
|
383
|
+
# Includes P3009 auto-resolve: marks stale failed migrations as rolled-back
|
|
384
|
+
log_info "📦 Running Prisma migrations with Infisical secrets..."
|
|
385
|
+
infisical run \
|
|
386
|
+
--domain="$INFISICAL_SITE_URL" \
|
|
387
|
+
--projectId="$INFISICAL_PROJECT_ID" \
|
|
388
|
+
--env="$INFISICAL_ENV" \
|
|
389
|
+
--path="$INFISICAL_SECRET_PATH" \
|
|
390
|
+
--expand=false \
|
|
391
|
+
--silent \
|
|
392
|
+
-- sh -c '
|
|
393
|
+
if [ -f "./prisma/schema.prisma" ] || [ -f "./prisma/schema/schema.prisma" ]; then
|
|
394
|
+
output=$(bunx prisma migrate deploy 2>&1) || true
|
|
395
|
+
if echo "$output" | grep -q "P3009"; then
|
|
396
|
+
echo "[ENTRYPOINT] 🔧 P3009: Auto-resolving failed migration(s)..."
|
|
397
|
+
echo "$output" | sed -n "s/.*The \`\([^\`]*\)\` migration .* failed.*/\1/p" | while IFS= read -r mig; do
|
|
398
|
+
echo "[ENTRYPOINT] Rolling back: $mig"
|
|
399
|
+
bunx prisma migrate resolve --rolled-back "$mig" 2>&1 || true
|
|
400
|
+
done
|
|
401
|
+
echo "[ENTRYPOINT] 📦 Retrying migrations..."
|
|
402
|
+
bunx prisma migrate deploy 2>&1 || echo "[ENTRYPOINT] ⚠️ Migration still failed after auto-resolve"
|
|
403
|
+
else
|
|
404
|
+
echo "$output"
|
|
405
|
+
fi
|
|
406
|
+
fi
|
|
407
|
+
' || true
|
|
408
|
+
|
|
409
|
+
# Execute with Infisical secret injection
|
|
410
|
+
# 🎯 CRITICAL FIX: Instead of using `infisical run` (which always overwrites existing env vars),
|
|
411
|
+
# we fetch secrets and only export vars that aren't already set. This preserves TILT_* overrides.
|
|
412
|
+
# Precedence: TILT_* > Infisical > Defaults
|
|
413
|
+
|
|
414
|
+
log_info "Fetching secrets from Infisical..."
|
|
415
|
+
|
|
416
|
+
# Fetch secrets in plain format (KEY=VALUE per line)
|
|
417
|
+
# Use a temporary file to capture output safely
|
|
418
|
+
temp_secrets=$(mktemp)
|
|
419
|
+
trap "rm -f $temp_secrets" EXIT
|
|
420
|
+
|
|
421
|
+
infisical secrets \
|
|
422
|
+
--domain="$INFISICAL_SITE_URL" \
|
|
423
|
+
--projectId="$INFISICAL_PROJECT_ID" \
|
|
424
|
+
--env="$INFISICAL_ENV" \
|
|
425
|
+
--path="$INFISICAL_SECRET_PATH" \
|
|
426
|
+
--expand=false \
|
|
427
|
+
--plain \
|
|
428
|
+
--silent > "$temp_secrets" 2>/dev/null || true
|
|
429
|
+
|
|
430
|
+
# Only export secrets that aren't already set in the environment
|
|
431
|
+
# This preserves TILT_DATABASE_URL -> DATABASE_URL override
|
|
432
|
+
secrets_exported=0
|
|
433
|
+
if [ -s "$temp_secrets" ]; then
|
|
434
|
+
while IFS= read -r line; do
|
|
435
|
+
# Skip empty lines
|
|
436
|
+
[ -z "$line" ] && continue
|
|
437
|
+
|
|
438
|
+
# Split on first = only (in case value contains =)
|
|
439
|
+
key="${line%%=*}"
|
|
440
|
+
value="${line#*=}"
|
|
441
|
+
|
|
442
|
+
# Only export if not already set in environment
|
|
443
|
+
eval "current_val=\$$key"
|
|
444
|
+
if [ -z "$current_val" ]; then
|
|
445
|
+
export "${key}=${value}"
|
|
446
|
+
secrets_exported=$((secrets_exported + 1))
|
|
447
|
+
fi
|
|
448
|
+
done < "$temp_secrets"
|
|
449
|
+
fi
|
|
450
|
+
|
|
451
|
+
log_success "Injected ${secrets_exported} secret(s) from Infisical (preserving ${TILT_OVERRIDES_APPLIED} TILT override(s))"
|
|
452
|
+
log_info "🎯 Final DATABASE_URL: ${DATABASE_URL:-not-set}"
|
|
453
|
+
log_success "🎉 Service ${SERVICE_NAME} starting with Database Virtualization!"
|
|
454
|
+
|
|
455
|
+
exec "$@"
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
# Handle the case where no command is provided
|
|
459
|
+
if [ $# -eq 0 ]; then
|
|
460
|
+
log_error "No command provided"
|
|
461
|
+
log_info "Usage: /entrypoint.sh <command> [args...]"
|
|
462
|
+
log_info "Example: /entrypoint.sh bun run src/index.ts"
|
|
463
|
+
exit 1
|
|
464
|
+
fi
|
|
465
|
+
|
|
466
|
+
main "$@"
|