@tdk-landscape/tdk-cli-core 1.3.15 → 1.3.22
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/Tiltfile +144 -0
- package/discovery/AGENTS.md +362 -0
- package/discovery/TILT_DISCOVERY.star +424 -0
- package/discovery/Tiltfile +58 -0
- package/discovery/config.star +258 -0
- package/discovery/constants.star +127 -0
- package/discovery/deterministic.star +211 -0
- package/discovery/discovery_daemon.star +191 -0
- package/discovery/discovery_orchestrator.star +460 -0
- package/discovery/filtering.star +5 -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 +213 -0
- package/discovery/indexing.star +7 -0
- package/discovery/json_manifest_scanner.star +51 -0
- package/discovery/libraries.star +46 -0
- package/discovery/loading.star +23 -0
- package/discovery/manifest/constants.star +104 -0
- package/discovery/manifest/loading.star +386 -0
- package/discovery/manifest/normalize.star +281 -0
- package/discovery/manifest/validation.star +108 -0
- package/discovery/normalization.star +11 -0
- package/discovery/registry.star +544 -0
- package/discovery/resource_snapshot.py +382 -0
- package/discovery/resource_snapshot.star +143 -0
- package/discovery/schemas.star +1 -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 +251 -0
- package/discovery/validation.star +78 -0
- package/discovery/versioning.star +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +11 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +1 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +36 -41
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/resource.d.ts.map +1 -1
- package/dist/commands/resource.js +51 -55
- package/dist/commands/resource.js.map +1 -1
- package/dist/commands/stack.d.ts.map +1 -1
- package/dist/commands/stack.js +22 -24
- package/dist/commands/stack.js.map +1 -1
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +1 -2
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +1 -2
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +59 -18
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/generator/extension-fetch.d.ts +19 -0
- package/dist/generator/extension-fetch.d.ts.map +1 -1
- package/dist/generator/extension-fetch.js +71 -5
- package/dist/generator/extension-fetch.js.map +1 -1
- package/dist/generator/template-engine.d.ts +1 -0
- package/dist/generator/template-engine.d.ts.map +1 -1
- package/dist/generator/template-engine.js +50 -6
- package/dist/generator/template-engine.js.map +1 -1
- package/dist/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +7 -9
- package/dist/utils/command-helpers.js.map +1 -1
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +1 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/errors.d.ts +2 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +6 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/project-features.d.ts.map +1 -1
- package/dist/utils/project-features.js +1 -1
- package/dist/utils/project-features.js.map +1 -1
- package/dist/utils/resource-features.d.ts.map +1 -1
- package/dist/utils/resource-features.js +2 -2
- package/dist/utils/resource-features.js.map +1 -1
- package/dist/utils/tar.js +4 -4
- package/dist/utils/tar.js.map +1 -1
- package/dist/utils/validation.d.ts +7 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +9 -0
- package/dist/utils/validation.js.map +1 -1
- package/engine/AGENTS.md +705 -0
- package/engine/README.md +29 -0
- package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
- package/engine/Tiltfile +80 -0
- package/engine/assets/docker/golden-layers.Dockerfile +221 -0
- package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
- package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
- package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
- package/engine/config.star +3 -0
- package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
- package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
- package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
- package/engine/docs/C4-ARCHITECTURE.md +17 -0
- package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
- package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
- package/engine/docs/README.md +284 -0
- package/engine/entrypoint.star +97 -0
- package/engine/lifecycle/orchestrator.star +260 -0
- package/engine/paths.star +717 -0
- package/engine/schemas/manifest-schema.json +301 -0
- package/engine/schemas/service-schema.json +301 -0
- package/engine/scripts/README.md +89 -0
- package/engine/scripts/build-and-publish-lib.sh +205 -0
- package/engine/scripts/check-lib-publish.sh +85 -0
- package/engine/scripts/debug-container.sh +258 -0
- package/engine/scripts/generate-manifest.sh +197 -0
- package/engine/spec.master +702 -0
- package/engine/spec.master.example +341 -0
- package/engine/topologies/README.md +34 -0
- package/engine/topologies/platform/docker/AGENTS.md +59 -0
- package/engine/topologies/platform/docker/auth/auth.star +167 -0
- package/engine/topologies/platform/docker/build/golden_image.star +37 -0
- package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
- package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
- package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
- package/engine/topologies/platform/docker/compose/compose.star +636 -0
- package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
- package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
- package/engine/topologies/platform/docker/config/bunignore.star +142 -0
- package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
- package/engine/topologies/platform/docker/constants.star +170 -0
- package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
- package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
- package/engine/topologies/platform/docker/index.star +27 -0
- package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
- package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
- package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
- package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
- package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
- package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
- package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
- package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
- package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
- package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
- package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
- package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
- package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
- package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
- package/engine/topologies/platform/docker/networking/traefik.star +232 -0
- package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
- package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
- package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
- package/engine/topologies/platform/net/proxy.star +4 -0
- package/engine/topologies/platform/registries/local.star +4 -0
- package/engine/topologies/platform/security/secrets.star +239 -0
- package/engine/topologies/platform/state/relational.star +4 -0
- package/engine/topologies/tilt/common/AGENTS.md +59 -0
- package/engine/topologies/tilt/common/utils.star +364 -0
- package/engine/topologies/tilt/common/utils_debug.star +69 -0
- package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
- package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
- package/engine/topologies/tilt/common/utils_env.star +43 -0
- package/engine/topologies/tilt/common/utils_output.star +97 -0
- package/engine/topologies/tilt/config/AGENTS.md +68 -0
- package/engine/topologies/tilt/config/defaults.star +3 -0
- package/engine/topologies/tilt/config/feature_flags.star +10 -0
- package/engine/topologies/tilt/config/global.star +55 -0
- package/engine/topologies/tilt/config/profiles.star +382 -0
- package/engine/topologies/tilt/generators/agents_md.star +62 -0
- package/engine/topologies/tilt/generators/api_gateway.star +145 -0
- package/engine/topologies/tilt/generators/index.star +124 -0
- package/engine/topologies/tilt/generators/infisical/README.md +424 -0
- package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
- package/engine/topologies/tilt/generators/infisical/index.star +57 -0
- package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
- package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
- package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
- package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
- package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
- package/engine/topologies/tilt/generators/npmrc.star +111 -0
- package/engine/topologies/tilt/generators/tsconfig.star +23 -0
- package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
- package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
- package/engine/topologies/tilt/generators/typescript/common.star +7 -0
- package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
- package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
- package/engine/topologies/tilt/generators/typescript/include.star +23 -0
- package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
- package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
- package/engine/topologies/tilt/generators/validators.star +853 -0
- package/engine/topologies/tilt/generators/vite/backend.star +78 -0
- package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
- package/engine/topologies/tilt/generators/vite/generators.star +43 -0
- package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
- package/engine/topologies/tilt/generators/vite/library.star +65 -0
- package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
- package/engine/topologies/tilt/generators/vite/templates.star +737 -0
- package/engine/topologies/tilt/generators/vite_config.star +22 -0
- package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
- package/engine/topologies/tilt/manifest/README.md +693 -0
- package/engine/topologies/tilt/manifest/__init__.star +218 -0
- package/engine/topologies/tilt/manifest/constants.star +252 -0
- package/engine/topologies/tilt/manifest/errors.star +266 -0
- package/engine/topologies/tilt/manifest/integration.star +339 -0
- package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
- package/engine/topologies/tilt/manifest/loader.star +214 -0
- package/engine/topologies/tilt/manifest/mapper.star +227 -0
- package/engine/topologies/tilt/manifest/parser.star +400 -0
- package/engine/topologies/tilt/manifest/schema.star +462 -0
- package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
- package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
- package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
- package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
- package/engine/topologies/tilt/manifest/validator.star +717 -0
- package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
- package/engine/topologies/tilt/resources/AGENTS.md +71 -0
- package/engine/topologies/tilt/resources/conditions.star +3 -0
- package/engine/topologies/tilt/resources/databases.star +244 -0
- package/engine/topologies/tilt/resources/declaration.star +3 -0
- package/engine/topologies/tilt/resources/deps.star +3 -0
- package/engine/topologies/tilt/resources/infra-loader.star +437 -0
- package/engine/topologies/tilt/resources/libs.star +30 -0
- package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
- package/engine/topologies/tilt/resources/libs_paths.star +79 -0
- package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
- package/engine/topologies/tilt/resources/libs_setup.star +164 -0
- package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
- package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
- package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
- package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
- package/engine/topologies/tilt/resources/orchestrator.star +54 -0
- package/engine/topologies/tilt/resources/ordering.star +3 -0
- package/engine/topologies/tilt/resources/triggers.star +3 -0
- package/engine/topologies/tilt/resources/watchers.star +299 -0
- package/engine/where-things-live.star +717 -0
- package/ext/Tiltfile +66 -0
- package/ext/ide-components/README.md +219 -0
- package/ext/ide-components/code_executor/server.py +268 -0
- package/ext/ide-components/code_viewer/server.py +206 -0
- package/ext/ide-components/config_inspector/server.py +1050 -0
- package/ext/ide-components/file_browser/server.py +285 -0
- package/ext/ide-components/shared/config_service.py +469 -0
- package/ext/ide-components/shared/file_utils.py +298 -0
- package/ext/ide-components/shared/http_utils.py +232 -0
- package/ext/ide-components/shared/static/styles.css +1334 -0
- package/ext/ide-components/shared/syntax_highlighter.py +140 -0
- package/ext/ide-components/shared/template_engine.py +123 -0
- package/ext/ide-components/shared/templates/base.html +121 -0
- package/ext/ide-components/shared/test_config_service.py +326 -0
- package/ext/ide-components/shared/tilt_integration.py +158 -0
- package/ext/ui-enhancements/cron-status-server.sh +49 -0
- package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
- package/ext/ui-enhancements/extension.yaml +36 -0
- package/ext/ui-enhancements/tiltfile.py +99 -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 +13 -9
- package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
- package/specs/specs/TILT_TECH_STACK.star +159 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
# Manifest-Driven Architecture Refactor
|
|
2
|
+
|
|
3
|
+
## 🎯 Problem Statement
|
|
4
|
+
|
|
5
|
+
**User Request**: "I thought the right way is not just running dozens of generators always. I thought manifest will be autoscanned, then based on manifest it should create tilt resource that will trigger 10 generators for that manifest. So I mean tsconfig gen won't be creating 100 of tsconfigs in one function, it's manifest based not function based."
|
|
6
|
+
|
|
7
|
+
### The Issue with Bulk Generation
|
|
8
|
+
|
|
9
|
+
**Before** (`.tilt/provisioner/orchestrator/apply.star` lines 112-251):
|
|
10
|
+
|
|
11
|
+
```starlark
|
|
12
|
+
# ❌ Bulk generation loops - No per-resource granularity
|
|
13
|
+
for resource in resource_config.get('resources', []):
|
|
14
|
+
Vite.for_manifest(...) # Loop 1: ALL vite configs
|
|
15
|
+
|
|
16
|
+
for resource in resource_config.get('resources', []):
|
|
17
|
+
Docker.backend(...) # Loop 2: ALL dockerfiles
|
|
18
|
+
|
|
19
|
+
for resource in resource_config.get('resources', []):
|
|
20
|
+
TSConfig.backend(...) # Loop 3: ALL tsconfigs
|
|
21
|
+
TSConfig.prisma(...)
|
|
22
|
+
|
|
23
|
+
for resource in resource_config.get('resources', []):
|
|
24
|
+
PackageConfig.npmrc(...) # Loop 4: ALL package configs
|
|
25
|
+
PackageConfig.bunfig(...)
|
|
26
|
+
|
|
27
|
+
# Problems:
|
|
28
|
+
# 1. No tracking in Tilt UI (where did this config come from?)
|
|
29
|
+
# 2. Change 1 manifest → regenerate ALL configs (inefficient)
|
|
30
|
+
# 3. No dependency chain (Docker doesn't wait for configs)
|
|
31
|
+
# 4. Can't see which resource is generating what
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## ✅ Solution: Manifest-Driven Resources
|
|
37
|
+
|
|
38
|
+
### Architecture
|
|
39
|
+
|
|
40
|
+
**After** (`.tilt/provisioner/orchestrator/apply.star` lines 114-136):
|
|
41
|
+
|
|
42
|
+
```starlark
|
|
43
|
+
# ✅ Manifest-driven: 1 manifest → 1 Tilt resource → 10 generators
|
|
44
|
+
for resource in resource_config.get('resources', []):
|
|
45
|
+
manifest = Manifest.load_manifest(resource_path)
|
|
46
|
+
|
|
47
|
+
# Create a VISIBLE Tilt resource for this specific manifest
|
|
48
|
+
config_gen_resource = ManifestResource.create_config_resource(
|
|
49
|
+
resource_name,
|
|
50
|
+
resource,
|
|
51
|
+
resource_path,
|
|
52
|
+
manifest,
|
|
53
|
+
backend_manifest,
|
|
54
|
+
ctx
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Result: user-management-backend-config-gen
|
|
58
|
+
# Watches: manifest.json, package.json
|
|
59
|
+
# Generates: tsconfig, vite, dockerfile, npmrc, bunfig, etc.
|
|
60
|
+
# Labels: ['config-gen', resource_name]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### New Module: `manifest_resource.star`
|
|
64
|
+
|
|
65
|
+
**Path**: `.tilt/provisioner/orchestrator/generators/manifest_resource.star`
|
|
66
|
+
|
|
67
|
+
**Exports**:
|
|
68
|
+
- `ManifestResource.create_config_resource()` - Creates per-manifest Tilt resource
|
|
69
|
+
- `ManifestResource.generate_all_configs()` - Generates all 10+ configs for ONE service
|
|
70
|
+
|
|
71
|
+
**Key Function**:
|
|
72
|
+
```starlark
|
|
73
|
+
def create_manifest_config_resource(
|
|
74
|
+
resource_name,
|
|
75
|
+
resource_config,
|
|
76
|
+
resource_path,
|
|
77
|
+
manifest,
|
|
78
|
+
backend_manifest,
|
|
79
|
+
ctx
|
|
80
|
+
):
|
|
81
|
+
"""
|
|
82
|
+
Creates a Tilt local_resource that:
|
|
83
|
+
1. Generates ALL configs for THIS specific manifest
|
|
84
|
+
2. Watches manifest.json and package.json
|
|
85
|
+
3. Shows up in Tilt UI as {resource-name}-config-gen
|
|
86
|
+
4. Becomes a dependency for the Docker build
|
|
87
|
+
"""
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 📊 Visual Comparison
|
|
93
|
+
|
|
94
|
+
### Bulk Generation (Old)
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
Tilt Orchestrator
|
|
98
|
+
│
|
|
99
|
+
├─ Loop 1: Generate ALL vite configs ────────┐
|
|
100
|
+
├─ Loop 2: Generate ALL dockerfiles ─────────┤
|
|
101
|
+
├─ Loop 3: Generate ALL tsconfigs ───────────┤ 300+ configs
|
|
102
|
+
├─ Loop 4: Generate ALL package configs ─────┤ in 10 loops
|
|
103
|
+
└─ ... 6 more loops ─────────────────────────┘
|
|
104
|
+
│
|
|
105
|
+
└─ Docker builds (no explicit dependency on configs)
|
|
106
|
+
|
|
107
|
+
❌ Problems:
|
|
108
|
+
- No visibility (which loop generated which config?)
|
|
109
|
+
- No granularity (can't track per-service)
|
|
110
|
+
- No efficiency (change 1 manifest → regenerate ALL)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Manifest-Driven (New)
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
Tilt Orchestrator
|
|
117
|
+
│
|
|
118
|
+
├─ user-management-backend
|
|
119
|
+
│ ├─ user-management-backend-config-gen (Tilt resource)
|
|
120
|
+
│ │ ├─ Watches: manifest.json, package.json
|
|
121
|
+
│ │ └─ Generates: tsconfig, vite, dockerfile, npmrc, bunfig...
|
|
122
|
+
│ └─ user-management-backend (Docker) [depends on config-gen]
|
|
123
|
+
│
|
|
124
|
+
├─ user-management-frontend
|
|
125
|
+
│ ├─ user-management-frontend-config-gen (Tilt resource)
|
|
126
|
+
│ │ └─ Generates: 10+ configs
|
|
127
|
+
│ └─ user-management-frontend (Docker) [depends on config-gen]
|
|
128
|
+
│
|
|
129
|
+
└─ identity-management-backend
|
|
130
|
+
├─ identity-management-backend-config-gen (Tilt resource)
|
|
131
|
+
│ └─ Generates: 10+ configs
|
|
132
|
+
└─ identity-management-backend (Docker) [depends on config-gen]
|
|
133
|
+
|
|
134
|
+
✅ Benefits:
|
|
135
|
+
- Full visibility (each resource visible in Tilt UI)
|
|
136
|
+
- Perfect granularity (per-manifest tracking)
|
|
137
|
+
- Maximum efficiency (change 1 manifest → regenerate 10 configs for THAT service)
|
|
138
|
+
- Explicit dependencies (Docker waits for config-gen)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 🎨 Tilt UI Example
|
|
144
|
+
|
|
145
|
+
### Before (Bulk)
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
📁 user
|
|
149
|
+
├─ user-management-backend ✅
|
|
150
|
+
└─ user-management-frontend ✅
|
|
151
|
+
|
|
152
|
+
# ❌ Where are the configs? Who generated them?
|
|
153
|
+
# No visibility into config generation process.
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### After (Manifest-Driven)
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
📁 config-gen (new label)
|
|
160
|
+
├─ user-management-backend-config-gen ✅
|
|
161
|
+
├─ user-management-frontend-config-gen ✅
|
|
162
|
+
├─ identity-management-backend-config-gen ✅
|
|
163
|
+
└─ staff-management-backend-config-gen ✅
|
|
164
|
+
|
|
165
|
+
📁 user
|
|
166
|
+
├─ user-management-backend-config-gen ⬆️ (dependency)
|
|
167
|
+
├─ user-management-backend ✅ (depends on config-gen)
|
|
168
|
+
├─ user-management-frontend-config-gen ⬆️ (dependency)
|
|
169
|
+
└─ user-management-frontend ✅ (depends on config-gen)
|
|
170
|
+
|
|
171
|
+
# ✅ Clear hierarchy:
|
|
172
|
+
# manifest → config-gen → Docker build
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## 🔍 Dependency Chain
|
|
178
|
+
|
|
179
|
+
### Resource Dependencies (per manifest)
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
manifest.json ─┐
|
|
183
|
+
package.json ─┼─→ {service}-config-gen ───→ {service} (Docker)
|
|
184
|
+
│ (10+ generators) (depends on configs)
|
|
185
|
+
│
|
|
186
|
+
├─ tsconfig.json (Docker)
|
|
187
|
+
├─ tsconfig.json (local)
|
|
188
|
+
├─ vite.config.ts
|
|
189
|
+
├─ Dockerfile.app.autogenerated
|
|
190
|
+
├─ .dockerignore
|
|
191
|
+
├─ .env.autogenerated
|
|
192
|
+
├─ .npmrc (Docker)
|
|
193
|
+
├─ .npmrc (local)
|
|
194
|
+
├─ bunfig.toml (Docker)
|
|
195
|
+
├─ bunfig.toml (local)
|
|
196
|
+
├─ nginx.conf (if frontend)
|
|
197
|
+
└─ prisma.config.ts (if backend)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Full System Dependency Chain
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
Infrastructure (independent, no runtime dependency between them):
|
|
204
|
+
golden-image (L1-L4, build-cache optimization only)
|
|
205
|
+
postgres (database-management) - Free, on by default
|
|
206
|
+
verdaccio (npm registry) - Premium, requires TDK_LICENSE_KEY
|
|
207
|
+
|
|
208
|
+
Per-Service:
|
|
209
|
+
manifest.json → {service}-config-gen → {service} (Docker)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 📈 Performance & Efficiency
|
|
215
|
+
|
|
216
|
+
### Update Scenario: Change 1 Manifest
|
|
217
|
+
|
|
218
|
+
**Before (Bulk)**:
|
|
219
|
+
```
|
|
220
|
+
Change: services/product/user/user-backend/service.json
|
|
221
|
+
Triggers:
|
|
222
|
+
├─ Regenerate ALL vite configs (30 services)
|
|
223
|
+
├─ Regenerate ALL dockerfiles (30 services)
|
|
224
|
+
├─ Regenerate ALL tsconfigs (30 services)
|
|
225
|
+
└─ Regenerate ALL package configs (30 services)
|
|
226
|
+
|
|
227
|
+
Total: 300+ config files regenerated for 1 change
|
|
228
|
+
Time: ~10 seconds
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**After (Manifest-Driven)**:
|
|
232
|
+
```
|
|
233
|
+
Change: services/product/user/user-backend/service.json
|
|
234
|
+
Triggers:
|
|
235
|
+
└─ user-management-backend-config-gen
|
|
236
|
+
├─ Regenerate tsconfig.json (2 files)
|
|
237
|
+
├─ Regenerate vite.config.ts (1 file)
|
|
238
|
+
├─ Regenerate Dockerfile.app.autogenerated (1 file)
|
|
239
|
+
├─ Regenerate .npmrc (2 files)
|
|
240
|
+
└─ Regenerate bunfig.toml (2 files)
|
|
241
|
+
|
|
242
|
+
Total: 10 config files regenerated for 1 change
|
|
243
|
+
Time: <1 second
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 🧪 Verification
|
|
249
|
+
|
|
250
|
+
### Check Config-Gen Resources Exist
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
cd /workspace/tdk-project
|
|
254
|
+
tilt get uiresources | grep config-gen
|
|
255
|
+
|
|
256
|
+
# Expected output:
|
|
257
|
+
# user-management-backend-config-gen
|
|
258
|
+
# user-management-frontend-config-gen
|
|
259
|
+
# identity-management-backend-config-gen
|
|
260
|
+
# identity-management-frontend-config-gen
|
|
261
|
+
# staff-management-backend-config-gen
|
|
262
|
+
# staff-management-frontend-config-gen
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Check Resource Dependencies
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
tilt describe uiresource user-management-backend | grep "Depends On"
|
|
269
|
+
|
|
270
|
+
# Expected: Should depend on user-management-backend-config-gen
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 📝 Files Changed
|
|
276
|
+
|
|
277
|
+
### New Files
|
|
278
|
+
|
|
279
|
+
1. **`.tilt/provisioner/orchestrator/generators/manifest_resource.star`**
|
|
280
|
+
- 215 lines
|
|
281
|
+
- Exports: `ManifestResource` struct
|
|
282
|
+
- Key functions:
|
|
283
|
+
- `create_config_resource()` - Creates per-manifest Tilt resource
|
|
284
|
+
- `generate_all_configs()` - Generates 10+ configs for one service
|
|
285
|
+
|
|
286
|
+
### Modified Files
|
|
287
|
+
|
|
288
|
+
1. **`.tilt/provisioner/orchestrator/apply.star`**
|
|
289
|
+
- Lines 22: Added `load('./generators/manifest_resource.star', 'ManifestResource')`
|
|
290
|
+
- Lines 91-136: Refactored from bulk loops to per-manifest resources
|
|
291
|
+
- Lines 215-216: Added config-gen resource as dependency
|
|
292
|
+
- **Removed**: Lines 112-251 (bulk generation loops)
|
|
293
|
+
|
|
294
|
+
2. **`.tilt/core/registry/libraries.star`**
|
|
295
|
+
- Line 8: Fixed import to include `PRODUCT_LIBS_FRONTEND`
|
|
296
|
+
|
|
297
|
+
3. **`Tiltfile`**
|
|
298
|
+
- Line 179: Fixed `Vite.generate_for_manifest` → `Vite.for_manifest`
|
|
299
|
+
|
|
300
|
+
4. **`.tilt/C4-ARCHITECTURE.md`**
|
|
301
|
+
- Added: Level 4A section documenting manifest-driven architecture
|
|
302
|
+
- Added: Before/After comparison diagrams
|
|
303
|
+
- Added: Tilt UI visibility examples
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## 🎯 Alignment with User Requirements
|
|
308
|
+
|
|
309
|
+
> "i thought manifest will be autoscanned. then based on manifest it should create tilt resource that will trigger 10 generators for that manifest"
|
|
310
|
+
|
|
311
|
+
✅ **Implemented**: Each manifest creates ONE Tilt resource (`{service}-config-gen`) that triggers ALL 10+ generators
|
|
312
|
+
|
|
313
|
+
> "so i mean tsconfig gen wont be creating 100 of tsconfigs in one function, its manifest based not function based"
|
|
314
|
+
|
|
315
|
+
✅ **Implemented**: `TSConfig.backend()` is called ONCE per manifest (inside `ManifestResource.generate_all_configs()`), not in bulk loops
|
|
316
|
+
|
|
317
|
+
> "you see what i mean??"
|
|
318
|
+
|
|
319
|
+
✅ **Yes!** The architecture is now:
|
|
320
|
+
- **Manifest-based**: 1 manifest → 1 resource → all generators
|
|
321
|
+
- **NOT function-based**: No bulk loops generating 100 configs at once
|
|
322
|
+
- **Granular tracking**: Each service has its own `{service}-config-gen` resource in Tilt UI
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## 🚀 Benefits Achieved
|
|
327
|
+
|
|
328
|
+
1. **Visibility**: Every manifest has a dedicated Tilt resource
|
|
329
|
+
2. **Efficiency**: Change 1 manifest → regenerate 10 configs (not 300)
|
|
330
|
+
3. **Dependency Management**: Docker builds explicitly depend on config-gen
|
|
331
|
+
4. **Developer Experience**: Clear labels and resource names in Tilt UI
|
|
332
|
+
5. **Scalability**: Adding new manifests automatically creates new resources
|
|
333
|
+
6. **Debugging**: Can track which resource generated which config
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## 📚 Next Steps (Optional Enhancements)
|
|
338
|
+
|
|
339
|
+
1. **Parallel Execution**: Config-gen resources can run in parallel (already enabled via `allow_parallel=True`)
|
|
340
|
+
2. **Caching**: Could cache generated configs and skip regeneration if manifest unchanged
|
|
341
|
+
3. **Validation**: Add pre-generation validation (e.g., check manifest schema)
|
|
342
|
+
4. **Metrics**: Track config generation time per resource
|
|
343
|
+
5. **Live Updates**: Could trigger live updates when only specific configs change
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## 🏆 Conclusion
|
|
348
|
+
|
|
349
|
+
The Tilt infrastructure has evolved from **bulk generation** to **manifest-driven resource creation**, achieving:
|
|
350
|
+
|
|
351
|
+
- ✅ Per-resource granularity
|
|
352
|
+
- ✅ Efficient updates (10 configs vs 300)
|
|
353
|
+
- ✅ Clear dependency chains
|
|
354
|
+
- ✅ Full visibility in Tilt UI
|
|
355
|
+
- ✅ Alignment with user's architectural vision
|
|
356
|
+
|
|
357
|
+
The system now follows the **"1 manifest → 1 resource → N generators"** pattern instead of **"N manifests → 1 loop → N×M configs"**.
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# TDK Landscape Tilt SDK
|
|
2
|
+
|
|
3
|
+
## 🏗️ Architecture Overview
|
|
4
|
+
|
|
5
|
+
This SDK provides a **professional, layered architecture** for managing 5000+ lines of Tilt/Starlark configuration code.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
.tilt/
|
|
9
|
+
├── core/ # 🔧 Foundational Layer (Low-level)
|
|
10
|
+
│ ├── utils.star # Shared helpers, I/O, validation
|
|
11
|
+
│ ├── manifest.star # JSON manifest loading & expansion
|
|
12
|
+
│ ├── registry.star # Service definitions (Single Source of Truth)
|
|
13
|
+
│ └── dependency-sync.star # Workspace discovery & package.json sync
|
|
14
|
+
│
|
|
15
|
+
├── providers/ # ⚡ Configuration Generators (Mid-level)
|
|
16
|
+
│ ├── vite.star # Vite configuration generation
|
|
17
|
+
│ ├── typescript/ # TSConfig generation (modular)
|
|
18
|
+
│ │ └── include.star # Entry point
|
|
19
|
+
│ ├── docker/ # Dockerfile / Compose generation (modularized)
|
|
20
|
+
│ └── npmrc.star # .npmrc / bunfig.toml generation
|
|
21
|
+
│
|
|
22
|
+
├── lifecycle/ # 🚀 Service Lifecycle (High-level)
|
|
23
|
+
│ ├── libs.star # Library management & Verdaccio
|
|
24
|
+
│ └── databases.star # Database virtualization (BigTech pattern)
|
|
25
|
+
│
|
|
26
|
+
├── config.star # 🎯 Global Config & Focus Mode
|
|
27
|
+
├── legacy/ # 📦 Legacy modules (backward compatibility)
|
|
28
|
+
└── README.md # 📖 This file
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 🎯 Main Tiltfile Structure
|
|
32
|
+
|
|
33
|
+
```starlark
|
|
34
|
+
# =============================================================================
|
|
35
|
+
# 🎯 TDK Landscape TILT ENTRYPOINT
|
|
36
|
+
# =============================================================================
|
|
37
|
+
|
|
38
|
+
# 1️⃣ LOAD CORE MODULES
|
|
39
|
+
load('./.tilt/core/utils.star', 'Utils')
|
|
40
|
+
load('./.tilt/core/manifest.star', 'Manifest')
|
|
41
|
+
load('./.tilt/core/dependency-sync.star', 'DepSync')
|
|
42
|
+
|
|
43
|
+
# 2️⃣ LOAD CONFIGURATION & SERVICE REGISTRY
|
|
44
|
+
load('./.tilt/config.star', 'Config')
|
|
45
|
+
load('./.tilt/core/registry.star', 'APP_RESOURCES', 'DEFAULTS', ...)
|
|
46
|
+
|
|
47
|
+
# 3️⃣ LOAD PROVIDERS (Generators)
|
|
48
|
+
load('./.tilt/providers/vite.star', 'Vite')
|
|
49
|
+
load('./.tilt/providers/typescript/include.star', 'TSConfig')
|
|
50
|
+
load('./.tilt/providers/docker/index.star', 'Docker')
|
|
51
|
+
load('./.tilt/providers/npmrc.star', 'PackageConfig')
|
|
52
|
+
|
|
53
|
+
# 4️⃣ LOAD LIFECYCLE MODULES
|
|
54
|
+
load('./.tilt/provisioner/libs.star', 'Libs')
|
|
55
|
+
load('./.tilt/provisioner/databases.star', 'Database')
|
|
56
|
+
|
|
57
|
+
# 5️⃣ INITIALIZE INFRASTRUCTURE
|
|
58
|
+
Utils.load_dotenv()
|
|
59
|
+
Utils.validate_infisical_environment()
|
|
60
|
+
|
|
61
|
+
local_resource('init-networks', cmd=Utils.fix_docker_networks(), labels=['infra'])
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 📋 Module Reference
|
|
65
|
+
|
|
66
|
+
### Core Layer (`core/`)
|
|
67
|
+
|
|
68
|
+
#### `utils.star` - Foundational Utilities
|
|
69
|
+
|
|
70
|
+
```starlark
|
|
71
|
+
load('./.tilt/core/utils.star', 'Utils')
|
|
72
|
+
|
|
73
|
+
Utils.get_internal_deps("services/product/user/user-management-backend")
|
|
74
|
+
Utils.resolve_lib_path("@tdk-landscape/eventing")
|
|
75
|
+
Utils.write_file_if_changed("path/to/file.txt", "content")
|
|
76
|
+
Utils.fix_docker_networks()
|
|
77
|
+
Utils.validate_infisical_environment()
|
|
78
|
+
Utils.detect_circular_deps(["path1", "path2"])
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### `manifest.star` - Manifest Loading
|
|
82
|
+
|
|
83
|
+
```starlark
|
|
84
|
+
load('./.tilt/core/manifest.star', 'Manifest')
|
|
85
|
+
|
|
86
|
+
# Load and expand manifest with Smart Defaults
|
|
87
|
+
manifest = Manifest.load_manifest("services/product/user/user-management-backend")
|
|
88
|
+
|
|
89
|
+
# Load related backend for frontend
|
|
90
|
+
backend = Manifest.load_related(frontend_manifest)
|
|
91
|
+
|
|
92
|
+
# Validation
|
|
93
|
+
issues = Manifest.validate(manifest)
|
|
94
|
+
|
|
95
|
+
# Accessors
|
|
96
|
+
port = Manifest.get_port(manifest)
|
|
97
|
+
db_url = Manifest.get_database_url(manifest)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### `dependency-sync.star` - Automatic Configuration Sync
|
|
101
|
+
|
|
102
|
+
```starlark
|
|
103
|
+
load('./.tilt/core/dependency-sync.star', 'DepSync')
|
|
104
|
+
|
|
105
|
+
deps = DepSync.extract_internal_deps("services/product/user/user-management-backend")
|
|
106
|
+
paths = DepSync.generate_tsconfig_paths(deps)
|
|
107
|
+
aliases = DepSync.generate_vite_aliases(deps)
|
|
108
|
+
DepSync.sync_all_configs_for_service("services/product/user/user-management-backend")
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### Provider Layer (`providers/`)
|
|
114
|
+
|
|
115
|
+
#### `vite.star` - Vite Configuration Generation
|
|
116
|
+
|
|
117
|
+
```starlark
|
|
118
|
+
load('./.tilt/providers/vite.star', 'Vite')
|
|
119
|
+
|
|
120
|
+
# Generate for specific type
|
|
121
|
+
Vite.frontend(manifest, backend_manifest, write_fn)
|
|
122
|
+
Vite.backend(manifest, write_fn)
|
|
123
|
+
Vite.library(manifest, write_fn)
|
|
124
|
+
Vite.sdk(manifest, write_fn)
|
|
125
|
+
|
|
126
|
+
# Universal dispatcher (recommended)
|
|
127
|
+
Vite.for_manifest(manifest, backend_manifest, write_fn)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### `typescript/include.star` - TSConfig Generation
|
|
131
|
+
|
|
132
|
+
```starlark
|
|
133
|
+
load('./.tilt/providers/typescript/include.star', 'TSConfig')
|
|
134
|
+
|
|
135
|
+
TSConfig.backend(path, prisma_path, write_fn, internal_deps, is_docker)
|
|
136
|
+
TSConfig.frontend(path, write_fn, internal_deps, is_docker)
|
|
137
|
+
TSConfig.library_backend(path, write_fn, internal_deps)
|
|
138
|
+
TSConfig.library_frontend(path, write_fn, internal_deps)
|
|
139
|
+
TSConfig.prisma(path, resource_name, db_name, write_fn)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
#### `docker/` - Dockerfile & Compose Generation (modularized)
|
|
143
|
+
|
|
144
|
+
```starlark
|
|
145
|
+
load('./.tilt/providers/docker/index.star', 'Docker')
|
|
146
|
+
|
|
147
|
+
Docker.generate_frontend_dockerfile(path, name, target_path, use_nginx)
|
|
148
|
+
Docker.generate_app_dockerfile(path, resource_name, start_command)
|
|
149
|
+
Docker.generate_migrator_dockerfile(path, resource_name)
|
|
150
|
+
Docker.generate_backend_compose_entry(path, resource_name, resource, manifest)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
#### `npmrc.star` - Registry Configuration
|
|
154
|
+
|
|
155
|
+
```starlark
|
|
156
|
+
load('./.tilt/providers/npmrc.star', 'PackageConfig')
|
|
157
|
+
|
|
158
|
+
PackageConfig.generate_npmrc(path, registry_url, is_docker)
|
|
159
|
+
PackageConfig.generate_bunfig(path, registry_url, is_docker)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### Lifecycle Layer (`lifecycle/`)
|
|
165
|
+
|
|
166
|
+
#### `libs.star` - Library Management
|
|
167
|
+
|
|
168
|
+
```starlark
|
|
169
|
+
load('./.tilt/provisioner/libs.star', 'Libs')
|
|
170
|
+
|
|
171
|
+
lib_deps = Libs.discover_resource_libraries(ctx, resource_path)
|
|
172
|
+
Libs.define_library_resource(ctx, lib_name, lib_config, should_enable)
|
|
173
|
+
library_map = Libs.setup_libraries(ctx, should_enable, DDD_LIBS, PLATFORM_LIBS, PRODUCT_LIBS, generators)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### `databases.star` - Database Virtualization
|
|
177
|
+
|
|
178
|
+
```starlark
|
|
179
|
+
load('./.tilt/provisioner/databases.star', 'Database')
|
|
180
|
+
|
|
181
|
+
Database.provision("user") # Creates TDK_user
|
|
182
|
+
url = Database.get_database_url("user")
|
|
183
|
+
Database.status_resource(enabled=True)
|
|
184
|
+
Database.memory_summary()
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### Config Layer (`config.star`)
|
|
190
|
+
|
|
191
|
+
```starlark
|
|
192
|
+
load('./.tilt/config.star', 'Config')
|
|
193
|
+
|
|
194
|
+
# Focus Mode (tilt up -- --focus=user,treatment)
|
|
195
|
+
FOCUS_MODE, FOCUS_ALL, FOCUS_RESOURCES = Config.apply_focus(cfg)
|
|
196
|
+
|
|
197
|
+
# Build context
|
|
198
|
+
ctx = Config.build_context()
|
|
199
|
+
|
|
200
|
+
# Create should_enable wrapper
|
|
201
|
+
should_enable = Config.create_should_enable_wrapper(...)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 🧠 Why This Structure?
|
|
207
|
+
|
|
208
|
+
### 1. **Encapsulation**
|
|
209
|
+
When a developer needs to fix a Vite config bug, they go directly to `.tilt/providers/vite.star` — not search through 5000 lines.
|
|
210
|
+
|
|
211
|
+
### 2. **Prevents Frozen Hash Table**
|
|
212
|
+
Splitting into small files reduces the chance of mutating an object that's already "frozen" by another load.
|
|
213
|
+
|
|
214
|
+
### 3. **Easy Testing**
|
|
215
|
+
You can load only `.tilt/core/utils.star` in a test script without loading heavy Docker logic.
|
|
216
|
+
|
|
217
|
+
### 4. **Scalability**
|
|
218
|
+
Adding a new generator (e.g., for Kubernetes) = create new file in `providers/`.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 📊 File Sizes
|
|
223
|
+
|
|
224
|
+
| Module | Lines | Purpose |
|
|
225
|
+
|--------|-------|---------|
|
|
226
|
+
| `core/utils.star` | ~400 | Shared utilities |
|
|
227
|
+
| `core/manifest.star` | ~350 | Manifest loading |
|
|
228
|
+
| `core/registry.star` | ~500 | Service definitions |
|
|
229
|
+
| `core/dependency-sync.star` | ~350 | Config sync engine |
|
|
230
|
+
| `providers/vite.star` | ~550 | Vite generation |
|
|
231
|
+
| `providers/typescript/` | ~300 | TSConfig generation (modular) |
|
|
232
|
+
| `providers/docker/` | ~500 | Docker generation (modularized) |
|
|
233
|
+
| `providers/npmrc.star` | ~100 | Registry configs |
|
|
234
|
+
| `lifecycle/libs.star` | ~400 | Library management |
|
|
235
|
+
| `lifecycle/databases.star` | ~200 | Database virtualization |
|
|
236
|
+
| `config.star` | ~250 | Global config |
|
|
237
|
+
| **Total** | **~3900** | **Organized vs 5000+ chaotic** |
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 🚀 Usage Patterns
|
|
242
|
+
|
|
243
|
+
### Adding a New Service
|
|
244
|
+
|
|
245
|
+
1. Add to `.tilt/core/registry.star`:
|
|
246
|
+
```starlark
|
|
247
|
+
APP_RESOURCES.append({
|
|
248
|
+
'name': 'my-service',
|
|
249
|
+
'path': 'services/product/my-domain/my-service',
|
|
250
|
+
'labels': ['app.my-domain'],
|
|
251
|
+
'resources': [...],
|
|
252
|
+
})
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
2. Done! Tilt auto-generates everything.
|
|
256
|
+
|
|
257
|
+
### Focus Mode Development
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
tilt up -- --focus=user # Only user + dependencies
|
|
261
|
+
tilt up -- --focus=user,treatment # Multiple services
|
|
262
|
+
tilt up -- --focus=user --no-frontend # Skip frontends
|
|
263
|
+
tilt up -- --focus=user --include-monitoring
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Automatic Dependency Sync
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
bun add @tdk-landscape/eventing # In any service
|
|
270
|
+
# → Tilt watches package.json
|
|
271
|
+
# → TSConfig/Vite auto-regenerate
|
|
272
|
+
# → Service rebuilds
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 🔑 Key Design Principles
|
|
278
|
+
|
|
279
|
+
1. **Single Source of Truth**: All service definitions in `registry.star`
|
|
280
|
+
2. **Convention over Configuration**: Package names map to paths automatically
|
|
281
|
+
3. **Struct-based APIs**: Clean `Vite.frontend()`, `Manifest.load_manifest()` interfaces
|
|
282
|
+
4. **Pure Functions**: No global mutable state (Starlark-safe)
|
|
283
|
+
5. **Layered Architecture**: Core → Providers → Lifecycle → Config
|
|
284
|
+
6. **Backward Compatibility**: Legacy modules in `.tilt/legacy/`
|