@tdk-landscape/tdk-cli-core 1.3.14 → 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/README.md +3 -3
- 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 +62 -21
- 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/paths.js +1 -1
- package/dist/utils/paths.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,284 @@
|
|
|
1
|
+
# TDK Landscape Tilt Architecture - C4 Model
|
|
2
|
+
|
|
3
|
+
## Level 1: System Context
|
|
4
|
+
|
|
5
|
+
```mermaid
|
|
6
|
+
graph TB
|
|
7
|
+
Dev[Developer]
|
|
8
|
+
Tilt[Tilt Orchestrator]
|
|
9
|
+
Docker[Docker/OrbStack]
|
|
10
|
+
Git[Git Repository]
|
|
11
|
+
Services[Microservices<br/>30+ services]
|
|
12
|
+
Infra[Infrastructure<br/>Postgres, NATS, Traefik]
|
|
13
|
+
|
|
14
|
+
Dev -->|tilt up| Tilt
|
|
15
|
+
Tilt -->|watches| Git
|
|
16
|
+
Tilt -->|builds| Docker
|
|
17
|
+
Tilt -->|orchestrates| Services
|
|
18
|
+
Tilt -->|provisions| Infra
|
|
19
|
+
Docker -->|runs| Services
|
|
20
|
+
Docker -->|runs| Infra
|
|
21
|
+
Services -->|uses| Infra
|
|
22
|
+
|
|
23
|
+
style Tilt fill:#f9f,stroke:#333,stroke-width:4px
|
|
24
|
+
style Dev fill:#bbf,stroke:#333,stroke-width:2px
|
|
25
|
+
style Services fill:#bfb,stroke:#333,stroke-width:2px
|
|
26
|
+
style Infra fill:#fbb,stroke:#333,stroke-width:2px
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Purpose**: Tilt automates the entire local development lifecycle - from code changes to running containers.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Level 2: Container Diagram - Tilt SDK Architecture
|
|
34
|
+
|
|
35
|
+
```mermaid
|
|
36
|
+
graph TB
|
|
37
|
+
subgraph "Developer Interface"
|
|
38
|
+
CLI[Tiltfile<br/>Main Entrypoint]
|
|
39
|
+
Focus[Focus Mode<br/>--focus=user]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
subgraph "Core Layer"
|
|
43
|
+
Utils[Utils Module<br/>I/O, validation, helpers]
|
|
44
|
+
Manifest[Manifest Module<br/>JSON loading & validation]
|
|
45
|
+
Registry[Service Registry<br/>APP_RESOURCES definition]
|
|
46
|
+
DepSync[Dependency Sync<br/>package.json → configs]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
subgraph "Provider Layer - Config Generators"
|
|
50
|
+
Docker[Docker Provider<br/>Dockerfile generation]
|
|
51
|
+
TS[TypeScript Provider<br/>tsconfig.json]
|
|
52
|
+
Vite[Vite Provider<br/>vite.config.ts]
|
|
53
|
+
NPM[Package Config<br/>.npmrc, bunfig.toml]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
subgraph "Lifecycle Layer - Orchestration"
|
|
57
|
+
Libs[Library Manager<br/>Shared packages]
|
|
58
|
+
DB[Database Provider<br/>Per-service DBs]
|
|
59
|
+
Orch[Orchestrator<br/>Service coordination]
|
|
60
|
+
Watch[Watchers<br/>File change detection]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
subgraph "Infrastructure"
|
|
64
|
+
Golden[Golden Image Builder<br/>Base Docker images]
|
|
65
|
+
Network[Network Manager<br/>Docker network repair]
|
|
66
|
+
Infisical[Secrets Validator<br/>Infisical integration]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
CLI --> Focus
|
|
70
|
+
CLI --> Utils
|
|
71
|
+
Focus --> Registry
|
|
72
|
+
Utils --> Manifest
|
|
73
|
+
Manifest --> Registry
|
|
74
|
+
Registry --> DepSync
|
|
75
|
+
|
|
76
|
+
DepSync --> Docker
|
|
77
|
+
DepSync --> TS
|
|
78
|
+
DepSync --> Vite
|
|
79
|
+
DepSync --> NPM
|
|
80
|
+
|
|
81
|
+
Docker --> Libs
|
|
82
|
+
TS --> Libs
|
|
83
|
+
Vite --> Libs
|
|
84
|
+
NPM --> Libs
|
|
85
|
+
|
|
86
|
+
Libs --> DB
|
|
87
|
+
DB --> Orch
|
|
88
|
+
Orch --> Watch
|
|
89
|
+
|
|
90
|
+
Orch --> Golden
|
|
91
|
+
Orch --> Network
|
|
92
|
+
Orch --> Infisical
|
|
93
|
+
|
|
94
|
+
style CLI fill:#f9f,stroke:#333,stroke-width:4px
|
|
95
|
+
style Registry fill:#ff9,stroke:#333,stroke-width:3px
|
|
96
|
+
style Docker fill:#9cf,stroke:#333,stroke-width:3px
|
|
97
|
+
style Orch fill:#9f9,stroke:#333,stroke-width:3px
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Level 3: Component Diagram - Docker Build Pipeline
|
|
103
|
+
|
|
104
|
+
```mermaid
|
|
105
|
+
graph LR
|
|
106
|
+
subgraph "Input Detection"
|
|
107
|
+
Manifest[Service Manifest<br/>JSON file]
|
|
108
|
+
PkgJSON[package.json<br/>Dependencies]
|
|
109
|
+
Code[Source Code<br/>src/]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
subgraph "Golden Image System"
|
|
113
|
+
L1Base[L1: OS Base<br/>Alpine + tools]
|
|
114
|
+
L2Deps[L2: Dependencies<br/>Bun + packages]
|
|
115
|
+
L4Runtime[L4: Runtime<br/>Backend/Frontend/Migrator]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
subgraph "Service-Specific Layers"
|
|
119
|
+
L3Build[L3: Build Layer<br/>TypeScript compilation]
|
|
120
|
+
L4Service[L4: Service Runtime<br/>Final container]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
subgraph "Output Artifacts"
|
|
124
|
+
DockerfileApp[Dockerfile.app.autogenerated]
|
|
125
|
+
DockerfileMigrator[Dockerfile.migrator.autogenerated]
|
|
126
|
+
Compose[docker-compose.autogenerated.yml]
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
subgraph "Orchestration"
|
|
130
|
+
TiltResource[Tilt Resource<br/>service-backend]
|
|
131
|
+
DockerBuild[Docker Build<br/>Multi-stage]
|
|
132
|
+
Container[Running Container<br/>Port 4000]
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
Manifest --> L1Base
|
|
136
|
+
PkgJSON --> L2Deps
|
|
137
|
+
Code --> L3Build
|
|
138
|
+
|
|
139
|
+
L1Base --> L2Deps
|
|
140
|
+
L2Deps --> L3Build
|
|
141
|
+
L3Build --> L4Service
|
|
142
|
+
L4Runtime --> L4Service
|
|
143
|
+
|
|
144
|
+
L4Service --> DockerfileApp
|
|
145
|
+
L4Service --> DockerfileMigrator
|
|
146
|
+
DockerfileApp --> Compose
|
|
147
|
+
DockerfileMigrator --> Compose
|
|
148
|
+
|
|
149
|
+
Compose --> TiltResource
|
|
150
|
+
TiltResource --> DockerBuild
|
|
151
|
+
DockerBuild --> Container
|
|
152
|
+
|
|
153
|
+
style L1Base fill:#faa,stroke:#333,stroke-width:2px
|
|
154
|
+
style L2Deps fill:#fca,stroke:#333,stroke-width:2px
|
|
155
|
+
style L3Build fill:#fea,stroke:#333,stroke-width:2px
|
|
156
|
+
style L4Service fill:#afa,stroke:#333,stroke-width:2px
|
|
157
|
+
style Container fill:#9f9,stroke:#333,stroke-width:3px
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Level 4A: Code Flow - Manifest-Driven Resource Creation
|
|
163
|
+
|
|
164
|
+
```mermaid
|
|
165
|
+
sequenceDiagram
|
|
166
|
+
participant Tilt as Tilt Orchestrator
|
|
167
|
+
participant Manifest as service.json
|
|
168
|
+
participant ConfigGen as {service}-config-gen (Tilt Resource)
|
|
169
|
+
participant Generators as 10+ Config Generators
|
|
170
|
+
participant Docker as Docker Build
|
|
171
|
+
|
|
172
|
+
Tilt->>Manifest: 1. Scan & Auto-discover
|
|
173
|
+
Manifest->>ConfigGen: 2. Create per-manifest resource
|
|
174
|
+
Note over ConfigGen: Resource name: user-backend-config-gen<br/>Label: config-gen, user<br/>Deps: manifest.json, package.json
|
|
175
|
+
|
|
176
|
+
ConfigGen->>Generators: 3. Trigger all generators for THIS manifest
|
|
177
|
+
Note over Generators: tsconfig.json (Docker)<br/>tsconfig.json (local)<br/>vite.config.ts<br/>Dockerfile.app.autogenerated<br/>.dockerignore<br/>.env.autogenerated<br/>.npmrc (Docker)<br/>.npmrc (local)<br/>bunfig.toml (Docker)<br/>bunfig.toml (local)<br/>nginx.conf (if frontend)<br/>prisma.config.ts (if backend)
|
|
178
|
+
|
|
179
|
+
Generators-->>ConfigGen: 4. Configs generated
|
|
180
|
+
ConfigGen->>Docker: 5. Trigger Docker build (depends on config-gen)
|
|
181
|
+
Docker-->>Tilt: 6. Service running
|
|
182
|
+
|
|
183
|
+
Note over Manifest,Docker: ✅ Manifest-driven: 1 manifest → 1 resource → 10 generators<br/>❌ NOT bulk: 100 manifests → 1 loop → 1000 configs
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Architecture Evolution
|
|
187
|
+
|
|
188
|
+
**Before (Bulk Generation)** - Lines 112-251 of apply.star:
|
|
189
|
+
```starlark
|
|
190
|
+
for resource in ALL_RESOURCES: # 30 services
|
|
191
|
+
generate_vite(resource) # Loop 1
|
|
192
|
+
for resource in ALL_RESOURCES:
|
|
193
|
+
generate_dockerfile(resource) # Loop 2
|
|
194
|
+
for resource in ALL_RESOURCES:
|
|
195
|
+
generate_tsconfig(resource) # Loop 3
|
|
196
|
+
# ... 7 more loops
|
|
197
|
+
|
|
198
|
+
# ❌ Problems:
|
|
199
|
+
# - No per-resource tracking in Tilt UI
|
|
200
|
+
# - Change 1 manifest → regenerate ALL configs
|
|
201
|
+
# - Can't see which config belongs to which service
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**After (Manifest-Driven)** - Lines 114-136 of apply.star:
|
|
205
|
+
```starlark
|
|
206
|
+
for resource in resource_resources:
|
|
207
|
+
manifest = load_manifest(resource)
|
|
208
|
+
|
|
209
|
+
# Create ONE Tilt resource that generates ALL configs for THIS service
|
|
210
|
+
config_gen_resource = ManifestResource.create_config_resource(
|
|
211
|
+
resource_name, resource, manifest, backend_manifest, ctx
|
|
212
|
+
)
|
|
213
|
+
# Result: user-management-backend-config-gen (visible in Tilt UI)
|
|
214
|
+
|
|
215
|
+
# ✅ Benefits:
|
|
216
|
+
# - 30 granular Tilt resources (one per service)
|
|
217
|
+
# - Change 1 manifest → regenerate 10 configs for THAT service only
|
|
218
|
+
# - Clear dependency: Docker build depends on config-gen resource
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Tilt UI Visibility
|
|
222
|
+
|
|
223
|
+
In Tilt dashboard you now see per-manifest resources:
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
📁 config-gen (label)
|
|
227
|
+
├─ user-management-backend-config-gen ✅
|
|
228
|
+
├─ user-management-frontend-config-gen ✅
|
|
229
|
+
├─ identity-management-backend-config-gen ✅
|
|
230
|
+
├─ identity-management-frontend-config-gen ✅
|
|
231
|
+
└─ staff-management-backend-config-gen ✅
|
|
232
|
+
|
|
233
|
+
📁 user (label)
|
|
234
|
+
├─ user-management-backend-config-gen ⬆️ (dependency)
|
|
235
|
+
├─ user-management-backend ✅ (depends on config-gen)
|
|
236
|
+
├─ user-management-frontend-config-gen ⬆️ (dependency)
|
|
237
|
+
└─ user-management-frontend ✅ (depends on config-gen)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Dependency Chain
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
manifest.json ─┐
|
|
244
|
+
package.json ─┼─→ {service}-config-gen ───→ {service} (Docker)
|
|
245
|
+
│ (10+ generators) (depends on configs)
|
|
246
|
+
│
|
|
247
|
+
Infrastructure ─┘
|
|
248
|
+
golden-image (L1-L4 build cache, not a runtime dep) │ postgres (Free) │
|
|
249
|
+
verdaccio (Premium, requires TDK_LICENSE_KEY) - each independent,
|
|
250
|
+
gated by should_enable(), see infra-loader.star
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Level 4B: Code Flow - Dependency Synchronization
|
|
256
|
+
|
|
257
|
+
```mermaid
|
|
258
|
+
sequenceDiagram
|
|
259
|
+
participant Dev as Developer
|
|
260
|
+
participant File as package.json
|
|
261
|
+
participant Tilt as Tilt Watcher
|
|
262
|
+
participant DepSync as Dependency Sync
|
|
263
|
+
participant TS as TSConfig Generator
|
|
264
|
+
participant Vite as Vite Generator
|
|
265
|
+
participant Docker as Docker Generator
|
|
266
|
+
participant Service as Service Container
|
|
267
|
+
|
|
268
|
+
Dev->>File: bun add @tdk-landscape/eventing
|
|
269
|
+
File->>Tilt: File change detected
|
|
270
|
+
Tilt->>DepSync: Trigger sync
|
|
271
|
+
DepSync->>DepSync: Extract internal deps
|
|
272
|
+
DepSync->>DepSync: Resolve library paths
|
|
273
|
+
DepSync->>TS: Generate tsconfig.json paths
|
|
274
|
+
DepSync->>Vite: Generate vite.config.ts aliases
|
|
275
|
+
DepSync->>Docker: Update COPY statements
|
|
276
|
+
Docker->>Docker: Regenerate Dockerfile
|
|
277
|
+
Docker->>Service: Rebuild container
|
|
278
|
+
Service-->>Dev: Service restarted with new dependency
|
|
279
|
+
|
|
280
|
+
Note over DepSync,Docker: Convention over Configuration:<br/>@tdk-landscape/platform-x → platform/packages/platform-x/src
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# TDK Landscape Tilt Architecture - C4 Model
|
|
2
|
+
|
|
3
|
+
This document was split to keep each file focused and maintainable.
|
|
4
|
+
|
|
5
|
+
## Architecture Docs Index
|
|
6
|
+
|
|
7
|
+
- [C4 Overview (Context, Containers, Components, Core Flows)](./C4-ARCHITECTURE-overview.md)
|
|
8
|
+
- [C4 Operations (Detailed Breakdown, Principles, Performance, Boundaries)](./C4-ARCHITECTURE-operations.md)
|
|
9
|
+
|
|
10
|
+
## Why split
|
|
11
|
+
|
|
12
|
+
- The original file had grown to 678 lines and mixed conceptual and operational concerns.
|
|
13
|
+
- Splitting improves navigation and reduces merge conflicts when updating documentation.
|
|
14
|
+
|
|
15
|
+
## Backward compatibility
|
|
16
|
+
|
|
17
|
+
- Existing links to `C4-ARCHITECTURE.md` still work and now point to this index.
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
# Golden Image Integration Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The TDK Landscape monorepo now includes a **Golden Image** workflow that significantly reduces service build times from 60+ seconds to **<5 seconds** by pre-building heavy dependencies into a base Docker image.
|
|
6
|
+
|
|
7
|
+
## Architecture Integration
|
|
8
|
+
|
|
9
|
+
### 1. Provider Layer (`.tilt/providers/docker/`)
|
|
10
|
+
|
|
11
|
+
**File**: `.tilt/providers/docker/golden-image.star`
|
|
12
|
+
|
|
13
|
+
The golden image provider follows the established Tilt SDK pattern:
|
|
14
|
+
|
|
15
|
+
```starlark
|
|
16
|
+
GoldenImage = struct(
|
|
17
|
+
build = _build_golden_image, # Builds the base image
|
|
18
|
+
check_exists = _check_golden_image_exists, # Validates existence
|
|
19
|
+
get_reference = _get_golden_image_reference, # Returns image name
|
|
20
|
+
generate_dockerfile = _generate_golden_dockerfile # Generates Dockerfile
|
|
21
|
+
)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Exported via**: `.tilt/providers/docker/index.star`
|
|
25
|
+
```starlark
|
|
26
|
+
Docker = struct(
|
|
27
|
+
# ... existing functions
|
|
28
|
+
golden_image = GoldenImage,
|
|
29
|
+
)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Infrastructure Layer (`.tilt/provisioner/infra-loader.star`)
|
|
33
|
+
|
|
34
|
+
The golden image is treated as **infrastructure**, building before application services:
|
|
35
|
+
|
|
36
|
+
```starlark
|
|
37
|
+
def load_all_infrastructure(should_enable, fix_docker_networks_fn, docker_provider, write_file_fn):
|
|
38
|
+
# Initialize networks first
|
|
39
|
+
_init_networks(fix_docker_networks_fn)
|
|
40
|
+
|
|
41
|
+
# Build golden image before other infrastructure
|
|
42
|
+
_generate_golden_dockerfile(should_enable, docker_provider, write_file_fn)
|
|
43
|
+
golden_image_resource = _load_golden_image(should_enable, docker_provider)
|
|
44
|
+
|
|
45
|
+
# Load other infrastructure (database, verdaccio, etc.)
|
|
46
|
+
...
|
|
47
|
+
|
|
48
|
+
return golden_image_resource
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Key Functions**:
|
|
52
|
+
- `_load_golden_image()` - Creates `local_resource` for building the image
|
|
53
|
+
- `_generate_golden_dockerfile()` - Auto-generates `docker/golden.Dockerfile` if missing
|
|
54
|
+
|
|
55
|
+
### 3. Orchestrator Integration (`.tilt/provisioner/orchestrator/apply.star`)
|
|
56
|
+
|
|
57
|
+
Services automatically depend on the golden image:
|
|
58
|
+
|
|
59
|
+
```starlark
|
|
60
|
+
# Infrastructure dependencies
|
|
61
|
+
infra_deps = []
|
|
62
|
+
if should_enable('database-management'):
|
|
63
|
+
infra_deps.extend(['postgres', 'provision-db-' + s_name])
|
|
64
|
+
if should_enable('verdaccio'):
|
|
65
|
+
infra_deps.append('verdaccio')
|
|
66
|
+
if should_enable('golden-image') and ctx.get('golden_image_resource'):
|
|
67
|
+
infra_deps.append(ctx['golden_image_resource']) # ← Added
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This ensures the golden image builds before any service Dockerfiles are processed.
|
|
71
|
+
|
|
72
|
+
### 4. Layer Generator Updates (`.tilt/providers/docker/layers/l1_base_layers.star`)
|
|
73
|
+
|
|
74
|
+
The L1 base layer now intelligently uses the golden image:
|
|
75
|
+
|
|
76
|
+
```starlark
|
|
77
|
+
GOLDEN_IMAGE = "TDK Landscape-base:latest"
|
|
78
|
+
|
|
79
|
+
def L1_generate_os_base(base_image = None, maintainer = "TDK Landscape", use_golden = True):
|
|
80
|
+
if base_image == None:
|
|
81
|
+
base_image = GOLDEN_IMAGE if use_golden else ALPINE_BASE
|
|
82
|
+
|
|
83
|
+
# If using golden image, skip dependency installation
|
|
84
|
+
if base_image == GOLDEN_IMAGE or "TDK Landscape-base" in base_image:
|
|
85
|
+
return (
|
|
86
|
+
"FROM " + base_image + " AS l1_os_base\n"
|
|
87
|
+
+ "# Dependencies pre-installed in golden image\n"
|
|
88
|
+
+ "WORKDIR /app\n"
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Standard base with full dependency installation
|
|
92
|
+
...
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 5. Configuration (`.tilt/core/registry/config.star`)
|
|
96
|
+
|
|
97
|
+
Golden image is **enabled by default**. Verdaccio is Premium and off by
|
|
98
|
+
default - it requires TDK_LICENSE_KEY (see project-features.ts):
|
|
99
|
+
|
|
100
|
+
```starlark
|
|
101
|
+
DEFAULTS = {
|
|
102
|
+
# Infrastructure defaults
|
|
103
|
+
'database-management': True,
|
|
104
|
+
'proxy': True,
|
|
105
|
+
'verdaccio': False, # Premium - requires TDK_LICENSE_KEY
|
|
106
|
+
'golden-image': True, # ← Added
|
|
107
|
+
...
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 6. Tiltfile Integration
|
|
112
|
+
|
|
113
|
+
The main Tiltfile passes required context:
|
|
114
|
+
|
|
115
|
+
```starlark
|
|
116
|
+
# Infrastructure loading with golden image support
|
|
117
|
+
GOLDEN_IMAGE_RESOURCE = Infra.load_all(
|
|
118
|
+
should_enable,
|
|
119
|
+
Utils.fix_docker_networks,
|
|
120
|
+
Docker, # ← Docker provider
|
|
121
|
+
Utils.write_file_if_changed # ← File writer
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Store in context for orchestrator
|
|
125
|
+
if GOLDEN_IMAGE_RESOURCE:
|
|
126
|
+
TILT_CONTEXT['golden_image_resource'] = GOLDEN_IMAGE_RESOURCE
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Resource Dependencies Graph
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
init-networks
|
|
133
|
+
↓
|
|
134
|
+
golden-image-build (local_resource)
|
|
135
|
+
↓
|
|
136
|
+
database, verdaccio, ... (infrastructure)
|
|
137
|
+
↓
|
|
138
|
+
service-backend-1, service-backend-2, ... (applications)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## How It Works
|
|
142
|
+
|
|
143
|
+
### Build Process
|
|
144
|
+
|
|
145
|
+
1. **Tilt Startup**:
|
|
146
|
+
- `Infra.load_all()` is called
|
|
147
|
+
- `_generate_golden_dockerfile()` creates `docker/golden.Dockerfile` if missing
|
|
148
|
+
- `_load_golden_image()` registers a `local_resource` named `golden-image-build`
|
|
149
|
+
|
|
150
|
+
2. **Golden Image Build**:
|
|
151
|
+
- Resource: `golden-image-build`
|
|
152
|
+
- Labels: `['infra.docker', 'golden-image']`
|
|
153
|
+
- Trigger: Manual or when `docker/golden.Dockerfile` changes
|
|
154
|
+
- Command: `docker build -f docker/golden.Dockerfile -t TDK Landscape-base:latest .`
|
|
155
|
+
|
|
156
|
+
3. **Service Builds**:
|
|
157
|
+
- Services declare `resource_deps=['golden-image-build']` (added automatically via `infra_deps`)
|
|
158
|
+
- Service Dockerfiles generate with `FROM TDK Landscape-base:latest AS l1_os_base`
|
|
159
|
+
- Only service-specific layers rebuild (dependencies already in base)
|
|
160
|
+
|
|
161
|
+
### Performance Impact
|
|
162
|
+
|
|
163
|
+
**Before (without golden image)**:
|
|
164
|
+
- Each service: ~60-90 seconds
|
|
165
|
+
- Total for 5 services: ~5-7 minutes
|
|
166
|
+
- Includes: Alpine base download, Bun installation, Prisma CLI, system deps
|
|
167
|
+
|
|
168
|
+
**After (with golden image)**:
|
|
169
|
+
- Golden image: ~45 seconds (one-time)
|
|
170
|
+
- Each service: ~3-5 seconds
|
|
171
|
+
- Total for 5 services: ~1 minute
|
|
172
|
+
- Includes: Only service-specific code and dependencies
|
|
173
|
+
|
|
174
|
+
**Savings**: ~80% reduction in total build time
|
|
175
|
+
|
|
176
|
+
## Usage
|
|
177
|
+
|
|
178
|
+
### Enable/Disable
|
|
179
|
+
|
|
180
|
+
**Via .env**:
|
|
181
|
+
```bash
|
|
182
|
+
# Not needed - controlled via DEFAULTS
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Via CLI**:
|
|
186
|
+
```bash
|
|
187
|
+
tilt up -- --golden-image=false # Disable
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Via Focus Mode**:
|
|
191
|
+
```bash
|
|
192
|
+
tilt up -- --focus user # Golden image auto-enabled (in ALWAYS_ENABLED_INFRA)
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Rebuild Golden Image
|
|
196
|
+
|
|
197
|
+
**Trigger in Tilt UI**:
|
|
198
|
+
1. Find `golden-image-build` resource in left sidebar
|
|
199
|
+
2. Click resource name
|
|
200
|
+
3. Click "Trigger Update" button
|
|
201
|
+
|
|
202
|
+
**CLI**:
|
|
203
|
+
```bash
|
|
204
|
+
docker build -f docker/golden.Dockerfile -t TDK Landscape-base:latest .
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Automatic Rebuild**:
|
|
208
|
+
- Triggered when `docker/golden.Dockerfile` changes
|
|
209
|
+
- Tilt watches this file via `deps=[GOLDEN_DOCKERFILE]`
|
|
210
|
+
|
|
211
|
+
### Customize Golden Image
|
|
212
|
+
|
|
213
|
+
**Option 1: Edit Generated File** (temporary):
|
|
214
|
+
```bash
|
|
215
|
+
vim docker/golden.Dockerfile
|
|
216
|
+
# Trigger rebuild in Tilt
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Option 2: Update Generator** (permanent):
|
|
220
|
+
```bash
|
|
221
|
+
vim .tilt/providers/docker/golden-image.star
|
|
222
|
+
# Edit _generate_golden_dockerfile() function
|
|
223
|
+
# Delete docker/golden.Dockerfile
|
|
224
|
+
# Restart Tilt to regenerate
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## File Structure
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
tdk/
|
|
231
|
+
├── docker/
|
|
232
|
+
│ ├── golden.Dockerfile # Auto-generated base image
|
|
233
|
+
│ └── README.md # Usage guide
|
|
234
|
+
├── .tilt/
|
|
235
|
+
│ ├── providers/
|
|
236
|
+
│ │ └── docker/
|
|
237
|
+
│ │ ├── golden-image.star # Provider implementation
|
|
238
|
+
│ │ ├── index.star # Exports GoldenImage
|
|
239
|
+
│ │ └── layers/
|
|
240
|
+
│ │ └── l1_base_layers.star # Uses golden image
|
|
241
|
+
│ ├── lifecycle/
|
|
242
|
+
│ │ ├── infra-loader.star # Builds golden image
|
|
243
|
+
│ │ └── orchestrator/
|
|
244
|
+
│ │ └── apply.star # Adds resource deps
|
|
245
|
+
│ └── core/
|
|
246
|
+
│ └── registry/
|
|
247
|
+
│ └── config.star # DEFAULTS configuration
|
|
248
|
+
└── Tiltfile # Main integration
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Troubleshooting
|
|
252
|
+
|
|
253
|
+
### Golden Image Not Building
|
|
254
|
+
|
|
255
|
+
**Symptoms**: Services fail with "image not found: TDK Landscape-base:latest"
|
|
256
|
+
|
|
257
|
+
**Diagnosis**:
|
|
258
|
+
```bash
|
|
259
|
+
docker image inspect TDK Landscape-base:latest
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Fix**:
|
|
263
|
+
```bash
|
|
264
|
+
docker build -f docker/golden.Dockerfile -t TDK Landscape-base:latest .
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Services Not Using Golden Image
|
|
268
|
+
|
|
269
|
+
**Symptoms**: Service builds still take 60+ seconds
|
|
270
|
+
|
|
271
|
+
**Check Generated Dockerfiles**:
|
|
272
|
+
```bash
|
|
273
|
+
grep "FROM TDK Landscape-base" services/*/*/*/Dockerfile.app.autogenerated
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Expected Output**:
|
|
277
|
+
```
|
|
278
|
+
FROM TDK Landscape-base:latest AS l1_os_base
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**If Missing**: L1 layer not using golden image - check `use_golden` parameter
|
|
282
|
+
|
|
283
|
+
### Golden Image Resource Missing
|
|
284
|
+
|
|
285
|
+
**Symptoms**: `ctx.get('golden_image_resource')` returns None
|
|
286
|
+
|
|
287
|
+
**Check**:
|
|
288
|
+
1. Verify `'golden-image': True` in DEFAULTS
|
|
289
|
+
2. Check Tiltfile stores `GOLDEN_IMAGE_RESOURCE` in `TILT_CONTEXT`
|
|
290
|
+
3. Restart Tilt
|
|
291
|
+
|
|
292
|
+
## Testing
|
|
293
|
+
|
|
294
|
+
Run integration tests:
|
|
295
|
+
```bash
|
|
296
|
+
./test-golden-image.sh
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
**Tests**:
|
|
300
|
+
1. ✅ Provider files exist
|
|
301
|
+
2. ✅ DEFAULTS configuration
|
|
302
|
+
3. ✅ Docker provider exports GoldenImage
|
|
303
|
+
4. ✅ Infrastructure loader integrates golden image
|
|
304
|
+
5. ✅ Tiltfile passes Docker provider
|
|
305
|
+
6. ✅ L1 layer supports golden image
|
|
306
|
+
|
|
307
|
+
## Advanced: Disabling Per-Service
|
|
308
|
+
|
|
309
|
+
To opt-out a specific service from using the golden image:
|
|
310
|
+
|
|
311
|
+
**In `golden_docker_generator_v2.star`**:
|
|
312
|
+
```starlark
|
|
313
|
+
def L4_generate_orchestrator(res_path, use_golden_image = True, ...):
|
|
314
|
+
parts.append(L1_generate_os_base(use_golden=use_golden_image))
|
|
315
|
+
...
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**In service manifest** (`.tilt/service.manifest.json`):
|
|
319
|
+
```json
|
|
320
|
+
{
|
|
321
|
+
"useGoldenImage": false
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## OrbStack Compatibility
|
|
326
|
+
|
|
327
|
+
The golden image is optimized for **OrbStack**:
|
|
328
|
+
- No registry push/pull needed
|
|
329
|
+
- Images stored in local OrbStack cache
|
|
330
|
+
- Fast layer sharing between services
|
|
331
|
+
- Resource-efficient (single base image shared)
|
|
332
|
+
|
|
333
|
+
**Does NOT require**:
|
|
334
|
+
- External Docker registry
|
|
335
|
+
- Image push/pull credentials
|
|
336
|
+
- Network bandwidth for base image
|
|
337
|
+
|
|
338
|
+
## Next Steps
|
|
339
|
+
|
|
340
|
+
1. **Extend Golden Image**: Add more common dependencies (e.g., PostgreSQL client, Redis tools)
|
|
341
|
+
2. **Version Golden Image**: Tag with version numbers for reproducibility
|
|
342
|
+
3. **Multi-Architecture**: Support ARM64 and AMD64 variants
|
|
343
|
+
4. **Layer Optimization**: Further reduce golden image size
|
|
344
|
+
|
|
345
|
+
## References
|
|
346
|
+
|
|
347
|
+
- [Docker Multi-Stage Builds](https://docs.docker.com/build/building/multi-stage/)
|
|
348
|
+
- [Tilt Local Resources](https://docs.tilt.dev/local_resource.html)
|
|
349
|
+
- [OrbStack Performance](https://orbstack.dev/features)
|