@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.
Files changed (274) hide show
  1. package/Tiltfile +144 -0
  2. package/discovery/AGENTS.md +362 -0
  3. package/discovery/TILT_DISCOVERY.star +424 -0
  4. package/discovery/Tiltfile +58 -0
  5. package/discovery/config.star +258 -0
  6. package/discovery/constants.star +127 -0
  7. package/discovery/deterministic.star +211 -0
  8. package/discovery/discovery_daemon.star +191 -0
  9. package/discovery/discovery_orchestrator.star +460 -0
  10. package/discovery/filtering.star +5 -0
  11. package/discovery/identity-management-backend/service.yaml +26 -0
  12. package/discovery/identity-management-frontend/service.yaml +29 -0
  13. package/discovery/identity-sdk/service.yaml +9 -0
  14. package/discovery/incremental_discovery.star +213 -0
  15. package/discovery/indexing.star +7 -0
  16. package/discovery/json_manifest_scanner.star +51 -0
  17. package/discovery/libraries.star +46 -0
  18. package/discovery/loading.star +23 -0
  19. package/discovery/manifest/constants.star +104 -0
  20. package/discovery/manifest/loading.star +386 -0
  21. package/discovery/manifest/normalize.star +281 -0
  22. package/discovery/manifest/validation.star +108 -0
  23. package/discovery/normalization.star +11 -0
  24. package/discovery/registry.star +544 -0
  25. package/discovery/resource_snapshot.py +382 -0
  26. package/discovery/resource_snapshot.star +143 -0
  27. package/discovery/schemas.star +1 -0
  28. package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
  29. package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
  30. package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
  31. package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
  32. package/discovery/test_resource_snapshot.py +251 -0
  33. package/discovery/validation.star +78 -0
  34. package/discovery/versioning.star +1 -0
  35. package/dist/commands/config.d.ts.map +1 -1
  36. package/dist/commands/config.js +11 -0
  37. package/dist/commands/config.js.map +1 -1
  38. package/dist/commands/doctor.d.ts.map +1 -1
  39. package/dist/commands/doctor.js +1 -2
  40. package/dist/commands/doctor.js.map +1 -1
  41. package/dist/commands/project.d.ts.map +1 -1
  42. package/dist/commands/project.js +36 -41
  43. package/dist/commands/project.js.map +1 -1
  44. package/dist/commands/resource.d.ts.map +1 -1
  45. package/dist/commands/resource.js +51 -55
  46. package/dist/commands/resource.js.map +1 -1
  47. package/dist/commands/stack.d.ts.map +1 -1
  48. package/dist/commands/stack.js +22 -24
  49. package/dist/commands/stack.js.map +1 -1
  50. package/dist/commands/ui.d.ts.map +1 -1
  51. package/dist/commands/ui.js +1 -2
  52. package/dist/commands/ui.js.map +1 -1
  53. package/dist/commands/up.d.ts.map +1 -1
  54. package/dist/commands/up.js +1 -2
  55. package/dist/commands/up.js.map +1 -1
  56. package/dist/commands/upgrade.d.ts +8 -0
  57. package/dist/commands/upgrade.d.ts.map +1 -1
  58. package/dist/commands/upgrade.js +59 -18
  59. package/dist/commands/upgrade.js.map +1 -1
  60. package/dist/generator/extension-fetch.d.ts +19 -0
  61. package/dist/generator/extension-fetch.d.ts.map +1 -1
  62. package/dist/generator/extension-fetch.js +71 -5
  63. package/dist/generator/extension-fetch.js.map +1 -1
  64. package/dist/generator/template-engine.d.ts +1 -0
  65. package/dist/generator/template-engine.d.ts.map +1 -1
  66. package/dist/generator/template-engine.js +50 -6
  67. package/dist/generator/template-engine.js.map +1 -1
  68. package/dist/utils/command-helpers.d.ts.map +1 -1
  69. package/dist/utils/command-helpers.js +7 -9
  70. package/dist/utils/command-helpers.js.map +1 -1
  71. package/dist/utils/constants.d.ts +1 -0
  72. package/dist/utils/constants.d.ts.map +1 -1
  73. package/dist/utils/constants.js +1 -0
  74. package/dist/utils/constants.js.map +1 -1
  75. package/dist/utils/errors.d.ts +2 -0
  76. package/dist/utils/errors.d.ts.map +1 -1
  77. package/dist/utils/errors.js +6 -1
  78. package/dist/utils/errors.js.map +1 -1
  79. package/dist/utils/project-features.d.ts.map +1 -1
  80. package/dist/utils/project-features.js +1 -1
  81. package/dist/utils/project-features.js.map +1 -1
  82. package/dist/utils/resource-features.d.ts.map +1 -1
  83. package/dist/utils/resource-features.js +2 -2
  84. package/dist/utils/resource-features.js.map +1 -1
  85. package/dist/utils/tar.js +4 -4
  86. package/dist/utils/tar.js.map +1 -1
  87. package/dist/utils/validation.d.ts +7 -0
  88. package/dist/utils/validation.d.ts.map +1 -1
  89. package/dist/utils/validation.js +9 -0
  90. package/dist/utils/validation.js.map +1 -1
  91. package/engine/AGENTS.md +705 -0
  92. package/engine/README.md +29 -0
  93. package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
  94. package/engine/Tiltfile +80 -0
  95. package/engine/assets/docker/golden-layers.Dockerfile +221 -0
  96. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
  97. package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
  98. package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
  99. package/engine/config.star +3 -0
  100. package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
  101. package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
  102. package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
  103. package/engine/docs/C4-ARCHITECTURE.md +17 -0
  104. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
  105. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
  106. package/engine/docs/README.md +284 -0
  107. package/engine/entrypoint.star +97 -0
  108. package/engine/lifecycle/orchestrator.star +260 -0
  109. package/engine/paths.star +717 -0
  110. package/engine/schemas/manifest-schema.json +301 -0
  111. package/engine/schemas/service-schema.json +301 -0
  112. package/engine/scripts/README.md +89 -0
  113. package/engine/scripts/build-and-publish-lib.sh +205 -0
  114. package/engine/scripts/check-lib-publish.sh +85 -0
  115. package/engine/scripts/debug-container.sh +258 -0
  116. package/engine/scripts/generate-manifest.sh +197 -0
  117. package/engine/spec.master +702 -0
  118. package/engine/spec.master.example +341 -0
  119. package/engine/topologies/README.md +34 -0
  120. package/engine/topologies/platform/docker/AGENTS.md +59 -0
  121. package/engine/topologies/platform/docker/auth/auth.star +167 -0
  122. package/engine/topologies/platform/docker/build/golden_image.star +37 -0
  123. package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
  124. package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
  125. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
  126. package/engine/topologies/platform/docker/compose/compose.star +636 -0
  127. package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
  128. package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
  129. package/engine/topologies/platform/docker/config/bunignore.star +142 -0
  130. package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
  131. package/engine/topologies/platform/docker/constants.star +170 -0
  132. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
  133. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
  134. package/engine/topologies/platform/docker/index.star +27 -0
  135. package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
  136. package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
  137. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
  138. package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
  139. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
  140. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
  141. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
  142. package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
  143. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
  144. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
  145. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
  146. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
  147. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
  148. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
  149. package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
  150. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
  151. package/engine/topologies/platform/docker/networking/traefik.star +232 -0
  152. package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
  153. package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
  154. package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
  155. package/engine/topologies/platform/net/proxy.star +4 -0
  156. package/engine/topologies/platform/registries/local.star +4 -0
  157. package/engine/topologies/platform/security/secrets.star +239 -0
  158. package/engine/topologies/platform/state/relational.star +4 -0
  159. package/engine/topologies/tilt/common/AGENTS.md +59 -0
  160. package/engine/topologies/tilt/common/utils.star +364 -0
  161. package/engine/topologies/tilt/common/utils_debug.star +69 -0
  162. package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
  163. package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
  164. package/engine/topologies/tilt/common/utils_env.star +43 -0
  165. package/engine/topologies/tilt/common/utils_output.star +97 -0
  166. package/engine/topologies/tilt/config/AGENTS.md +68 -0
  167. package/engine/topologies/tilt/config/defaults.star +3 -0
  168. package/engine/topologies/tilt/config/feature_flags.star +10 -0
  169. package/engine/topologies/tilt/config/global.star +55 -0
  170. package/engine/topologies/tilt/config/profiles.star +382 -0
  171. package/engine/topologies/tilt/generators/agents_md.star +62 -0
  172. package/engine/topologies/tilt/generators/api_gateway.star +145 -0
  173. package/engine/topologies/tilt/generators/index.star +124 -0
  174. package/engine/topologies/tilt/generators/infisical/README.md +424 -0
  175. package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
  176. package/engine/topologies/tilt/generators/infisical/index.star +57 -0
  177. package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
  178. package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
  179. package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
  180. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
  181. package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
  182. package/engine/topologies/tilt/generators/npmrc.star +111 -0
  183. package/engine/topologies/tilt/generators/tsconfig.star +23 -0
  184. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
  185. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
  186. package/engine/topologies/tilt/generators/typescript/common.star +7 -0
  187. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
  188. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
  189. package/engine/topologies/tilt/generators/typescript/include.star +23 -0
  190. package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
  191. package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
  192. package/engine/topologies/tilt/generators/validators.star +853 -0
  193. package/engine/topologies/tilt/generators/vite/backend.star +78 -0
  194. package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
  195. package/engine/topologies/tilt/generators/vite/generators.star +43 -0
  196. package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
  197. package/engine/topologies/tilt/generators/vite/library.star +65 -0
  198. package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
  199. package/engine/topologies/tilt/generators/vite/templates.star +737 -0
  200. package/engine/topologies/tilt/generators/vite_config.star +22 -0
  201. package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
  202. package/engine/topologies/tilt/manifest/README.md +693 -0
  203. package/engine/topologies/tilt/manifest/__init__.star +218 -0
  204. package/engine/topologies/tilt/manifest/constants.star +252 -0
  205. package/engine/topologies/tilt/manifest/errors.star +266 -0
  206. package/engine/topologies/tilt/manifest/integration.star +339 -0
  207. package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
  208. package/engine/topologies/tilt/manifest/loader.star +214 -0
  209. package/engine/topologies/tilt/manifest/mapper.star +227 -0
  210. package/engine/topologies/tilt/manifest/parser.star +400 -0
  211. package/engine/topologies/tilt/manifest/schema.star +462 -0
  212. package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
  213. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
  214. package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
  215. package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
  216. package/engine/topologies/tilt/manifest/validator.star +717 -0
  217. package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
  218. package/engine/topologies/tilt/resources/AGENTS.md +71 -0
  219. package/engine/topologies/tilt/resources/conditions.star +3 -0
  220. package/engine/topologies/tilt/resources/databases.star +244 -0
  221. package/engine/topologies/tilt/resources/declaration.star +3 -0
  222. package/engine/topologies/tilt/resources/deps.star +3 -0
  223. package/engine/topologies/tilt/resources/infra-loader.star +437 -0
  224. package/engine/topologies/tilt/resources/libs.star +30 -0
  225. package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
  226. package/engine/topologies/tilt/resources/libs_paths.star +79 -0
  227. package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
  228. package/engine/topologies/tilt/resources/libs_setup.star +164 -0
  229. package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
  230. package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
  231. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
  232. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
  233. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
  234. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
  235. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
  236. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
  237. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
  238. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
  239. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
  240. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
  241. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
  242. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
  243. package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
  244. package/engine/topologies/tilt/resources/orchestrator.star +54 -0
  245. package/engine/topologies/tilt/resources/ordering.star +3 -0
  246. package/engine/topologies/tilt/resources/triggers.star +3 -0
  247. package/engine/topologies/tilt/resources/watchers.star +299 -0
  248. package/engine/where-things-live.star +717 -0
  249. package/ext/Tiltfile +66 -0
  250. package/ext/ide-components/README.md +219 -0
  251. package/ext/ide-components/code_executor/server.py +268 -0
  252. package/ext/ide-components/code_viewer/server.py +206 -0
  253. package/ext/ide-components/config_inspector/server.py +1050 -0
  254. package/ext/ide-components/file_browser/server.py +285 -0
  255. package/ext/ide-components/shared/config_service.py +469 -0
  256. package/ext/ide-components/shared/file_utils.py +298 -0
  257. package/ext/ide-components/shared/http_utils.py +232 -0
  258. package/ext/ide-components/shared/static/styles.css +1334 -0
  259. package/ext/ide-components/shared/syntax_highlighter.py +140 -0
  260. package/ext/ide-components/shared/template_engine.py +123 -0
  261. package/ext/ide-components/shared/templates/base.html +121 -0
  262. package/ext/ide-components/shared/test_config_service.py +326 -0
  263. package/ext/ide-components/shared/tilt_integration.py +158 -0
  264. package/ext/ui-enhancements/cron-status-server.sh +49 -0
  265. package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
  266. package/ext/ui-enhancements/extension.yaml +36 -0
  267. package/ext/ui-enhancements/tiltfile.py +99 -0
  268. package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
  269. package/ext/ui-enhancements/ui/help-panel.css +279 -0
  270. package/ext/ui-enhancements/ui/icons.css +125 -0
  271. package/ext/ui-enhancements/ui/tooltips.css +114 -0
  272. package/package.json +13 -9
  273. package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
  274. package/specs/specs/TILT_TECH_STACK.star +159 -0
@@ -0,0 +1,82 @@
1
+ # =============================================================================
2
+ # 🏗️ TILT SDK - GOLDEN IMAGE BUILDERS
3
+ # =============================================================================
4
+
5
+ load('./golden_image_constants.star', 'GOLDEN_DOCKERFILE', 'GOLDEN_IMAGE_PREFIX')
6
+
7
+
8
+ def build_golden_layers(project_root='.'):
9
+ """
10
+ Build all golden layer images using local_resource.
11
+ Returns the resource name for dependency tracking.
12
+
13
+ project_root: path back to the project root from wherever
14
+ local_resource cmds actually run (the Tiltfile's own directory,
15
+ .tdk/.tdk-out/ - not the project root), e.g. '../../'. GOLDEN_DOCKERFILE
16
+ is itself project-root-relative, so it must be prefixed with this to
17
+ resolve correctly - passing project_root='.' (the default) only works
18
+ when the Tiltfile happens to live at the project root.
19
+ """
20
+ resource_name = 'golden-layers-build'
21
+ dockerfile_from_tiltfile = (
22
+ GOLDEN_DOCKERFILE if project_root in (None, '.', '')
23
+ else project_root.rstrip('/') + '/' + GOLDEN_DOCKERFILE
24
+ )
25
+
26
+ build_cmd = """
27
+ echo "🏗️ Building golden layered images (8 total)..."
28
+ echo " 📦 L1: OS base + runtime"
29
+ echo " 📦 L2: Dependencies"
30
+ echo " 📦 L3-Backend: Backend build tools (Prisma)"
31
+ echo " 📦 L3-Frontend: Frontend build tools"
32
+ echo " 📦 L3-Migrator: Migrator build tools (Prisma)"
33
+ echo " 📦 L4-Backend: Backend runtime"
34
+ echo " 📦 L4-Frontend: Frontend runtime"
35
+ echo " 📦 L4-Migrator: Migrator runtime"
36
+
37
+ docker build -f {dockerfile} \\
38
+ --target l1_golden -t {prefix}-l1:{tag} {context} && \\
39
+ docker build -f {dockerfile} \\
40
+ --target l2_golden -t {prefix}-l2:{tag} {context} && \\
41
+ docker build -f {dockerfile} \\
42
+ --target l3_backend_golden -t {prefix}-l3-backend:{tag} {context} && \\
43
+ docker build -f {dockerfile} \\
44
+ --target l3_frontend_golden -t {prefix}-l3-frontend:{tag} {context} && \\
45
+ docker build -f {dockerfile} \\
46
+ --target l3_migrator_golden -t {prefix}-l3-migrator:{tag} {context} && \\
47
+ docker build -f {dockerfile} \\
48
+ --target l4_backend_bun -t {prefix}-l4-backend:{tag} {context} && \\
49
+ docker build -f {dockerfile} \\
50
+ --target l4_backend_node -t {prefix}-l4-backend-node:{tag} {context} && \\
51
+ docker build -f {dockerfile} \\
52
+ --target l4_frontend_golden -t {prefix}-l4-frontend:{tag} {context} && \\
53
+ docker build -f {dockerfile} \\
54
+ --target l4_migrator_golden -t {prefix}-l4-migrator:{tag} {context}
55
+
56
+ echo "✅ Golden layers built (9 images):"
57
+ echo " ✓ {prefix}-l1:{tag}"
58
+ echo " ✓ {prefix}-l2:{tag}"
59
+ echo " ✓ {prefix}-l3-backend:{tag}"
60
+ echo " ✓ {prefix}-l3-frontend:{tag}"
61
+ echo " ✓ {prefix}-l3-migrator:{tag}"
62
+ echo " ✓ {prefix}-l4-backend:{tag} (Bun - 128MB)"
63
+ echo " ✓ {prefix}-l4-backend-node:{tag} (Node.js - 20MB, LIGHTWEIGHT)"
64
+ echo " ✓ {prefix}-l4-frontend:{tag}"
65
+ echo " ✓ {prefix}-l4-migrator:{tag}"
66
+ """.format(
67
+ dockerfile=dockerfile_from_tiltfile,
68
+ prefix=GOLDEN_IMAGE_PREFIX,
69
+ tag='latest',
70
+ context=project_root,
71
+ ).strip()
72
+
73
+ local_resource(
74
+ resource_name,
75
+ cmd=build_cmd,
76
+ labels=['infra.docker', 'golden-layers'],
77
+ deps=[dockerfile_from_tiltfile],
78
+ allow_parallel=True,
79
+ auto_init=True,
80
+ )
81
+
82
+ return resource_name
@@ -0,0 +1,93 @@
1
+ # =============================================================================
2
+ # 🏗️ TILT SDK - GOLDEN IMAGE CONSTANTS
3
+ # =============================================================================
4
+
5
+ # Load project configuration to get the project name as prefix
6
+ # Falls back to 'tdk-project' if project.json is not found
7
+ # Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
8
+ def _load_golden_prefix():
9
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
10
+ project_json_path = '.tdk/project.json'
11
+ if project_root:
12
+ project_json_path = project_root + '/' + project_json_path
13
+
14
+ if os.path.exists(project_json_path):
15
+ _project_json = read_json(project_json_path)
16
+ return _project_json.get('project', {}).get('name', 'tdk-project')
17
+ return 'tdk-project'
18
+
19
+ _GOLDEN_IMAGE_PREFIX = _load_golden_prefix()
20
+
21
+ GOLDEN_IMAGE_PREFIX = _GOLDEN_IMAGE_PREFIX
22
+ GOLDEN_DOCKERFILE = '.tdk/.tdk-out/golden-layers.Dockerfile'
23
+
24
+ GOLDEN_LAYERS = {
25
+ 'l1': {
26
+ 'name': GOLDEN_IMAGE_PREFIX + '-l1',
27
+ 'tag': 'latest',
28
+ 'description': 'OS base + runtime environment',
29
+ 'target': 'l1_golden',
30
+ },
31
+ 'l2': {
32
+ 'name': GOLDEN_IMAGE_PREFIX + '-l2',
33
+ 'tag': 'latest',
34
+ 'description': 'Dependencies + node_modules',
35
+ 'target': 'l2_golden',
36
+ },
37
+ 'l3-backend': {
38
+ 'name': GOLDEN_IMAGE_PREFIX + '-l3-backend',
39
+ 'tag': 'latest',
40
+ 'description': 'Backend build tools (Prisma only, Infisical CLI skipped to avoid CDN hangs)',
41
+ 'target': 'l3_backend_golden',
42
+ },
43
+ 'l3-frontend': {
44
+ 'name': GOLDEN_IMAGE_PREFIX + '-l3-frontend',
45
+ 'tag': 'latest',
46
+ 'description': 'Frontend build tools (no Prisma)',
47
+ 'target': 'l3_frontend_golden',
48
+ },
49
+ 'l3-migrator': {
50
+ 'name': GOLDEN_IMAGE_PREFIX + '-l3-migrator',
51
+ 'tag': 'latest',
52
+ 'description': 'Migrator build tools (Prisma only, Infisical CLI skipped to avoid CDN hangs)',
53
+ 'target': 'l3_migrator_golden',
54
+ },
55
+ 'l4-backend': {
56
+ 'name': GOLDEN_IMAGE_PREFIX + '-l4-backend',
57
+ 'tag': 'latest',
58
+ 'description': 'Backend production runtime (Bun, no Infisical CLI)',
59
+ 'target': 'l4_backend_bun',
60
+ },
61
+ 'l4-backend-node': {
62
+ 'name': GOLDEN_IMAGE_PREFIX + '-l4-backend-node',
63
+ 'tag': 'latest',
64
+ 'description': 'Backend production runtime (Node.js - lightweight, no Infisical CLI)',
65
+ 'target': 'l4_backend_node',
66
+ },
67
+ 'l4-frontend': {
68
+ 'name': GOLDEN_IMAGE_PREFIX + '-l4-frontend',
69
+ 'tag': 'latest',
70
+ 'description': 'Frontend production runtime',
71
+ 'target': 'l4_frontend_golden',
72
+ },
73
+ 'l4-migrator': {
74
+ 'name': GOLDEN_IMAGE_PREFIX + '-l4-migrator',
75
+ 'tag': 'latest',
76
+ 'description': 'Migrator production runtime (no Infisical CLI - uses env vars)',
77
+ 'target': 'l4_migrator_golden',
78
+ },
79
+ }
80
+
81
+
82
+ def get_layer_reference(layer):
83
+ """Returns the full image reference for a specific layer."""
84
+ if layer not in GOLDEN_LAYERS:
85
+ fail("Invalid layer: " + layer + ". Must be one of: l1, l2, l3, l4")
86
+
87
+ layer_info = GOLDEN_LAYERS[layer]
88
+ return '{name}:{tag}'.format(
89
+ name=layer_info['name'],
90
+ tag=layer_info['tag'],
91
+ )
92
+
93
+ CONSTANTS = {}
@@ -0,0 +1,291 @@
1
+ # =============================================================================
2
+ # 🏗️ TILT SDK - GOLDEN IMAGE DOCKERFILE GENERATOR
3
+ # =============================================================================
4
+
5
+ # === INLINED CONSTANTS for pure extension loading ===
6
+ get_docker_healthcheck_config = lambda: {"path": "/health", "interval_seconds": 10, "timeout_seconds": 5, "start_period_seconds": 30, "retries": 3, "frontend_start_period_seconds": 30}
7
+ # === END INLINED CONSTANTS ===
8
+
9
+
10
+ load('../../../tilt/common/utils.star', 'Utils')
11
+
12
+
13
+ # Load centralized healthcheck configuration
14
+ _docker_health = get_docker_healthcheck_config()
15
+
16
+
17
+ # Load project name for dynamic naming
18
+ # Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
19
+ def _load_golden_prefix():
20
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
21
+ project_json_path = '.tdk/project.json'
22
+ if project_root:
23
+ project_json_path = project_root + '/' + project_json_path
24
+
25
+ if os.path.exists(project_json_path):
26
+ _project_json = read_json(project_json_path)
27
+ return _project_json.get('project', {}).get('name', 'tdk-project')
28
+ return 'tdk-project'
29
+
30
+ _GOLDEN_PREFIX = _load_golden_prefix()
31
+
32
+ def generate_golden_dockerfile():
33
+ """Generate the multi-stage golden-layers.Dockerfile."""
34
+ prefix = _GOLDEN_PREFIX
35
+ header = Utils.get_template_header(
36
+ 'dockerfile',
37
+ 'GoldenImage.generate_layered_dockerfile()',
38
+ prefix + '-l1-l4',
39
+ 'GOLDEN LAYERED IMAGES | L1-L4 Pre-built Layers',
40
+ )
41
+
42
+ return header + """
43
+ # =============================================================================
44
+ # 🏗️ GOLDEN LAYERED IMAGES - Multi-Stage Base Images
45
+ # =============================================================================
46
+ # This Dockerfile builds 8 golden images:
47
+ # - """ + prefix + """-l1:latest - OS base + Bun runtime
48
+ # - """ + prefix + """-l2:latest - Dependencies installed
49
+ # - """ + prefix + """-l3-backend:latest - Backend build tools (Prisma, no Infisical CLI)
50
+ # - """ + prefix + """-l3-frontend:latest - Frontend build tools (no Prisma)
51
+ # - """ + prefix + """-l3-migrator:latest - Migrator build tools (Prisma, no Infisical CLI)
52
+ # - """ + prefix + """-l4-backend:latest - Backend production runtime
53
+ # - """ + prefix + """-l4-frontend:latest - Frontend production runtime (Nginx)
54
+ # - """ + prefix + """-l4-migrator:latest - Migrator production runtime
55
+ #
56
+ # Services use these as base images to skip heavy dependency installation.
57
+ #
58
+ # ⚠️ SKIP_INFISICAL_SETUP Support:
59
+ # All generated Dockerfiles support --build-arg SKIP_INFISICAL_SETUP=1
60
+ # to bypass Infisical CLI installation (avoids Cloudsmith CDN hangs).
61
+ # When SKIP_INFISICAL_SETUP=1, secrets are read from env vars only.
62
+ # See: engine/topologies/platform/docker/layers/l3_builder_layers.star
63
+ # =============================================================================
64
+
65
+ # =============================================================================
66
+ # L1: OS BASE + RUNTIME ENVIRONMENT
67
+ # =============================================================================
68
+ FROM oven/bun:1.3.11-alpine AS l1_golden
69
+
70
+ LABEL layer="l1" \
71
+ description="OS base with runtime environment" \
72
+ maintainer="{prefix}"
73
+
74
+ # System dependencies for all services
75
+ RUN apk add --no-cache \
76
+ ca-certificates \
77
+ tzdata \
78
+ curl \
79
+ file \
80
+ bash \
81
+ openssl
82
+
83
+ # Create app user/group for security
84
+ RUN addgroup -S app && adduser -S app -G app
85
+
86
+ # Runtime environment
87
+ ENV NODE_ENV=development \
88
+ BUN_INSTALL_CACHE_DIR=/cache/bun
89
+
90
+ WORKDIR /app
91
+
92
+
93
+ # =============================================================================
94
+ # L2: DEPENDENCY RESOLVER
95
+ # =============================================================================
96
+ FROM l1_golden AS l2_golden
97
+
98
+ LABEL layer="l2" \
99
+ description="Base with common dependencies installed" \
100
+ maintainer="{prefix}"
101
+
102
+ # Install minimal debugging tools (removed: vim, python3, make, g++ = -67MB)
103
+ RUN apk add --no-cache \
104
+ curl \
105
+ netcat-openbsd \
106
+ jq \
107
+ bind-tools
108
+
109
+ # Pre-create cache directories
110
+ RUN mkdir -p /cache/bun /cache/prisma
111
+
112
+ # Bun is already installed in base image
113
+ RUN echo "Bun version: $(bun --version)"
114
+
115
+
116
+ # =============================================================================
117
+ # L3-BACKEND: BACKEND BUILD TOOLS (PRISMA)
118
+ # =============================================================================
119
+ FROM l2_golden AS l3_backend_golden
120
+
121
+ LABEL layer="l3-backend" \
122
+ description="Backend build tools with Prisma" \
123
+ maintainer="{prefix}"
124
+
125
+ # Install Prisma CLI globally (pinned for deterministic builds)
126
+ RUN bun add -g prisma@7.5.0 @prisma/client@7.5.0
127
+
128
+ # Verify Prisma installation
129
+ RUN echo "Prisma version: $(bunx prisma --version | head -1)"
130
+
131
+ # ⚠️ CRITICAL: Infisical CLI is NOT installed in golden L3 images
132
+ # Reason: curl to dl.cloudsmith.io hangs during Docker builds when CDN is slow
133
+ # Solution: Use SKIP_INFISICAL_SETUP=1 build arg or runtime env var injection
134
+ # Services read secrets from environment variables at runtime (no CLI needed)
135
+ # See: .tilt/topologies/platform/docker/layers/l3_builder_layers.star
136
+
137
+
138
+ # =============================================================================
139
+ # L3-FRONTEND: FRONTEND BUILD TOOLS (NO PRISMA)
140
+ # =============================================================================
141
+ FROM l2_golden AS l3_frontend_golden
142
+
143
+ LABEL layer="l3-frontend" \
144
+ description="Frontend build tools without Prisma" \
145
+ maintainer="{prefix}"
146
+
147
+ # Frontend doesn't need Prisma, just verify Bun
148
+ RUN echo "Bun version: $(bun --version)"
149
+
150
+
151
+ # =============================================================================
152
+ # L3-MIGRATOR: MIGRATOR BUILD TOOLS (PRISMA)
153
+ # =============================================================================
154
+ FROM l2_golden AS l3_migrator_golden
155
+
156
+ LABEL layer="l3-migrator" \
157
+ description="Migrator build tools with Prisma" \
158
+ maintainer="{prefix}"
159
+
160
+ # Install Prisma CLI globally (required for migrations, pinned)
161
+ RUN bun add -g prisma@7.5.0 @prisma/client@7.5.0
162
+
163
+ # Verify Prisma installation
164
+ RUN echo "Prisma version: $(bunx prisma --version | head -1)"
165
+
166
+ # ⚠️ CRITICAL: Infisical CLI is NOT installed in golden L3 images
167
+ # Reason: curl to dl.cloudsmith.io hangs during Docker builds when CDN is slow
168
+ # Solution: Use SKIP_INFISICAL_SETUP=1 build arg or runtime env var injection
169
+ # Services read secrets from environment variables at runtime (no CLI needed)
170
+ # See: .tilt/topologies/platform/docker/layers/l3_builder_layers.star
171
+
172
+
173
+ # =============================================================================
174
+ # L4-BACKEND-BUN: BACKEND PRODUCTION RUNTIME (BUN)
175
+ # =============================================================================
176
+ FROM l1_golden AS l4_backend_bun
177
+
178
+ LABEL layer="l4-backend-bun" \
179
+ description="Backend production runtime (Bun)" \
180
+ maintainer="{prefix}"
181
+
182
+ ENV NODE_ENV=production
183
+
184
+ # Install hugo for services that require static site generation (specified via manifest features)
185
+ RUN apk add --no-cache hugo
186
+
187
+ # ⚠️ Infisical CLI is NOT installed in golden L4 images
188
+ # Services use TypeScript SDK (fetch API) or read from env vars - no CLI needed
189
+ # The entrypoint.sh gracefully handles missing CLI (falls back to env vars)
190
+ # Build with --build-arg SKIP_INFISICAL_SETUP=1 to skip CLI installation
191
+
192
+ USER bun
193
+
194
+ # Backend-specific healthcheck (checks Bun runtime)
195
+ HEALTHCHECK --interval={interval}s --timeout={timeout}s --start-period={start_period}s --retries={retries} \
196
+ CMD bun --version || exit 1
197
+
198
+ WORKDIR /app
199
+
200
+
201
+ # =============================================================================
202
+ # L4-BACKEND-NODE: BACKEND PRODUCTION RUNTIME (NODE.JS - LIGHTWEIGHT!)
203
+ # =============================================================================
204
+ FROM node:22-alpine AS l4_backend_node
205
+
206
+ LABEL layer="l4-backend-node" \
207
+ description="Backend production runtime (Node.js - lightweight)" \
208
+ maintainer="{prefix}"
209
+
210
+ ENV NODE_ENV=production
211
+
212
+ # Minimal runtime dependencies
213
+ RUN apk add --no-cache ca-certificates tzdata curl
214
+
215
+ # Create app user for security
216
+ RUN addgroup -S app && adduser -S app -G app
217
+
218
+ # ⚠️ Infisical CLI is NOT installed in golden L4 images
219
+ # Services read secrets from environment variables at runtime
220
+
221
+ USER app
222
+
223
+ # Backend-specific healthcheck (checks Node.js runtime)
224
+ HEALTHCHECK --interval={interval}s --timeout={timeout}s --start-period={start_period}s --retries={retries} \
225
+ CMD node --version || exit 1
226
+
227
+ WORKDIR /app
228
+
229
+
230
+ # Alias for backwards compatibility - defaults to Bun (most efficient)
231
+ FROM l4_backend_bun AS l4_backend_golden
232
+
233
+
234
+ # =============================================================================
235
+ # L4-FRONTEND: FRONTEND PRODUCTION RUNTIME
236
+ # =============================================================================
237
+ FROM nginx:alpine AS l4_frontend_golden
238
+
239
+ LABEL layer="l4-frontend" \
240
+ description="Frontend production runtime with Nginx" \
241
+ maintainer="{prefix}"
242
+
243
+ ENV NODE_ENV=production
244
+
245
+ # Install curl for healthchecks
246
+ RUN apk add --no-cache curl
247
+
248
+ # Frontend-specific healthcheck (checks Nginx)
249
+ HEALTHCHECK --interval={interval}s --timeout={timeout}s --start-period={frontend_start_period}s --retries={retries} \
250
+ CMD curl -f http://localhost/ || exit 1
251
+
252
+ WORKDIR /usr/share/nginx/html
253
+
254
+
255
+ # =============================================================================
256
+ # L4-MIGRATOR: MIGRATOR PRODUCTION RUNTIME
257
+ # =============================================================================
258
+ FROM l1_golden AS l4_migrator_golden
259
+
260
+ LABEL layer="l4-migrator" \
261
+ description="Migrator runtime with Prisma" \
262
+ maintainer="{prefix}"
263
+
264
+ ENV NODE_ENV=production
265
+
266
+ # Copy global Prisma installation from L3
267
+ COPY --from=l3_migrator_golden /root/.bun/install/global /root/.bun/install/global
268
+
269
+ # ⚠️ Infisical CLI is NOT included in golden L4 images
270
+ # The migrator reads secrets directly from environment variables at runtime
271
+ # (no entrypoint wrapper needed for database migrations)
272
+ # Use --build-arg SKIP_INFISICAL_SETUP=1 to skip CLI installation in derived images
273
+
274
+ # Ensure Bun cache path is writable for non-root runtime healthcheck commands.
275
+ RUN mkdir -p /cache/bun && chown -R bun:bun /cache/bun
276
+
277
+ USER bun
278
+
279
+ # Migrator-specific healthcheck (checks Prisma CLI)
280
+ HEALTHCHECK --interval={interval}s --timeout={timeout}s --start-period={start_period}s --retries={retries} \
281
+ CMD bunx prisma --version || exit 1
282
+
283
+ WORKDIR /app
284
+ """.format(
285
+ interval=_docker_health["interval_seconds"],
286
+ timeout=_docker_health["timeout_seconds"],
287
+ start_period=_docker_health["start_period_seconds"],
288
+ retries=_docker_health["retries"],
289
+ frontend_start_period=_docker_health["frontend_start_period_seconds"],
290
+ prefix=_GOLDEN_PREFIX,
291
+ )