@flisk-sh/flisk 0.0.0-stage → 1.3.190
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-CLCUIDBH.js +510 -0
- package/cli/dist-bundle/cli.js +2017 -0
- package/cli/dist-bundle/cold-preflight-SY26O2IG.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,65 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🏗️ TILT SDK - FRONTEND BUILD PLAN
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Decides how a frontend image runs its production build.
|
|
5
|
+
#
|
|
6
|
+
# A `"build": "tsc --noEmit && vite build"` script (the restaurant example uses it). Running that script
|
|
7
|
+
# inside the image build makes the type-check block the image and compete for
|
|
8
|
+
# CPU with other builds. When the script has exactly that standard shape, the
|
|
9
|
+
# image runs `vite build` directly and the type-check becomes a separate,
|
|
10
|
+
# non-blocking Tilt resource. Any other script runs unchanged.
|
|
11
|
+
# =============================================================================
|
|
12
|
+
|
|
13
|
+
DEFAULT_FRONTEND_BUILD_CMD = 'bun run build'
|
|
14
|
+
|
|
15
|
+
# Only a non-emitting type-check is moved out of the image. A plain `tsc` writes output that the build may
|
|
16
|
+
# use (the CLI scaffold's tsconfig emits to ./dist), so that script keeps running unchanged in the image.
|
|
17
|
+
_TSC_FORMS = ['tsc --noEmit']
|
|
18
|
+
# The generated config is copied into the image; any other config file is not, so a script that selects one is not used.
|
|
19
|
+
_IMAGE_CONFIG_DIR = '.autogenerated/'
|
|
20
|
+
_VITE_BUILD = 'vite build'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _default_plan():
|
|
24
|
+
return {'build_cmd': DEFAULT_FRONTEND_BUILD_CMD, 'typecheck': False, 'typecheck_cmd': ''}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def frontend_build_plan(package_json_path):
|
|
28
|
+
"""Returns {'build_cmd', 'typecheck', 'typecheck_cmd'} for the package.json at package_json_path.
|
|
29
|
+
|
|
30
|
+
build_cmd is the command the image runs; the generated Vite config is appended to it.
|
|
31
|
+
typecheck is True only when the standard `tsc --noEmit && vite build` form was recognised;
|
|
32
|
+
typecheck_cmd is then the host command for the non-blocking type-check resource.
|
|
33
|
+
A missing or unreadable package.json, or any other script, gets the default plan.
|
|
34
|
+
"""
|
|
35
|
+
if not os.path.exists(package_json_path):
|
|
36
|
+
return _default_plan()
|
|
37
|
+
|
|
38
|
+
scripts = read_json(package_json_path).get('scripts', {})
|
|
39
|
+
script = scripts.get('build', '').strip()
|
|
40
|
+
steps = script.split(' && ')
|
|
41
|
+
if len(steps) != 2:
|
|
42
|
+
return _default_plan()
|
|
43
|
+
|
|
44
|
+
typecheck_step = steps[0].strip()
|
|
45
|
+
vite_step = steps[1].strip()
|
|
46
|
+
if typecheck_step not in _TSC_FORMS:
|
|
47
|
+
return _default_plan()
|
|
48
|
+
if vite_step != _VITE_BUILD and not vite_step.startswith(_VITE_BUILD + ' '):
|
|
49
|
+
return _default_plan()
|
|
50
|
+
|
|
51
|
+
# Flags after `vite build` are kept. A --config must name the generated config, which the image copies.
|
|
52
|
+
extra_args = vite_step[len(_VITE_BUILD):]
|
|
53
|
+
tokens = extra_args.split()
|
|
54
|
+
for i, token in enumerate(tokens):
|
|
55
|
+
value = ''
|
|
56
|
+
if token == '--config' and i + 1 < len(tokens):
|
|
57
|
+
value = tokens[i + 1]
|
|
58
|
+
elif token.startswith('--config='):
|
|
59
|
+
value = token[len('--config='):]
|
|
60
|
+
else:
|
|
61
|
+
continue
|
|
62
|
+
if not value.startswith(_IMAGE_CONFIG_DIR):
|
|
63
|
+
return _default_plan()
|
|
64
|
+
|
|
65
|
+
return {'build_cmd': 'bunx vite build' + extra_args, 'typecheck': True, 'typecheck_cmd': 'bunx tsc --noEmit'}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🏗️ TILT SDK - GOLDEN LAYERED IMAGES PROVIDER
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Purpose: Public API facade for golden layered image orchestration.
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
load('./golden_image_constants.star',
|
|
8
|
+
'GOLDEN_IMAGE_PREFIX',
|
|
9
|
+
'GOLDEN_LAYERS',
|
|
10
|
+
'get_layer_reference',
|
|
11
|
+
)
|
|
12
|
+
load('./golden_image_build.star', 'build_golden_layers')
|
|
13
|
+
load('./golden_image_dockerfile.star', 'generate_golden_dockerfile')
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
GoldenImage = struct(
|
|
17
|
+
# Build functions
|
|
18
|
+
build = build_golden_layers,
|
|
19
|
+
|
|
20
|
+
# Reference getters
|
|
21
|
+
get_layer = get_layer_reference,
|
|
22
|
+
l1 = lambda: get_layer_reference('l1'),
|
|
23
|
+
l2 = lambda: get_layer_reference('l2'),
|
|
24
|
+
l3_backend = lambda: get_layer_reference('l3-backend'),
|
|
25
|
+
l3_frontend = lambda: get_layer_reference('l3-frontend'),
|
|
26
|
+
l3_migrator = lambda: get_layer_reference('l3-migrator'),
|
|
27
|
+
l4_backend = lambda: get_layer_reference('l4-backend'),
|
|
28
|
+
l4_frontend = lambda: get_layer_reference('l4-frontend'),
|
|
29
|
+
l4_migrator = lambda: get_layer_reference('l4-migrator'),
|
|
30
|
+
|
|
31
|
+
# Constants
|
|
32
|
+
layers = GOLDEN_LAYERS,
|
|
33
|
+
prefix = GOLDEN_IMAGE_PREFIX,
|
|
34
|
+
|
|
35
|
+
# Generators
|
|
36
|
+
generate_dockerfile = generate_golden_dockerfile,
|
|
37
|
+
)
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🏗️ TILT SDK - GOLDEN IMAGE BUILDERS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
load('./golden_image_constants.star', 'GOLDEN_DOCKERFILE', 'GOLDEN_IMAGE_PREFIX', 'GOLDEN_LAYERS', 'LEGACY_GOLDEN_IMAGES')
|
|
6
|
+
|
|
7
|
+
# Label that records which golden Dockerfile an image was built from.
|
|
8
|
+
GOLDEN_HASH_LABEL = 'tdk.golden.hash'
|
|
9
|
+
|
|
10
|
+
# Shell template for the golden build. Placeholders (@@...@@) are replaced in
|
|
11
|
+
# build_golden_layers(); plain `$VAR` references are expanded by the shell.
|
|
12
|
+
_GOLDEN_BUILD_TEMPLATE = '''
|
|
13
|
+
DF_REL=@@DF_REL@@
|
|
14
|
+
ROOT_REL=@@ROOT_REL@@
|
|
15
|
+
DF="$(cd "$(dirname "$DF_REL")" && pwd)/$(basename "$DF_REL")"
|
|
16
|
+
ROOT="$(cd "$ROOT_REL" && pwd)"
|
|
17
|
+
HASH="$(cat "$DF" | (sha256sum 2>/dev/null || shasum -a 256) | cut -c1-64)"
|
|
18
|
+
IMAGES="@@IMAGES@@"
|
|
19
|
+
|
|
20
|
+
if [ -z "$TDK_GOLDEN_REBUILD" ]; then
|
|
21
|
+
fresh=1
|
|
22
|
+
for img in $IMAGES; do
|
|
23
|
+
[ "$(docker image inspect -f '{{index .Config.Labels "@@HASH_LABEL@@"}}' "$img" 2>/dev/null)" = "$HASH" ] || fresh=0
|
|
24
|
+
done
|
|
25
|
+
if [ "$fresh" = 1 ]; then
|
|
26
|
+
echo "✅ Golden images are up to date (hash $HASH) - skipping build"
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
echo "🏗️ Building golden layered images (@@COUNT@@ total)..."
|
|
32
|
+
if docker buildx version >/dev/null 2>&1; then
|
|
33
|
+
echo " 🧩 Building all golden targets with one docker buildx bake (independent stages run in parallel)"
|
|
34
|
+
cat > golden-layers.bake.hcl <<HCL
|
|
35
|
+
variable "HASH" {
|
|
36
|
+
default = ""
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
group "default" {
|
|
40
|
+
targets = [@@TARGET_NAMES@@]
|
|
41
|
+
}
|
|
42
|
+
@@BAKE_TARGETS@@
|
|
43
|
+
HCL
|
|
44
|
+
# Buildx 0.19 and later ask for read access outside the bake file's directory; older releases do not know the flag.
|
|
45
|
+
BUILDX_VER="$(docker buildx version 2>/dev/null | sed -n 's/.* v\\([0-9]*\\)\\.\\([0-9]*\\).*/\\1 \\2/p')"
|
|
46
|
+
BUILDX_MAJOR="${BUILDX_VER%% *}"
|
|
47
|
+
BUILDX_MINOR="${BUILDX_VER##* }"
|
|
48
|
+
BAKE_ALLOW=""
|
|
49
|
+
if [ "${BUILDX_MAJOR:-0}" -gt 0 ] || [ "${BUILDX_MINOR:-0}" -ge 19 ]; then BAKE_ALLOW="--allow fs.read=$ROOT"; fi
|
|
50
|
+
HASH="$HASH" docker buildx bake $BAKE_ALLOW -f golden-layers.bake.hcl --load
|
|
51
|
+
else
|
|
52
|
+
echo " ⚠️ docker buildx is not available - building golden targets one at a time"
|
|
53
|
+
@@SERIAL_BUILDS@@
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Untag golden images that older engines built and nothing uses now; an image still in use is left alone.
|
|
57
|
+
for img in @@LEGACY_IMAGES@@; do
|
|
58
|
+
docker image rm "$img" >/dev/null 2>&1 && echo " 🧹 Removed legacy golden image $img"
|
|
59
|
+
done
|
|
60
|
+
|
|
61
|
+
echo "✅ Golden layers built (@@COUNT@@ images):"
|
|
62
|
+
@@SUMMARY@@
|
|
63
|
+
'''
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _sh_quote(text):
|
|
67
|
+
return "'" + text.replace("'", "'\\''") + "'"
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def build_golden_layers(project_root='.'):
|
|
71
|
+
"""
|
|
72
|
+
Build all golden layer images using local_resource.
|
|
73
|
+
Returns the resource name for dependency tracking.
|
|
74
|
+
|
|
75
|
+
project_root: path back to the project root from wherever
|
|
76
|
+
local_resource cmds actually run (the Tiltfile's own directory,
|
|
77
|
+
.tdk/.tdk-out/ - not the project root), e.g. '../../'. GOLDEN_DOCKERFILE
|
|
78
|
+
is itself project-root-relative, so it must be prefixed with this to
|
|
79
|
+
resolve correctly - passing project_root='.' (the default) only works
|
|
80
|
+
when the Tiltfile happens to live at the project root.
|
|
81
|
+
|
|
82
|
+
The build is skipped when every golden image already exists with a
|
|
83
|
+
`tdk.golden.hash` label matching the current Dockerfile. Set
|
|
84
|
+
TDK_GOLDEN_REBUILD=1 to force a rebuild. Otherwise all targets are built
|
|
85
|
+
with one `docker buildx bake`, falling back to serial `docker build` when
|
|
86
|
+
buildx is not installed.
|
|
87
|
+
"""
|
|
88
|
+
resource_name = 'golden-layers-build'
|
|
89
|
+
dockerfile_from_tiltfile = (
|
|
90
|
+
GOLDEN_DOCKERFILE if project_root in (None, '.', '')
|
|
91
|
+
else project_root.rstrip('/') + '/' + GOLDEN_DOCKERFILE
|
|
92
|
+
)
|
|
93
|
+
context = project_root or '.'
|
|
94
|
+
|
|
95
|
+
images = []
|
|
96
|
+
summary = []
|
|
97
|
+
bake_targets = []
|
|
98
|
+
serial_builds = []
|
|
99
|
+
target_names = []
|
|
100
|
+
for key in GOLDEN_LAYERS:
|
|
101
|
+
layer = GOLDEN_LAYERS[key]
|
|
102
|
+
ref = layer['name'] + ':' + layer['tag']
|
|
103
|
+
images.append(ref)
|
|
104
|
+
summary.append('echo " ✓ ' + ref + '"')
|
|
105
|
+
target_names.append('"' + key + '"')
|
|
106
|
+
bake_targets.append('''target "{key}" {{
|
|
107
|
+
dockerfile = "$DF"
|
|
108
|
+
context = "$ROOT"
|
|
109
|
+
target = "{target}"
|
|
110
|
+
tags = ["{ref}"]
|
|
111
|
+
labels = {{
|
|
112
|
+
"{label}" = HASH
|
|
113
|
+
}}
|
|
114
|
+
}}
|
|
115
|
+
'''.format(key=key, target=layer['target'], ref=ref, label=GOLDEN_HASH_LABEL))
|
|
116
|
+
serial_builds.append(
|
|
117
|
+
'docker build --label "{label}=$HASH" -f "$DF" --target {target} -t {ref} "$ROOT" || exit 1'.format(
|
|
118
|
+
label=GOLDEN_HASH_LABEL, target=layer['target'], ref=ref,
|
|
119
|
+
)
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
cmd = (_GOLDEN_BUILD_TEMPLATE
|
|
123
|
+
.replace('@@DF_REL@@', _sh_quote(dockerfile_from_tiltfile))
|
|
124
|
+
.replace('@@ROOT_REL@@', _sh_quote(context))
|
|
125
|
+
.replace('@@IMAGES@@', ' '.join(images))
|
|
126
|
+
.replace('@@LEGACY_IMAGES@@', ' '.join(LEGACY_GOLDEN_IMAGES))
|
|
127
|
+
.replace('@@HASH_LABEL@@', GOLDEN_HASH_LABEL)
|
|
128
|
+
.replace('@@COUNT@@', str(len(images)))
|
|
129
|
+
.replace('@@TARGET_NAMES@@', ', '.join(target_names))
|
|
130
|
+
.replace('@@BAKE_TARGETS@@', '\n'.join(bake_targets))
|
|
131
|
+
.replace('@@SERIAL_BUILDS@@', '\n '.join(serial_builds))
|
|
132
|
+
.replace('@@SUMMARY@@', '\n'.join(summary))
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
local_resource(
|
|
136
|
+
resource_name,
|
|
137
|
+
cmd=cmd,
|
|
138
|
+
labels=['infra.docker', 'golden-layers'],
|
|
139
|
+
deps=[dockerfile_from_tiltfile],
|
|
140
|
+
allow_parallel=True,
|
|
141
|
+
auto_init=True,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
return resource_name
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🏗️ TILT SDK - GOLDEN IMAGE CONSTANTS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
# Load project configuration to get the project name as prefix
|
|
6
|
+
# Falls back to 'tdk-project' if project.json is not found
|
|
7
|
+
# Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
|
|
8
|
+
def _load_golden_prefix():
|
|
9
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
10
|
+
project_json_path = '.tdk/project.json'
|
|
11
|
+
if project_root:
|
|
12
|
+
project_json_path = project_root + '/' + project_json_path
|
|
13
|
+
|
|
14
|
+
if os.path.exists(project_json_path):
|
|
15
|
+
_project_json = read_json(project_json_path)
|
|
16
|
+
return _project_json.get('project', {}).get('name', 'tdk-project')
|
|
17
|
+
return 'tdk-project'
|
|
18
|
+
|
|
19
|
+
_GOLDEN_IMAGE_PREFIX = _load_golden_prefix()
|
|
20
|
+
|
|
21
|
+
GOLDEN_IMAGE_PREFIX = _GOLDEN_IMAGE_PREFIX
|
|
22
|
+
GOLDEN_DOCKERFILE = '.tdk/.tdk-out/golden-layers.Dockerfile'
|
|
23
|
+
|
|
24
|
+
GOLDEN_LAYERS = {
|
|
25
|
+
'l1': {
|
|
26
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l1',
|
|
27
|
+
'tag': 'latest',
|
|
28
|
+
'description': 'OS base + runtime environment',
|
|
29
|
+
'target': 'l1_golden',
|
|
30
|
+
},
|
|
31
|
+
'l2': {
|
|
32
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l2',
|
|
33
|
+
'tag': 'latest',
|
|
34
|
+
'description': 'Dependencies + node_modules',
|
|
35
|
+
'target': 'l2_golden',
|
|
36
|
+
},
|
|
37
|
+
'l3-backend': {
|
|
38
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l3-backend',
|
|
39
|
+
'tag': 'latest',
|
|
40
|
+
'description': 'Backend build tools (Prisma only, Infisical CLI skipped to avoid CDN hangs)',
|
|
41
|
+
'target': 'l3_backend_golden',
|
|
42
|
+
},
|
|
43
|
+
'l3-frontend': {
|
|
44
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l3-frontend',
|
|
45
|
+
'tag': 'latest',
|
|
46
|
+
'description': 'Frontend build tools (no Prisma)',
|
|
47
|
+
'target': 'l3_frontend_golden',
|
|
48
|
+
},
|
|
49
|
+
'l4-backend': {
|
|
50
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l4-backend',
|
|
51
|
+
'tag': 'latest',
|
|
52
|
+
'description': 'Backend production runtime (Bun, no Infisical CLI)',
|
|
53
|
+
'target': 'l4_backend_bun',
|
|
54
|
+
},
|
|
55
|
+
'l4-backend-node': {
|
|
56
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l4-backend-node',
|
|
57
|
+
'tag': 'latest',
|
|
58
|
+
'description': 'Backend production runtime (Node.js - lightweight, no Infisical CLI)',
|
|
59
|
+
'target': 'l4_backend_node',
|
|
60
|
+
},
|
|
61
|
+
'l4-frontend': {
|
|
62
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l4-frontend',
|
|
63
|
+
'tag': 'latest',
|
|
64
|
+
'description': 'Frontend production runtime',
|
|
65
|
+
'target': 'l4_frontend_golden',
|
|
66
|
+
},
|
|
67
|
+
'l4-migrator': {
|
|
68
|
+
'name': GOLDEN_IMAGE_PREFIX + '-l4-migrator',
|
|
69
|
+
'tag': 'latest',
|
|
70
|
+
'description': 'Migrator production runtime (no Infisical CLI - uses env vars)',
|
|
71
|
+
'target': 'l4_migrator_golden',
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# Layers that are no longer built, mapped to the layer that replaced them.
|
|
77
|
+
# l3-migrator installed the same Prisma as l3-backend and produced identical layers.
|
|
78
|
+
LAYER_ALIASES = {
|
|
79
|
+
'l3-migrator': 'l3-backend',
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# Image names older engines built that nothing uses now; the golden build untags them.
|
|
83
|
+
LEGACY_GOLDEN_IMAGES = [
|
|
84
|
+
GOLDEN_IMAGE_PREFIX + '-l3-migrator:latest',
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def get_layer_reference(layer):
|
|
89
|
+
"""Returns the full image reference for a specific layer."""
|
|
90
|
+
layer = LAYER_ALIASES.get(layer, layer)
|
|
91
|
+
if layer not in GOLDEN_LAYERS:
|
|
92
|
+
fail("Invalid layer: " + layer + ". Must be one of: l1, l2, l3, l4")
|
|
93
|
+
|
|
94
|
+
layer_info = GOLDEN_LAYERS[layer]
|
|
95
|
+
return '{name}:{tag}'.format(
|
|
96
|
+
name=layer_info['name'],
|
|
97
|
+
tag=layer_info['tag'],
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
CONSTANTS = {}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🏗️ TILT SDK - GOLDEN IMAGE DOCKERFILE GENERATOR
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
load('../../../tilt/common/utils.star', 'Utils')
|
|
6
|
+
load('../config/healthcheck.star', 'DOCKER_HEALTHCHECK', 'dockerfile_healthcheck_flags')
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# Load project name for dynamic naming
|
|
10
|
+
# Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
|
|
11
|
+
def _load_golden_prefix():
|
|
12
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
13
|
+
project_json_path = '.tdk/project.json'
|
|
14
|
+
if project_root:
|
|
15
|
+
project_json_path = project_root + '/' + project_json_path
|
|
16
|
+
|
|
17
|
+
if os.path.exists(project_json_path):
|
|
18
|
+
_project_json = read_json(project_json_path)
|
|
19
|
+
return _project_json.get('project', {}).get('name', 'tdk-project')
|
|
20
|
+
return 'tdk-project'
|
|
21
|
+
|
|
22
|
+
_GOLDEN_PREFIX = _load_golden_prefix()
|
|
23
|
+
|
|
24
|
+
def generate_golden_dockerfile():
|
|
25
|
+
"""Generate the multi-stage golden-layers.Dockerfile."""
|
|
26
|
+
prefix = _GOLDEN_PREFIX
|
|
27
|
+
header = Utils.get_template_header(
|
|
28
|
+
'dockerfile',
|
|
29
|
+
'GoldenImage.generate_layered_dockerfile()',
|
|
30
|
+
prefix + '-l1-l4',
|
|
31
|
+
'GOLDEN LAYERED IMAGES | L1-L4 Pre-built Layers',
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
return header + """
|
|
35
|
+
# =============================================================================
|
|
36
|
+
# 🏗️ GOLDEN LAYERED IMAGES - Multi-Stage Base Images
|
|
37
|
+
# =============================================================================
|
|
38
|
+
# This Dockerfile builds 8 golden images:
|
|
39
|
+
# - """ + prefix + """-l1:latest - OS base + Bun runtime
|
|
40
|
+
# - """ + prefix + """-l2:latest - Dependencies installed
|
|
41
|
+
# - """ + prefix + """-l3-backend:latest - Backend and migrator build tools (Prisma, no Infisical CLI)
|
|
42
|
+
# - """ + prefix + """-l3-frontend:latest - Frontend build tools (no Prisma)
|
|
43
|
+
# - """ + prefix + """-l4-backend:latest - Backend production runtime (Bun)
|
|
44
|
+
# - """ + prefix + """-l4-backend-node:latest - Backend production runtime (Node.js)
|
|
45
|
+
# - """ + prefix + """-l4-frontend:latest - Frontend production runtime (Nginx)
|
|
46
|
+
# - """ + prefix + """-l4-migrator:latest - Migrator production runtime
|
|
47
|
+
#
|
|
48
|
+
# Migrators build on l3-backend: a separate l3-migrator stage installed the same Prisma
|
|
49
|
+
# and produced identical layers under a second image name.
|
|
50
|
+
#
|
|
51
|
+
# Services use these as base images to skip heavy dependency installation.
|
|
52
|
+
#
|
|
53
|
+
# ⚠️ SKIP_INFISICAL_SETUP Support:
|
|
54
|
+
# All generated Dockerfiles support --build-arg SKIP_INFISICAL_SETUP=1
|
|
55
|
+
# to bypass Infisical CLI installation (avoids Cloudsmith CDN hangs).
|
|
56
|
+
# When SKIP_INFISICAL_SETUP=1, secrets are read from env vars only.
|
|
57
|
+
# See: engine/topologies/platform/docker/layers/l3_builder_layers.star
|
|
58
|
+
# =============================================================================
|
|
59
|
+
|
|
60
|
+
# =============================================================================
|
|
61
|
+
# L1: OS BASE + RUNTIME ENVIRONMENT
|
|
62
|
+
# =============================================================================
|
|
63
|
+
FROM oven/bun:1.3.11-alpine@sha256:7ed9f74c326d1c260abe247ac423ccbf5ac92af62bb442d515d1f92f21e8ea9b AS l1_golden
|
|
64
|
+
|
|
65
|
+
LABEL layer="l1" \
|
|
66
|
+
description="OS base with runtime environment" \
|
|
67
|
+
maintainer="{prefix}"
|
|
68
|
+
|
|
69
|
+
# System dependencies for all services
|
|
70
|
+
RUN apk add --no-cache \
|
|
71
|
+
ca-certificates \
|
|
72
|
+
tzdata \
|
|
73
|
+
curl \
|
|
74
|
+
bash \
|
|
75
|
+
openssl
|
|
76
|
+
|
|
77
|
+
# Create app user/group for security
|
|
78
|
+
RUN addgroup -S app && adduser -S app -G app
|
|
79
|
+
|
|
80
|
+
# Runtime environment
|
|
81
|
+
ENV NODE_ENV=development \
|
|
82
|
+
BUN_INSTALL_CACHE_DIR=/cache/bun
|
|
83
|
+
|
|
84
|
+
WORKDIR /app
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
# =============================================================================
|
|
88
|
+
# L2: DEPENDENCY RESOLVER
|
|
89
|
+
# =============================================================================
|
|
90
|
+
FROM l1_golden AS l2_golden
|
|
91
|
+
|
|
92
|
+
LABEL layer="l2" \
|
|
93
|
+
description="Base with common dependencies installed" \
|
|
94
|
+
maintainer="{prefix}"
|
|
95
|
+
|
|
96
|
+
# Install minimal debugging tools (removed: vim, python3, make, g++ = -67MB)
|
|
97
|
+
RUN apk add --no-cache \
|
|
98
|
+
curl \
|
|
99
|
+
netcat-openbsd \
|
|
100
|
+
jq \
|
|
101
|
+
bind-tools
|
|
102
|
+
|
|
103
|
+
# Pre-create cache directories
|
|
104
|
+
RUN mkdir -p /cache/bun /cache/prisma
|
|
105
|
+
|
|
106
|
+
# Bun is already installed in base image
|
|
107
|
+
RUN echo "Bun version: $(bun --version)"
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# =============================================================================
|
|
111
|
+
# L3-BACKEND: BACKEND BUILD TOOLS (PRISMA)
|
|
112
|
+
# =============================================================================
|
|
113
|
+
FROM l2_golden AS l3_backend_golden
|
|
114
|
+
|
|
115
|
+
LABEL layer="l3-backend" \
|
|
116
|
+
description="Backend build tools with Prisma" \
|
|
117
|
+
maintainer="{prefix}"
|
|
118
|
+
|
|
119
|
+
# Install Prisma CLI globally (pinned for deterministic builds)
|
|
120
|
+
RUN bun add -g prisma@7.5.0 @prisma/client@7.5.0
|
|
121
|
+
|
|
122
|
+
# Verify Prisma installation
|
|
123
|
+
RUN echo "Prisma version: $(bunx prisma --version | head -1)"
|
|
124
|
+
|
|
125
|
+
# ⚠️ CRITICAL: Infisical CLI is NOT installed in golden L3 images
|
|
126
|
+
# Reason: curl to dl.cloudsmith.io hangs during Docker builds when CDN is slow
|
|
127
|
+
# Solution: Use SKIP_INFISICAL_SETUP=1 build arg or runtime env var injection
|
|
128
|
+
# Services read secrets from environment variables at runtime (no CLI needed)
|
|
129
|
+
# See: .tilt/topologies/platform/docker/layers/l3_builder_layers.star
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# =============================================================================
|
|
133
|
+
# L3-FRONTEND: FRONTEND BUILD TOOLS (NO PRISMA)
|
|
134
|
+
# =============================================================================
|
|
135
|
+
FROM l2_golden AS l3_frontend_golden
|
|
136
|
+
|
|
137
|
+
LABEL layer="l3-frontend" \
|
|
138
|
+
description="Frontend build tools without Prisma" \
|
|
139
|
+
maintainer="{prefix}"
|
|
140
|
+
|
|
141
|
+
# Frontend doesn't need Prisma, just verify Bun
|
|
142
|
+
RUN echo "Bun version: $(bun --version)"
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# =============================================================================
|
|
146
|
+
# L4-BACKEND-BUN: BACKEND PRODUCTION RUNTIME (BUN)
|
|
147
|
+
# =============================================================================
|
|
148
|
+
FROM l1_golden AS l4_backend_bun
|
|
149
|
+
|
|
150
|
+
LABEL layer="l4-backend-bun" \
|
|
151
|
+
description="Backend production runtime (Bun)" \
|
|
152
|
+
maintainer="{prefix}"
|
|
153
|
+
|
|
154
|
+
ENV NODE_ENV=production
|
|
155
|
+
# Smaller heap growth and more frequent GC: idle services dominate a 100-service landscape.
|
|
156
|
+
ENV BUN_OPTIONS=--smol
|
|
157
|
+
|
|
158
|
+
# Service-specific tooling (e.g. hugo) is installed per service by the L4 runtime
|
|
159
|
+
# layer when the manifest lists it in featuresEnabled - not here for every backend.
|
|
160
|
+
|
|
161
|
+
# ⚠️ Infisical CLI is NOT installed in golden L4 images
|
|
162
|
+
# Services use TypeScript SDK (fetch API) or read from env vars - no CLI needed
|
|
163
|
+
# The entrypoint.sh gracefully handles missing CLI (falls back to env vars)
|
|
164
|
+
# Build with --build-arg SKIP_INFISICAL_SETUP=1 to skip CLI installation
|
|
165
|
+
|
|
166
|
+
USER bun
|
|
167
|
+
|
|
168
|
+
# Backend-specific healthcheck: probes the service over HTTP. The image is shared by every backend,
|
|
169
|
+
# so the port and path come from the container env (PORT is set by compose, TDK_HEALTH_PATH is optional).
|
|
170
|
+
HEALTHCHECK {hc_flags} \
|
|
171
|
+
CMD bun -e "fetch('http://127.0.0.1:'+process.env.PORT+(process.env.TDK_HEALTH_PATH||'/health')).then(r=>process.exit(r.ok?0:1),()=>process.exit(1))" || exit 1
|
|
172
|
+
|
|
173
|
+
WORKDIR /app
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
# =============================================================================
|
|
177
|
+
# L4-BACKEND-NODE: BACKEND PRODUCTION RUNTIME (NODE.JS - LIGHTWEIGHT!)
|
|
178
|
+
# =============================================================================
|
|
179
|
+
FROM node:22-alpine@sha256:0a7108bf6c7bf5de370ffb1a3ed6be93d405b43ff159f681a8d18c0e2bc2e402 AS l4_backend_node
|
|
180
|
+
|
|
181
|
+
LABEL layer="l4-backend-node" \
|
|
182
|
+
description="Backend production runtime (Node.js - lightweight)" \
|
|
183
|
+
maintainer="{prefix}"
|
|
184
|
+
|
|
185
|
+
ENV NODE_ENV=production
|
|
186
|
+
|
|
187
|
+
# Minimal runtime dependencies
|
|
188
|
+
RUN apk add --no-cache ca-certificates tzdata curl
|
|
189
|
+
|
|
190
|
+
# Create app user for security
|
|
191
|
+
RUN addgroup -S app && adduser -S app -G app
|
|
192
|
+
|
|
193
|
+
# ⚠️ Infisical CLI is NOT installed in golden L4 images
|
|
194
|
+
# Services read secrets from environment variables at runtime
|
|
195
|
+
|
|
196
|
+
USER app
|
|
197
|
+
|
|
198
|
+
# Backend-specific healthcheck: probes the service over HTTP (port and path from container env, see the Bun stage)
|
|
199
|
+
HEALTHCHECK {hc_flags} \
|
|
200
|
+
CMD node -e "fetch('http://127.0.0.1:'+process.env.PORT+(process.env.TDK_HEALTH_PATH||'/health')).then(r=>process.exit(r.ok?0:1),()=>process.exit(1))" || exit 1
|
|
201
|
+
|
|
202
|
+
WORKDIR /app
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
# Alias for backwards compatibility - defaults to Bun (most efficient)
|
|
206
|
+
FROM l4_backend_bun AS l4_backend_golden
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
# =============================================================================
|
|
210
|
+
# L4-FRONTEND: FRONTEND PRODUCTION RUNTIME
|
|
211
|
+
# =============================================================================
|
|
212
|
+
FROM nginx:1.27-alpine@sha256:65645c7bb6a0661892a8b03b89d0743208a18dd2f3f17a54ef4b76fb8e2f2a10 AS l4_frontend_golden
|
|
213
|
+
|
|
214
|
+
LABEL layer="l4-frontend" \
|
|
215
|
+
description="Frontend production runtime with Nginx" \
|
|
216
|
+
maintainer="{prefix}"
|
|
217
|
+
|
|
218
|
+
ENV NODE_ENV=production
|
|
219
|
+
|
|
220
|
+
# Install curl for healthchecks
|
|
221
|
+
RUN apk add --no-cache curl
|
|
222
|
+
|
|
223
|
+
# Frontend-specific healthcheck (checks Nginx)
|
|
224
|
+
HEALTHCHECK {hc_flags_frontend} \
|
|
225
|
+
CMD curl -f http://localhost/ || exit 1
|
|
226
|
+
|
|
227
|
+
WORKDIR /usr/share/nginx/html
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
# =============================================================================
|
|
231
|
+
# L4-MIGRATOR: MIGRATOR PRODUCTION RUNTIME
|
|
232
|
+
# =============================================================================
|
|
233
|
+
FROM l1_golden AS l4_migrator_golden
|
|
234
|
+
|
|
235
|
+
LABEL layer="l4-migrator" \
|
|
236
|
+
description="Migrator runtime with Prisma" \
|
|
237
|
+
maintainer="{prefix}"
|
|
238
|
+
|
|
239
|
+
ENV NODE_ENV=production
|
|
240
|
+
|
|
241
|
+
# Copy global Prisma installation from L3 (l3-backend carries the same pinned Prisma)
|
|
242
|
+
COPY --from=l3_backend_golden /root/.bun/install/global /root/.bun/install/global
|
|
243
|
+
|
|
244
|
+
# ⚠️ Infisical CLI is NOT included in golden L4 images
|
|
245
|
+
# The migrator reads secrets directly from environment variables at runtime
|
|
246
|
+
# (no entrypoint wrapper needed for database migrations)
|
|
247
|
+
# Use --build-arg SKIP_INFISICAL_SETUP=1 to skip CLI installation in derived images
|
|
248
|
+
|
|
249
|
+
# Ensure Bun cache path is writable for non-root runtime healthcheck commands.
|
|
250
|
+
RUN mkdir -p /cache/bun && chown -R bun:bun /cache/bun
|
|
251
|
+
|
|
252
|
+
USER bun
|
|
253
|
+
|
|
254
|
+
# Migrators are one-shot jobs (migrate.sh runs to completion), so no healthcheck.
|
|
255
|
+
# The per-service l4_migrator_runtime stage sets HEALTHCHECK NONE as well.
|
|
256
|
+
HEALTHCHECK NONE
|
|
257
|
+
|
|
258
|
+
WORKDIR /app
|
|
259
|
+
""".format(
|
|
260
|
+
hc_flags=dockerfile_healthcheck_flags(),
|
|
261
|
+
hc_flags_frontend=dockerfile_healthcheck_flags(DOCKER_HEALTHCHECK["frontend_start_period_seconds"]),
|
|
262
|
+
prefix=_GOLDEN_PREFIX,
|
|
263
|
+
)
|