@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,418 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 📋 TILT SDK - MANIFEST LOADING (CEO Review: rename-service-manifest)
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Path: .tilt/topologies/tilt/discovery/manifest/loading.star
|
|
7
|
+
# Purpose: Load, synthesize, and apply defaults to manifests
|
|
8
|
+
#
|
|
9
|
+
# Manifest loading with synthesis-by-default
|
|
10
|
+
# Priority: service.json → synthesize from path
|
|
11
|
+
# =============================================================================
|
|
12
|
+
|
|
13
|
+
load('../../engine/topologies/tilt/manifest/parser.star', 'generated_string_error')
|
|
14
|
+
load('../../engine/topologies/tilt/manifest/constants.star',
|
|
15
|
+
'MANIFEST_DEFAULTS',
|
|
16
|
+
'DEFAULT_SYNCS',
|
|
17
|
+
'MANIFEST_FILENAME',
|
|
18
|
+
'BASE_PORT_FRONTEND',
|
|
19
|
+
'BASE_PORT_BACKEND',
|
|
20
|
+
'HEALTH_CHECK_PATH')
|
|
21
|
+
load('../../engine/topologies/tilt/common/utils.star', 'Utils')
|
|
22
|
+
load('../../engine/topologies/platform/docker/constants.star', 'PlatformDockerConstants')
|
|
23
|
+
|
|
24
|
+
def _check_prisma_folder(resource_path):
|
|
25
|
+
"""
|
|
26
|
+
Check if prisma/ directory exists in resource path (silent).
|
|
27
|
+
Used to auto-detect has_migrator when not in features.
|
|
28
|
+
"""
|
|
29
|
+
check_cmd = "test -d '{path}/prisma' && echo 'yes' || echo 'no'".format(path=resource_path)
|
|
30
|
+
result = str(local(check_cmd, quiet=True, echo_off=True)).strip()
|
|
31
|
+
return result == 'yes'
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def check_prisma_folder(resource_path):
|
|
35
|
+
return _check_prisma_folder(resource_path)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def get_default_syncs_for_type(app_type, features=None):
|
|
39
|
+
"""
|
|
40
|
+
Returns default sync paths based on app type and features.
|
|
41
|
+
"""
|
|
42
|
+
if features == None:
|
|
43
|
+
features = []
|
|
44
|
+
|
|
45
|
+
syncs = list(DEFAULT_SYNCS.get(app_type, [] if app_type == 'bring-your-own' else ['src', 'package.json']))
|
|
46
|
+
|
|
47
|
+
# Add prisma to syncs if using prisma feature
|
|
48
|
+
if app_type == 'backend' and 'prisma' in features and 'prisma' not in syncs:
|
|
49
|
+
syncs.append('prisma')
|
|
50
|
+
|
|
51
|
+
return syncs
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _extract_stack_from_path(resource_path, app_name):
|
|
55
|
+
"""
|
|
56
|
+
Extract stack from resource path or app name.
|
|
57
|
+
|
|
58
|
+
Convention: services/product/{stack}/{resource-name}
|
|
59
|
+
Fallback: First segment of app_name before hyphen
|
|
60
|
+
|
|
61
|
+
Special handling: profile -> identity
|
|
62
|
+
"""
|
|
63
|
+
parts = resource_path.rstrip('/').split('/')
|
|
64
|
+
if len(parts) >= 4 and parts[-4] == 'services' and parts[-3] == 'product':
|
|
65
|
+
stack = parts[-2]
|
|
66
|
+
# Normalize profile to identity
|
|
67
|
+
if stack == 'profile':
|
|
68
|
+
return 'identity'
|
|
69
|
+
return stack
|
|
70
|
+
else:
|
|
71
|
+
return app_name.split('-')[0] if '-' in app_name else app_name
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def load_manifest(resource_path, persist_to_disk=False):
|
|
75
|
+
"""
|
|
76
|
+
Load manifest with synthesis-by-default.
|
|
77
|
+
|
|
78
|
+
Priority order:
|
|
79
|
+
1. service.json (manifest file)
|
|
80
|
+
2. Synthesize from directory structure (synthesis-by-default for standard resources)
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
resource_path: Path to resource directory
|
|
84
|
+
persist_to_disk: If True, sync _internalDeps back to the physical manifest file
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Validated manifest dict with all defaults applied
|
|
88
|
+
"""
|
|
89
|
+
manifest = None
|
|
90
|
+
manifest_source = None
|
|
91
|
+
manifest_path = None
|
|
92
|
+
|
|
93
|
+
# Prepend project root to relative paths for correct resolution
|
|
94
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
95
|
+
if project_root and not resource_path.startswith('/'):
|
|
96
|
+
base_path = project_root + '/' + resource_path
|
|
97
|
+
else:
|
|
98
|
+
base_path = resource_path
|
|
99
|
+
|
|
100
|
+
# Try to load manifest file
|
|
101
|
+
manifest_full_path = base_path + '/' + MANIFEST_FILENAME
|
|
102
|
+
content = read_file(manifest_full_path, default='')
|
|
103
|
+
|
|
104
|
+
if content and str(content).strip():
|
|
105
|
+
manifest = decode_json(content)
|
|
106
|
+
# Refuse service.json values that would add keys to generated config (GHSA-phgf-pww4-7jxc)
|
|
107
|
+
unsafe_field_error = generated_string_error(manifest, manifest_full_path) if type(manifest) == "dict" else None
|
|
108
|
+
if unsafe_field_error:
|
|
109
|
+
fail(unsafe_field_error)
|
|
110
|
+
manifest_source = 'service.json'
|
|
111
|
+
manifest_path = manifest_full_path
|
|
112
|
+
else:
|
|
113
|
+
# Synthesize from directory structure if no manifest found
|
|
114
|
+
manifest = synthesize_manifest_from_path(resource_path)
|
|
115
|
+
manifest_source = 'synthesized'
|
|
116
|
+
manifest_path = resource_path # Virtual path
|
|
117
|
+
|
|
118
|
+
# Validate JSON parsed correctly
|
|
119
|
+
if manifest == None and manifest_source != 'synthesized':
|
|
120
|
+
fail("""
|
|
121
|
+
❌ ═══════════════════════════════════════════════════════════════════
|
|
122
|
+
❌ INVALID JSON IN MANIFEST FILE
|
|
123
|
+
❌ ═══════════════════════════════════════════════════════════════════
|
|
124
|
+
📁 File: {path}
|
|
125
|
+
Source: {source}
|
|
126
|
+
|
|
127
|
+
Common issues:
|
|
128
|
+
• Missing closing quote: "appName": "my-app
|
|
129
|
+
• Trailing comma: "port": 4000,}}
|
|
130
|
+
• Missing comma between properties
|
|
131
|
+
• Single quotes instead of double quotes
|
|
132
|
+
|
|
133
|
+
Fix the JSON syntax and run 'tilt up' again.
|
|
134
|
+
❌ ═══════════════════════════════════════════════════════════════════
|
|
135
|
+
""".format(path=manifest_path, source=manifest_source))
|
|
136
|
+
|
|
137
|
+
# Track manifest source for debugging
|
|
138
|
+
manifest['_manifestSource'] = manifest_source
|
|
139
|
+
manifest['_manifestPath'] = manifest_path
|
|
140
|
+
|
|
141
|
+
# Apply defaults and compute derived values
|
|
142
|
+
validated = apply_manifest_defaults(manifest, resource_path)
|
|
143
|
+
|
|
144
|
+
return validated
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def synthesize_manifest_from_path(resource_path):
|
|
148
|
+
return _synthesize_manifest_from_path(resource_path)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def apply_manifest_defaults(manifest, resource_path):
|
|
152
|
+
return _apply_manifest_defaults(manifest, resource_path)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def _synthesize_manifest_from_path(resource_path):
|
|
156
|
+
"""
|
|
157
|
+
Create a manifest based on directory naming conventions.
|
|
158
|
+
Used when manifest.json doesn't exist (backward compatibility).
|
|
159
|
+
|
|
160
|
+
Convention: services/product/{stack}/{stack}-{component}-{type}
|
|
161
|
+
Example: services/product/{stack}/{app-name}-{type}
|
|
162
|
+
-> appName: {app-name}-{type}
|
|
163
|
+
-> appType: {type}
|
|
164
|
+
-> stack: {stack}
|
|
165
|
+
"""
|
|
166
|
+
parts = resource_path.rstrip('/').split('/')
|
|
167
|
+
dir_name = parts[-1] if parts else 'unknown-service'
|
|
168
|
+
|
|
169
|
+
# Determine appType from directory name suffix
|
|
170
|
+
app_type = 'backend'
|
|
171
|
+
if dir_name.endswith('-frontend'):
|
|
172
|
+
app_type = 'frontend'
|
|
173
|
+
elif dir_name.endswith('-backend'):
|
|
174
|
+
app_type = 'backend'
|
|
175
|
+
elif dir_name.endswith('-migrator'):
|
|
176
|
+
app_type = 'migrator'
|
|
177
|
+
elif dir_name.endswith('-sdk'):
|
|
178
|
+
app_type = 'sdk'
|
|
179
|
+
elif dir_name.endswith('-infra') or dir_name.endswith('-ui'):
|
|
180
|
+
app_type = 'library'
|
|
181
|
+
elif 'lib-' in dir_name or 'platform-' in dir_name:
|
|
182
|
+
app_type = 'library'
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
'appName': dir_name,
|
|
186
|
+
'appType': app_type,
|
|
187
|
+
'_synthesized': True,
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def _apply_manifest_defaults(manifest, resource_path):
|
|
192
|
+
"""
|
|
193
|
+
🎯 SMART DEFAULTS: Expand slim manifest to full config.
|
|
194
|
+
|
|
195
|
+
CEO Review updates (rename-service-manifest):
|
|
196
|
+
- Port is constant per appType (3000 frontend, 4000 backend) — Traefik handles routing
|
|
197
|
+
- Custom dockerfile support via manifest["dockerfile"] field
|
|
198
|
+
- Developer manually provides features (no auto-detection per requirement)
|
|
199
|
+
|
|
200
|
+
Convention over Configuration:
|
|
201
|
+
- features: ["nats", "prisma"] -> usePrisma=True, useNats=True
|
|
202
|
+
- domain: "order" -> databaseName="TDK_order"
|
|
203
|
+
- domain: "order" -> traefik.host="order.backend.{project}.local"
|
|
204
|
+
- domain: "order" -> nats.queueGroup="order_backend_svc"
|
|
205
|
+
"""
|
|
206
|
+
result = dict(manifest)
|
|
207
|
+
|
|
208
|
+
# Normalize resource_path to be relative (strip leading / if present)
|
|
209
|
+
# Docker build context requires relative paths
|
|
210
|
+
if resource_path.startswith('/'):
|
|
211
|
+
resource_path = resource_path[1:]
|
|
212
|
+
|
|
213
|
+
# Track overrides for logging (task 4.8: override detection)
|
|
214
|
+
overrides = []
|
|
215
|
+
app_name = result.get('appName', '')
|
|
216
|
+
|
|
217
|
+
# Apply simple defaults
|
|
218
|
+
for key, default_value in MANIFEST_DEFAULTS.items():
|
|
219
|
+
if key not in result or result[key] == None:
|
|
220
|
+
result[key] = default_value
|
|
221
|
+
|
|
222
|
+
# A bring-your-own service may not speak HTTP, so only an explicit healthCheckPath gives it one. compose.star and
|
|
223
|
+
# l4_runtime_layers.star read a missing path as "no HTTP probe"; the default above would otherwise hide that.
|
|
224
|
+
# (ManifestParser.normalize applies the same rule, but `flisk up` does not load manifests through it.)
|
|
225
|
+
if result.get('appType') == 'bring-your-own' and not manifest.get('healthCheckPath'):
|
|
226
|
+
result.pop('healthCheckPath', None)
|
|
227
|
+
|
|
228
|
+
# 🎯 CEO REVIEW: Traefik-native port strategy
|
|
229
|
+
# Port is constant per appType, not dynamically assigned
|
|
230
|
+
# Traefik routes by hostname (e.g., booking.backend.{project}.local), not port
|
|
231
|
+
app_type = result.get('appType', 'backend')
|
|
232
|
+
|
|
233
|
+
# Set constant port per appType, but preserve explicit service.json ports.
|
|
234
|
+
computed_port = None
|
|
235
|
+
if app_type == 'frontend':
|
|
236
|
+
computed_port = BASE_PORT_FRONTEND
|
|
237
|
+
elif app_type == 'backend':
|
|
238
|
+
computed_port = BASE_PORT_BACKEND
|
|
239
|
+
elif app_type == 'migrator':
|
|
240
|
+
computed_port = 7000 # Migrator uses different range
|
|
241
|
+
|
|
242
|
+
if computed_port != None and ('port' not in manifest or manifest.get('port') == None):
|
|
243
|
+
result['port'] = computed_port
|
|
244
|
+
|
|
245
|
+
# 🎯 CEO REVIEW: Custom dockerfile support
|
|
246
|
+
# Validate custom dockerfile exists if specified
|
|
247
|
+
if 'dockerfile' in result:
|
|
248
|
+
custom_dockerfile = result['dockerfile']
|
|
249
|
+
# With a bring-your-own buildContext the dockerfile is relative to that context.
|
|
250
|
+
build_context = result.get('buildContext')
|
|
251
|
+
if build_context and build_context != '.':
|
|
252
|
+
dockerfile_path = resource_path + '/' + build_context + '/' + custom_dockerfile
|
|
253
|
+
else:
|
|
254
|
+
dockerfile_path = resource_path + '/' + custom_dockerfile
|
|
255
|
+
# BUG FIX: Run check from project root since Tilt may run from .tdk/.tdk-out/
|
|
256
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
257
|
+
if project_root:
|
|
258
|
+
dockerfile_exists = local("cd '{root}' && test -f '{path}' && echo 'yes' || echo 'no'".format(root=project_root, path=dockerfile_path), quiet=True, echo_off=True)
|
|
259
|
+
else:
|
|
260
|
+
dockerfile_exists = local("test -f '{path}' && echo 'yes' || echo 'no'".format(path=dockerfile_path), quiet=True, echo_off=True)
|
|
261
|
+
if str(dockerfile_exists).strip() != 'yes':
|
|
262
|
+
fail("""
|
|
263
|
+
❌ ═══════════════════════════════════════════════════════════════════
|
|
264
|
+
❌ CUSTOM DOCKERFILE NOT FOUND
|
|
265
|
+
❌ ═══════════════════════════════════════════════════════════════════
|
|
266
|
+
📁 Resource: {resource}
|
|
267
|
+
🐳 Dockerfile: {dockerfile}
|
|
268
|
+
|
|
269
|
+
Manifest specifies custom Dockerfile but it doesn't exist.
|
|
270
|
+
Either:
|
|
271
|
+
• Create {dockerfile} in resource directory
|
|
272
|
+
• Remove "dockerfile" field to use auto-generated Dockerfile
|
|
273
|
+
❌ ═══════════════════════════════════════════════════════════════════
|
|
274
|
+
""".format(resource=resource_path.split('/')[-1], dockerfile=custom_dockerfile))
|
|
275
|
+
|
|
276
|
+
# 🎯 FEATURE FLAGS -> BOOLEAN CONFIG
|
|
277
|
+
# NOTE: Developer manually provides features per CEO Review requirement
|
|
278
|
+
# No auto-detection from file existence (e.g., prisma/schema.prisma)
|
|
279
|
+
features = result.get('featuresEnabled', [])
|
|
280
|
+
result['usePrisma'] = 'prisma' in features
|
|
281
|
+
result['useNats'] = 'nats' in features
|
|
282
|
+
result['useTraefik'] = (
|
|
283
|
+
'traefik' in features
|
|
284
|
+
or app_type in ['backend', 'sdk']
|
|
285
|
+
or (app_type == 'bring-your-own' and result.get('exposeViaProxy', True))
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
# Extract stack from path if not set
|
|
289
|
+
if 'stack' not in result:
|
|
290
|
+
result['stack'] = _extract_stack_from_path(resource_path, app_name)
|
|
291
|
+
|
|
292
|
+
stack = result['stack']
|
|
293
|
+
|
|
294
|
+
# 🎯 SMART DATABASE NAME with override detection
|
|
295
|
+
computed_db_name = PlatformDockerConstants.get_db_name(stack)
|
|
296
|
+
if 'databaseName' not in result:
|
|
297
|
+
result['databaseName'] = computed_db_name
|
|
298
|
+
elif result['databaseName'] != computed_db_name:
|
|
299
|
+
overrides.append("databaseName: {} (auto: {})".format(result['databaseName'], computed_db_name))
|
|
300
|
+
|
|
301
|
+
# 🎯 SMART TRAEFIK CONFIG (Convention over Configuration)
|
|
302
|
+
# Apply to backends and SDKs that need Traefik routing
|
|
303
|
+
if result['useTraefik'] and app_type in ['backend', 'sdk', 'bring-your-own']:
|
|
304
|
+
existing_traefik = result.get('traefik', {})
|
|
305
|
+
# Use apiPath from root level if available, otherwise use default pattern
|
|
306
|
+
root_api_path = result.get('apiPath')
|
|
307
|
+
default_path_prefix = root_api_path if root_api_path else '/api/' + stack
|
|
308
|
+
|
|
309
|
+
# A bring-your-own service without healthCheckPath may not serve HTTP, so it gets no default Traefik health path.
|
|
310
|
+
default_health_path = None if app_type == 'bring-your-own' else HEALTH_CHECK_PATH
|
|
311
|
+
computed_traefik = {
|
|
312
|
+
'host': stack + '.backend.' + PlatformDockerConstants.PROJECT_NAME + '.local',
|
|
313
|
+
'pathPrefix': default_path_prefix,
|
|
314
|
+
# Follows healthCheckPath so a manifest that only sets that keeps one
|
|
315
|
+
# path for both probes; `traefik.healthCheck` overrides just Traefik's.
|
|
316
|
+
'healthCheck': result.get('healthCheckPath') or default_health_path,
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
# Check for overrides
|
|
320
|
+
if existing_traefik.get('host') and existing_traefik.get('host') != computed_traefik['host']:
|
|
321
|
+
overrides.append("traefik.host: {} (auto: {})".format(existing_traefik['host'], computed_traefik['host']))
|
|
322
|
+
if existing_traefik.get('pathPrefix') and existing_traefik.get('pathPrefix') != computed_traefik['pathPrefix']:
|
|
323
|
+
overrides.append("traefik.pathPrefix: {} (auto: {})".format(existing_traefik['pathPrefix'], computed_traefik['pathPrefix']))
|
|
324
|
+
|
|
325
|
+
result['traefik'] = {
|
|
326
|
+
'host': existing_traefik.get('host', computed_traefik['host']),
|
|
327
|
+
'pathPrefix': existing_traefik.get('pathPrefix', computed_traefik['pathPrefix']),
|
|
328
|
+
'healthCheck': existing_traefik.get('healthCheck', computed_traefik['healthCheck']),
|
|
329
|
+
}
|
|
330
|
+
if result['traefik']['healthCheck'] == None:
|
|
331
|
+
result['traefik'].pop('healthCheck')
|
|
332
|
+
|
|
333
|
+
# 🎯 SMART NATS CONFIG
|
|
334
|
+
if result['useNats']:
|
|
335
|
+
existing_nats = result.get('nats', {})
|
|
336
|
+
result['nats'] = {
|
|
337
|
+
'queueGroup': existing_nats.get('queueGroup', stack + '_' + app_type + '_svc'),
|
|
338
|
+
'subjects': existing_nats.get('subjects', [stack + '.>']),
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
# Compute backend name for frontends with override detection
|
|
342
|
+
if app_type == 'frontend':
|
|
343
|
+
computed_backend = app_name.replace('-frontend', '-backend')
|
|
344
|
+
if 'backendName' not in result:
|
|
345
|
+
result['backendName'] = computed_backend
|
|
346
|
+
elif result['backendName'] != computed_backend:
|
|
347
|
+
overrides.append("backendName: {} (auto: {})".format(result['backendName'], computed_backend))
|
|
348
|
+
|
|
349
|
+
# 🎯 SMART BASEPATH for frontends (convention: /{appName})
|
|
350
|
+
# Was '/' + stack + 's', which appended a second 's' to an already-plural
|
|
351
|
+
# stack ("operations" -> /operationss) and collided whenever one stack had
|
|
352
|
+
# two frontends. The service name is unique and matches the URL `flisk up`
|
|
353
|
+
# prints, so what the CLI advertises is what Traefik actually serves.
|
|
354
|
+
computed_base_path = '/' + app_name
|
|
355
|
+
if 'basePath' not in result:
|
|
356
|
+
result['basePath'] = computed_base_path
|
|
357
|
+
elif result['basePath'] != computed_base_path:
|
|
358
|
+
overrides.append("basePath: {} (auto: {})".format(result['basePath'], computed_base_path))
|
|
359
|
+
|
|
360
|
+
# 🎯 Always set _servicePath for all manifest types
|
|
361
|
+
result['_servicePath'] = resource_path
|
|
362
|
+
|
|
363
|
+
# 🎯 CENTRALIZED: Use Utils.get_internal_deps() for dependency extraction
|
|
364
|
+
internal_deps = Utils.get_internal_deps(resource_path)
|
|
365
|
+
result['_internalDeps'] = sorted(internal_deps)
|
|
366
|
+
|
|
367
|
+
# 🎯 CENTRALIZED: Use Utils.build_deps_mapping() for path resolution
|
|
368
|
+
result['_internalDepsMapping'] = Utils.build_deps_mapping(resource_path, internal_deps)
|
|
369
|
+
|
|
370
|
+
# 🎯 Log overrides if any were detected and verbose mode is enabled
|
|
371
|
+
if overrides and os.environ.get('TILT_LOG_LEVEL') == 'verbose':
|
|
372
|
+
print("📝 Override(s) detected for {}: {}".format(app_name, ', '.join(overrides)))
|
|
373
|
+
|
|
374
|
+
return result
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def load_related_manifest(frontend_manifest, backend_suffix='-backend'):
|
|
378
|
+
"""
|
|
379
|
+
Load the related backend manifest for a frontend resource.
|
|
380
|
+
|
|
381
|
+
CEO Review update: Supports dual-filename and synthesis-by-default.
|
|
382
|
+
|
|
383
|
+
Args:
|
|
384
|
+
frontend_manifest: The loaded frontend manifest
|
|
385
|
+
backend_suffix: Suffix to replace '-frontend' with
|
|
386
|
+
|
|
387
|
+
Returns:
|
|
388
|
+
Backend manifest dictionary, or None if not found
|
|
389
|
+
"""
|
|
390
|
+
if frontend_manifest.get('appType') != 'frontend':
|
|
391
|
+
return None
|
|
392
|
+
|
|
393
|
+
resource_path = frontend_manifest.get('_servicePath', '')
|
|
394
|
+
backend_path = resource_path.replace('-frontend', backend_suffix)
|
|
395
|
+
|
|
396
|
+
# Use load_manifest which handles dual-filename and synthesis
|
|
397
|
+
return load_manifest(backend_path)
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def get_manifest_filename(resource_path):
|
|
401
|
+
"""
|
|
402
|
+
Determine which manifest filename is being used for a resource.
|
|
403
|
+
|
|
404
|
+
CEO Review addition: Utility for filename detection.
|
|
405
|
+
|
|
406
|
+
Args:
|
|
407
|
+
resource_path: Path to resource directory
|
|
408
|
+
|
|
409
|
+
Returns:
|
|
410
|
+
Filename string or None if neither exists (synthesis will be used)
|
|
411
|
+
"""
|
|
412
|
+
# Check for manifest file (service.json)
|
|
413
|
+
manifest_path = resource_path + '/' + MANIFEST_FILENAME
|
|
414
|
+
if local("test -f '{path}' && echo 'yes' || echo 'no'".format(path=manifest_path), quiet=True, echo_off=True) == 'yes':
|
|
415
|
+
return MANIFEST_FILENAME
|
|
416
|
+
|
|
417
|
+
# Manifest not found - synthesis will be used
|
|
418
|
+
return None
|