@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,90 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 📄 ORCHESTRATOR APPLY - MANIFEST ORCHESTRATION
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
8
|
+
BASE_PORT_FRONTEND = 3000
|
|
9
|
+
BASE_PORT_BACKEND = 4000
|
|
10
|
+
# === END INLINED CONSTANTS ===
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
load('../../../../../discovery/loading.star', 'Manifest')
|
|
14
|
+
load('./generators/manifest_resource.star', 'ManifestResource')
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def prepare_resource_manifests(resource_config, ctx):
|
|
19
|
+
resource_name = resource_config['name']
|
|
20
|
+
resource_manifests = {}
|
|
21
|
+
backend_manifest_cache = {}
|
|
22
|
+
config_gen_resources = {}
|
|
23
|
+
|
|
24
|
+
all_resources = resource_config.get('resources', [])
|
|
25
|
+
|
|
26
|
+
# First pass: load all manifests.
|
|
27
|
+
for resource in resource_config.get('resources', []):
|
|
28
|
+
# Use the resource's _resource_path if available (for services from different scan roots)
|
|
29
|
+
# Otherwise fall back to constructing path from resource_config path + resource name
|
|
30
|
+
resource_path = resource.get('_resource_path', resource_config['path'] + '/' + resource['name'])
|
|
31
|
+
|
|
32
|
+
# Load the manifest from the resource path
|
|
33
|
+
manifest = Manifest.load_manifest(resource_path)
|
|
34
|
+
resource_manifests[resource['name']] = manifest
|
|
35
|
+
|
|
36
|
+
app_name = manifest.get('appName', resource['name'])
|
|
37
|
+
stack = manifest.get('stack', resource_name)
|
|
38
|
+
port = manifest.get('port', BASE_PORT_FRONTEND)
|
|
39
|
+
app_type = manifest.get('appType', 'backend')
|
|
40
|
+
|
|
41
|
+
print(
|
|
42
|
+
" [Tilt] ✅ Loaded: " + app_name
|
|
43
|
+
+ " | Stack: " + stack
|
|
44
|
+
+ " | Port: " + str(port)
|
|
45
|
+
+ " | Type: " + app_type
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
if manifest.get('appType') == 'backend':
|
|
49
|
+
backend_manifest_cache[manifest.get('appName')] = manifest
|
|
50
|
+
|
|
51
|
+
# Second pass: create config generation resources.
|
|
52
|
+
for resource in resource_config.get('resources', []):
|
|
53
|
+
manifest = resource_manifests.get(resource['name'], {})
|
|
54
|
+
app_type = manifest.get('appType', 'backend')
|
|
55
|
+
# infra services (verdaccio, etc.) are loaded by dedicated infra loaders —
|
|
56
|
+
# do not generate golden app Dockerfiles/configs for them.
|
|
57
|
+
if app_type in ['library', 'sdk', 'infra']:
|
|
58
|
+
print(" [Tilt] ⏭ Skipping config-gen for {} (appType={})".format(resource['name'], app_type))
|
|
59
|
+
continue
|
|
60
|
+
|
|
61
|
+
backend_manifest = None
|
|
62
|
+
|
|
63
|
+
if resource.get('frontend', False) or app_type == 'frontend':
|
|
64
|
+
backend_name = manifest.get('backendName', resource['name'].replace('-frontend', '-backend'))
|
|
65
|
+
backend_manifest = backend_manifest_cache.get(backend_name)
|
|
66
|
+
if not backend_manifest:
|
|
67
|
+
backend_manifest = Manifest.load_related(manifest)
|
|
68
|
+
|
|
69
|
+
# Use the resource's actual service path for config generation
|
|
70
|
+
resource_path = resource.get('_resource_path', resource_config['path'] + '/' + resource['name'])
|
|
71
|
+
|
|
72
|
+
config_gen_resource = ManifestResource.create_config_resource(
|
|
73
|
+
resource_name,
|
|
74
|
+
resource,
|
|
75
|
+
resource_path, # Pass correct path instead of resource_config['path']
|
|
76
|
+
manifest,
|
|
77
|
+
backend_manifest,
|
|
78
|
+
ctx,
|
|
79
|
+
)
|
|
80
|
+
config_gen_resources[resource['name']] = config_gen_resource
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
'resource_manifests': resource_manifests,
|
|
84
|
+
'config_gen_resources': config_gen_resources,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
ManifestOrchestration = struct(
|
|
89
|
+
prepare = prepare_resource_manifests,
|
|
90
|
+
)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 🗃️ ORCHESTRATOR APPLY - MIGRATOR ORCHESTRATION
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# BLOCKER FIX #2: Sequential migration execution to prevent race conditions
|
|
7
|
+
# =============================================================================
|
|
8
|
+
|
|
9
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
10
|
+
OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
|
|
11
|
+
# === END INLINED CONSTANTS ===
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
load('../../../platform/docker/index.star', 'Docker')
|
|
15
|
+
|
|
16
|
+
load('../../../platform/docker/generators/golden_docker_generator_v2.star', 'L4_generate_orchestrator')
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _find_backend_resource_path(resource_config):
|
|
20
|
+
resource_path = resource_config.get('path', '')
|
|
21
|
+
if not resource_path:
|
|
22
|
+
return None
|
|
23
|
+
backend_resource_path = None
|
|
24
|
+
|
|
25
|
+
for res in resource_config.get('resources', []):
|
|
26
|
+
if res.get('frontend', False):
|
|
27
|
+
continue
|
|
28
|
+
|
|
29
|
+
candidate = resource_path + '/' + res['name']
|
|
30
|
+
prisma_check = local("test -d " + candidate + "/prisma && echo yes || echo no", quiet=True)
|
|
31
|
+
prisma_check_stdout = getattr(prisma_check, "stdout", prisma_check)
|
|
32
|
+
has_prisma = str(prisma_check_stdout).strip() == 'yes'
|
|
33
|
+
|
|
34
|
+
if has_prisma:
|
|
35
|
+
return candidate
|
|
36
|
+
|
|
37
|
+
if backend_resource_path == None:
|
|
38
|
+
backend_resource_path = candidate
|
|
39
|
+
|
|
40
|
+
return backend_resource_path
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def register_migrators(resource_config, ctx, runtime_flags, compose_project_name):
|
|
44
|
+
should_enable = ctx['should_enable']
|
|
45
|
+
write_file = ctx['write_file']
|
|
46
|
+
resource_name = resource_config.get('name', '')
|
|
47
|
+
resource_path = resource_config.get('path', '')
|
|
48
|
+
|
|
49
|
+
if not resource_name:
|
|
50
|
+
print("⚠️ Skipping migrator registration for service without name")
|
|
51
|
+
return
|
|
52
|
+
|
|
53
|
+
if not resource_path:
|
|
54
|
+
# Silently skip migrator registration for services without paths
|
|
55
|
+
return
|
|
56
|
+
|
|
57
|
+
if not resource_config.get('has_migrator', False):
|
|
58
|
+
return
|
|
59
|
+
if not should_enable('database-management'):
|
|
60
|
+
return
|
|
61
|
+
|
|
62
|
+
backend_resource_path = _find_backend_resource_path(resource_config)
|
|
63
|
+
dockerfile_res_path = backend_resource_path if backend_resource_path else resource_path
|
|
64
|
+
|
|
65
|
+
df_contents = L4_generate_orchestrator(
|
|
66
|
+
dockerfile_res_path,
|
|
67
|
+
res_type='migrator',
|
|
68
|
+
resource_name=resource_name,
|
|
69
|
+
use_nginx=False,
|
|
70
|
+
port=3000,
|
|
71
|
+
target_path='/app/dist',
|
|
72
|
+
build_cmd='echo "No build needed for migrator"',
|
|
73
|
+
cmd='bun run db:migrate',
|
|
74
|
+
use_infisical=False,
|
|
75
|
+
use_shared_libs=True,
|
|
76
|
+
use_prisma=True,
|
|
77
|
+
use_golden=should_enable('golden-image'),
|
|
78
|
+
)
|
|
79
|
+
write_file(dockerfile_res_path + "/" + OUTPUT.AUTOGENERATED_FOLDER + "/Dockerfile.migrator.autogenerated", df_contents)
|
|
80
|
+
|
|
81
|
+
migrator_dockerignore_content = Docker.generate_dockerignore(dockerfile_res_path, 'migrator')
|
|
82
|
+
write_file(
|
|
83
|
+
dockerfile_res_path + "/" + OUTPUT.AUTOGENERATED_FOLDER + "/Dockerfile.migrator.autogenerated.dockerignore",
|
|
84
|
+
migrator_dockerignore_content,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
Docker.migrator_compose(
|
|
88
|
+
resource_path=resource_path,
|
|
89
|
+
resource_name=resource_name,
|
|
90
|
+
dockerfile_path=dockerfile_res_path + '/' + OUTPUT.AUTOGENERATED_FOLDER + '/Dockerfile.migrator.autogenerated',
|
|
91
|
+
write_fn=write_file,
|
|
92
|
+
)
|
|
93
|
+
docker_compose(
|
|
94
|
+
resource_path + '/' + OUTPUT.AUTOGENERATED_FOLDER + '/docker-compose.migrator.autogenerated.yml',
|
|
95
|
+
project_name=compose_project_name,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
migrator_names = resource_config.get('migrator_names', [resource_name + '-db-migrator'])
|
|
99
|
+
for migrator_name in migrator_names:
|
|
100
|
+
# =============================================================================
|
|
101
|
+
# BLOCKER FIX #2: Sequential migration dependencies prevent race conditions
|
|
102
|
+
# =============================================================================
|
|
103
|
+
# Each migrator depends on postgres, its own provisioned DB, golden image,
|
|
104
|
+
# AND the previous migrator to ensure sequential execution
|
|
105
|
+
migrator_db_deps = ['postgres', 'provision-db-' + resource_name]
|
|
106
|
+
if should_enable('golden-image') and ctx.get('golden_image_resource'):
|
|
107
|
+
migrator_db_deps.append(ctx['golden_image_resource'])
|
|
108
|
+
|
|
109
|
+
# Add sequential dependency on previous migrator to prevent parallel execution
|
|
110
|
+
# Use ctx to track sequence (mutable dict passed from caller)
|
|
111
|
+
migrator_index = ctx.setdefault('migrator_sequence', {})
|
|
112
|
+
previous_migrator = _get_previous_migrator(resource_name, migrator_index)
|
|
113
|
+
if previous_migrator:
|
|
114
|
+
migrator_db_deps.append(previous_migrator)
|
|
115
|
+
print("🔗 Sequential migration: " + migrator_name + " will run after " + previous_migrator)
|
|
116
|
+
|
|
117
|
+
dc_resource(
|
|
118
|
+
migrator_name,
|
|
119
|
+
labels=['app.' + resource_name, 'migrator'],
|
|
120
|
+
resource_deps=migrator_db_deps,
|
|
121
|
+
auto_init=runtime_flags['auto_init_migrators'],
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# =============================================================================
|
|
126
|
+
# BLOCKER FIX #2: Migration sequencing tracker
|
|
127
|
+
# =============================================================================
|
|
128
|
+
# Pass migrator sequence via ctx to avoid frozen module-level state
|
|
129
|
+
# The caller initializes ctx['migrator_sequence'] = {} before calling register_migrators
|
|
130
|
+
|
|
131
|
+
def _get_previous_migrator(current_service, migrator_index):
|
|
132
|
+
"""
|
|
133
|
+
Get the previous migrator in sequence for dependency chaining.
|
|
134
|
+
Returns the migrator name that should complete before this one starts.
|
|
135
|
+
"""
|
|
136
|
+
if current_service not in migrator_index:
|
|
137
|
+
migrator_index[current_service] = len(migrator_index)
|
|
138
|
+
|
|
139
|
+
idx = migrator_index[current_service]
|
|
140
|
+
if idx > 0:
|
|
141
|
+
# Find the service with index idx - 1
|
|
142
|
+
for svc, svc_idx in migrator_index.items():
|
|
143
|
+
if svc_idx == idx - 1:
|
|
144
|
+
return svc + '-db-migrator'
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
MigratorOrchestration = struct(
|
|
149
|
+
register = register_migrators,
|
|
150
|
+
)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# ✅ ORCHESTRATOR APPLY - resource VALIDATION
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
load('../../common/utils.star', 'Utils')
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def validate_resource(resource_config):
|
|
11
|
+
resource_name = resource_config['name']
|
|
12
|
+
resource_paths = []
|
|
13
|
+
|
|
14
|
+
for resource in resource_config.get('resources', []):
|
|
15
|
+
resource_paths.append(resource_config['path'] + "/" + resource['name'])
|
|
16
|
+
|
|
17
|
+
circular_deps = Utils.detect_circular_deps(resource_paths)
|
|
18
|
+
if circular_deps:
|
|
19
|
+
error_msg = "🔴 CIRCULAR DEPENDENCY DETECTED IN RESOURCE: " + resource_name + "\n"
|
|
20
|
+
for cycle in circular_deps:
|
|
21
|
+
error_msg += " 🔄 " + ' → '.join(cycle) + "\n"
|
|
22
|
+
fail(error_msg)
|
|
23
|
+
|
|
24
|
+
for resource_path in resource_paths:
|
|
25
|
+
naming_errors = Utils.validate_lib_naming(resource_path)
|
|
26
|
+
if naming_errors:
|
|
27
|
+
# Print warnings but don't fail - allow services to load with missing libs
|
|
28
|
+
print("⚠️ LIBRARY NAMING WARNING in " + resource_name)
|
|
29
|
+
for err in naming_errors:
|
|
30
|
+
print(" ❌ " + err['package'] + ": " + err['error'])
|
|
31
|
+
print(" 📝 Continuing despite missing libraries (this may cause build failures)")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
ResourceValidation = struct(
|
|
35
|
+
validate = validate_resource,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
VALIDATION = {}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 🎛️ ORCHESTRATOR APPLY - RUNTIME FLAGS
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
def _resolve_bool_env(env_name, default_value):
|
|
8
|
+
value = os.environ.get(env_name, '').lower()
|
|
9
|
+
if value in ['1', 'true', 'yes', 'on']:
|
|
10
|
+
return True
|
|
11
|
+
if value in ['0', 'false', 'no', 'off']:
|
|
12
|
+
return False
|
|
13
|
+
return default_value
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def resolve_runtime_flags():
|
|
17
|
+
trigger_mode = os.environ.get('TILT_TRIGGER_MODE', 'auto').lower()
|
|
18
|
+
|
|
19
|
+
# Match trigger mode semantics by default:
|
|
20
|
+
# - auto mode: boot app resources automatically
|
|
21
|
+
# - manual mode: require explicit triggers for app resources
|
|
22
|
+
auto_init_apps = _resolve_bool_env('TILT_AUTO_INIT_APPS', trigger_mode == 'auto')
|
|
23
|
+
auto_init_migrators = _resolve_bool_env('TILT_AUTO_INIT_MIGRATORS', False)
|
|
24
|
+
|
|
25
|
+
# Config generators are lightweight and safe to run on startup by default.
|
|
26
|
+
auto_init_config_gen = _resolve_bool_env('TILT_AUTO_INIT_CONFIG_GEN', True)
|
|
27
|
+
|
|
28
|
+
# In manual mode, avoid hard gating app backends on migrator builds.
|
|
29
|
+
enforce_migrator_deps = _resolve_bool_env('TILT_ENFORCE_MIGRATOR_DEPS', trigger_mode == 'auto')
|
|
30
|
+
|
|
31
|
+
# In manual mode, default to single replica for faster local feedback loops.
|
|
32
|
+
disable_app_replicas = _resolve_bool_env('TILT_DISABLE_APP_REPLICAS', trigger_mode == 'manual')
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
'trigger_mode': trigger_mode,
|
|
36
|
+
'auto_init_apps': auto_init_apps,
|
|
37
|
+
'auto_init_migrators': auto_init_migrators,
|
|
38
|
+
'auto_init_config_gen': auto_init_config_gen,
|
|
39
|
+
'enforce_migrator_deps': enforce_migrator_deps,
|
|
40
|
+
'disable_app_replicas': disable_app_replicas,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
RuntimeFlags = struct(
|
|
45
|
+
resolve = resolve_runtime_flags,
|
|
46
|
+
)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 🧱 TILT SDK - TYPESCRIPT BUILDERS
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Path: .tilt/provisioner/orchestrator/builders/typescript.star
|
|
7
|
+
# Purpose: TypeScript build helpers for orchestrator
|
|
8
|
+
# =============================================================================
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
12
|
+
OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
|
|
13
|
+
DEFAULTS = {}
|
|
14
|
+
|
|
15
|
+
# === END INLINED CONSTANTS ===
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
load('../../../common/utils.star', 'Utils')
|
|
19
|
+
# Import filewatch ignore patterns from master config (replaces hardcoded values)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _with_resource_prefix(pattern, resource_path):
|
|
23
|
+
"""Prefix dockerignore pattern so it applies to the service subtree in root context."""
|
|
24
|
+
normalized = pattern
|
|
25
|
+
if normalized.startswith('/'):
|
|
26
|
+
normalized = normalized[1:]
|
|
27
|
+
|
|
28
|
+
# Patterns in autogenerated dockerignore are service-relative.
|
|
29
|
+
# When context is project root, scope patterns under resource_path.
|
|
30
|
+
return resource_path + '/' + normalized
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_filewatch_ignore_patterns(resource_path):
|
|
34
|
+
"""Return filewatch ignore patterns to prevent fsnotify buffer overflow."""
|
|
35
|
+
return [
|
|
36
|
+
resource_path + "/node_modules",
|
|
37
|
+
resource_path + "/dist",
|
|
38
|
+
resource_path + "/build",
|
|
39
|
+
resource_path + "/.git",
|
|
40
|
+
resource_path + "/.prisma",
|
|
41
|
+
resource_path + "/.turbo",
|
|
42
|
+
resource_path + "/coverage",
|
|
43
|
+
resource_path + "/tmp",
|
|
44
|
+
resource_path + "/temp",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
def _load_autogenerated_dockerignore_patterns(dockerfile_path, resource_path):
|
|
48
|
+
"""
|
|
49
|
+
Read Dockerfile-specific autogenerated dockerignore and convert to Tilt ignore rules.
|
|
50
|
+
Note: Tilt ignore does not support negate patterns ('!'), so those are skipped.
|
|
51
|
+
"""
|
|
52
|
+
dockerignore_path = dockerfile_path + '.dockerignore'
|
|
53
|
+
content = read_file(dockerignore_path, default='')
|
|
54
|
+
|
|
55
|
+
if not content:
|
|
56
|
+
return []
|
|
57
|
+
|
|
58
|
+
ignore_patterns = []
|
|
59
|
+
for raw_line in str(content).split('\n'):
|
|
60
|
+
line = raw_line.strip()
|
|
61
|
+
if not line or line.startswith('#') or line.startswith('!'):
|
|
62
|
+
continue
|
|
63
|
+
ignore_patterns.append(_with_resource_prefix(line, resource_path))
|
|
64
|
+
|
|
65
|
+
return ignore_patterns
|
|
66
|
+
|
|
67
|
+
def _get_resource_only_paths(resource_path):
|
|
68
|
+
"""
|
|
69
|
+
Generate minimal file paths for docker_build 'only' parameter.
|
|
70
|
+
This dramatically reduces build context from 7.4GB to just the necessary files.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
resource_path: Path to service (e.g., 'services/product/{domain}/{service-name}')
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
List of paths to include in build context
|
|
77
|
+
"""
|
|
78
|
+
only_paths = [
|
|
79
|
+
# Root level dependencies
|
|
80
|
+
'bun.lock',
|
|
81
|
+
'bun.lockb',
|
|
82
|
+
'package.json',
|
|
83
|
+
|
|
84
|
+
# Service-specific files
|
|
85
|
+
resource_path,
|
|
86
|
+
|
|
87
|
+
# Shared runtime scripts copied in generated Dockerfiles.
|
|
88
|
+
'shared-platform-engineering/docker-templates',
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
# Include only internal libraries referenced by this service package.json
|
|
92
|
+
# (covers shared-ddd-layers/<lib> too, via resolve_lib_path's 'ddd' root -
|
|
93
|
+
# no Dockerfile ever COPYs a bare shared-ddd-layers/domain or /infrastructure
|
|
94
|
+
# path, so hardcoding those two here was pure dead weight: every one of a
|
|
95
|
+
# large landscape's docker_build resources got its own Tilt watch
|
|
96
|
+
# registration on paths most projects don't even have on disk. At 107
|
|
97
|
+
# resources that's 107 duplicate watchers on the same couple of
|
|
98
|
+
# nonexistent paths - real amplification if anything ever touches them,
|
|
99
|
+
# and a plausible contributor to "fsnotify: queue or buffer overflow" at
|
|
100
|
+
# this scale, on top of being wasted watch overhead regardless).
|
|
101
|
+
# This also prevents unrelated library changes from triggering rebuilds
|
|
102
|
+
# of services that don't use them.
|
|
103
|
+
deps_map = Utils.build_deps_mapping(resource_path)
|
|
104
|
+
for dep_path in deps_map.values():
|
|
105
|
+
if dep_path not in only_paths:
|
|
106
|
+
only_paths.append(dep_path)
|
|
107
|
+
|
|
108
|
+
return only_paths
|
|
109
|
+
|
|
110
|
+
def _build_typescript_service(name, context, dockerfile, live_update_rules, deps, env=None, target='production'):
|
|
111
|
+
"""Build a TypeScript service with Docker.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
name: Resource name
|
|
115
|
+
context: Docker build context
|
|
116
|
+
dockerfile: Path to Dockerfile
|
|
117
|
+
live_update_rules: Live update configuration
|
|
118
|
+
deps: Resource dependencies
|
|
119
|
+
env: Dict of environment variables to pass to container (optional)
|
|
120
|
+
target: Dockerfile target to build (`development` for an opted-in Go service, otherwise `production`)
|
|
121
|
+
"""
|
|
122
|
+
# Extract service path from dockerfile path (e.g., 'services/product/{domain}/{service-name}')
|
|
123
|
+
# The dockerfile parameter looks like: 'services/product/{domain}/{service-name}/autogenerated/Dockerfile.autogenerated'
|
|
124
|
+
resource_path = '/'.join(dockerfile.split('/')[:-1])
|
|
125
|
+
|
|
126
|
+
# Handle both 'autogenerated' (without dot) and '.autogenerated' (with dot)
|
|
127
|
+
# Some services use 'autogenerated', others use '.autogenerated' folder
|
|
128
|
+
autogenerated_folders = ['autogenerated', '.autogenerated']
|
|
129
|
+
for folder in autogenerated_folders:
|
|
130
|
+
suffix = '/' + folder
|
|
131
|
+
if resource_path.endswith(suffix):
|
|
132
|
+
resource_path = resource_path[:-len(suffix)]
|
|
133
|
+
break
|
|
134
|
+
|
|
135
|
+
# Also check OUTPUT.AUTOGENERATED_FOLDER for consistency
|
|
136
|
+
if resource_path.endswith('/' + OUTPUT.AUTOGENERATED_FOLDER):
|
|
137
|
+
resource_path = resource_path[:-(len('/' + OUTPUT.AUTOGENERATED_FOLDER))]
|
|
138
|
+
|
|
139
|
+
ignore_patterns = _load_autogenerated_dockerignore_patterns(dockerfile, resource_path)
|
|
140
|
+
|
|
141
|
+
# CRITICAL FIX: Add filewatch ignore patterns from master config
|
|
142
|
+
# These prevent fsnotify buffer overflow by excluding high-churn directories
|
|
143
|
+
# Previously hardcoded; now imported from TILT_RESOURCE_DEFAULTS.star
|
|
144
|
+
additional_ignores = get_filewatch_ignore_patterns(resource_path)
|
|
145
|
+
|
|
146
|
+
# Merge patterns, avoiding duplicates
|
|
147
|
+
for pattern in additional_ignores:
|
|
148
|
+
if pattern not in ignore_patterns:
|
|
149
|
+
ignore_patterns.append(pattern)
|
|
150
|
+
|
|
151
|
+
only_paths = _get_resource_only_paths(resource_path)
|
|
152
|
+
|
|
153
|
+
# Build context must be the project root (.) so that COPY commands can reference
|
|
154
|
+
# shared-platform-engineering/, shared-ddd-layers/, and services/ directories
|
|
155
|
+
# BUT we use 'only' to dramatically reduce the context size (from 7.4GB to ~100MB)
|
|
156
|
+
docker_build(
|
|
157
|
+
name,
|
|
158
|
+
context,
|
|
159
|
+
dockerfile=dockerfile,
|
|
160
|
+
target=target,
|
|
161
|
+
live_update=live_update_rules,
|
|
162
|
+
only=_get_resource_only_paths(resource_path),
|
|
163
|
+
ignore=ignore_patterns,
|
|
164
|
+
network='host',
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def prebuild_dockerignore(dockerfile, project_root, res_path):
|
|
169
|
+
"""Allowlist .dockerignore matching _build_typescript_service's only=/ignore=.
|
|
170
|
+
|
|
171
|
+
A plain `docker build` has no only= filter, so without this it would send
|
|
172
|
+
the whole project root as context. `res_path` is relative to the project
|
|
173
|
+
root (the build context); `dockerfile` may be absolute.
|
|
174
|
+
"""
|
|
175
|
+
abs_res = project_root + '/' + res_path if project_root else res_path
|
|
176
|
+
lines = ['*']
|
|
177
|
+
for path in _get_resource_only_paths(abs_res):
|
|
178
|
+
lines.append('!' + (res_path if path == abs_res else path))
|
|
179
|
+
ignores = _load_autogenerated_dockerignore_patterns(dockerfile, res_path)
|
|
180
|
+
for pattern in get_filewatch_ignore_patterns(res_path):
|
|
181
|
+
if pattern not in ignores:
|
|
182
|
+
ignores.append(pattern)
|
|
183
|
+
lines.extend(ignores)
|
|
184
|
+
return '\n'.join(lines) + '\n'
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
TypescriptBuilders = struct(
|
|
188
|
+
build_typescript_service = _build_typescript_service,
|
|
189
|
+
load_dockerignore_patterns = _load_autogenerated_dockerignore_patterns,
|
|
190
|
+
prebuild_dockerignore = prebuild_dockerignore,
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
DEBUG = {}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# AGENTS.md - Dependency Resolution Module
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Centralized dependency resolution for Tilt SDK generators. Auto-discovers and injects configuration from internal dependencies.
|
|
6
|
+
|
|
7
|
+
## Key Functions
|
|
8
|
+
|
|
9
|
+
### `resolve_backend_api_path(manifest)`
|
|
10
|
+
Resolves API path from backend manifest when frontend has `backendName`.
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
# Frontend manifest: { "backendName": "identity-management-backend" }
|
|
14
|
+
api_path = resolve_backend_api_path(manifest)
|
|
15
|
+
# Returns: "/api/v1/identity-management" (from backend manifest)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### `resolve_dependency_api_urls(manifest)`
|
|
19
|
+
Resolves all API URLs from `dependsOn`.
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
# Manifest: { "dependsOn": ["identity", "user"] }
|
|
23
|
+
urls = resolve_dependency_api_urls(manifest)
|
|
24
|
+
# Returns: { "identity": "/api/v1/identities", "user": "/api/v1/users" }
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### `get_backend_manifest(manifest)`
|
|
28
|
+
Gets full backend manifest by `backendName`.
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
backend_manifest = get_backend_manifest(manifest)
|
|
32
|
+
# Returns: Full backend manifest dict
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### `inject_dependency_env_vars(manifest, base_env_vars)`
|
|
36
|
+
Auto-injects VITE_*_API_URL environment variables for all dependencies.
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
env_vars = inject_dependency_env_vars(manifest, {"PORT": 3000})
|
|
40
|
+
# Returns: { "PORT": 3000, "VITE_IDENTITY_API_URL": "/api/v1/identities" }
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
load("./dependencies/resolver.star", "resolve_backend_api_path")
|
|
47
|
+
|
|
48
|
+
def generate_something(manifest):
|
|
49
|
+
# Auto-resolve backend API path
|
|
50
|
+
api_path = resolve_backend_api_path(manifest)
|
|
51
|
+
if api_path:
|
|
52
|
+
# Use backend's apiPath
|
|
53
|
+
pass
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Architecture
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
manifest (with backendName)
|
|
60
|
+
↓
|
|
61
|
+
resolve_backend_api_path()
|
|
62
|
+
↓
|
|
63
|
+
registry.get_resource_by_name(backend_name)
|
|
64
|
+
↓
|
|
65
|
+
backend_service.resources[]
|
|
66
|
+
↓
|
|
67
|
+
backend_manifest.apiPath
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Future Extensions
|
|
71
|
+
|
|
72
|
+
- Add caching for resolved dependencies
|
|
73
|
+
- Add version compatibility checking
|
|
74
|
+
- Add circular dependency detection
|
|
75
|
+
- Support multiple backend references
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Copyright (c) 2026 Flisk Landscape contributors
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 🔗 TILT SDK - DEPENDENCY RESOLUTION MODULE
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Purpose: Centralized dependency resolution for generators
|
|
7
|
+
# Auto-discover and inject configuration from internal dependencies
|
|
8
|
+
# =============================================================================
|
|
9
|
+
|
|
10
|
+
load("./resolver.star",
|
|
11
|
+
"resolve_backend_api_path",
|
|
12
|
+
"resolve_dependency_api_urls",
|
|
13
|
+
"get_backend_manifest",
|
|
14
|
+
"inject_dependency_env_vars",
|
|
15
|
+
"DependencyResolvers",
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Re-export all functions for easy access
|
|
19
|
+
resolve_backend_api_path = resolve_backend_api_path
|
|
20
|
+
resolve_dependency_api_urls = resolve_dependency_api_urls
|
|
21
|
+
get_backend_manifest = get_backend_manifest
|
|
22
|
+
inject_dependency_env_vars = inject_dependency_env_vars
|
|
23
|
+
DependencyResolvers = DependencyResolvers
|