@flisk-sh/flisk 0.0.0-stage → 1.3.190

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/CHANGELOG.md +492 -0
  2. package/LICENSE +21 -0
  3. package/README.md +479 -2
  4. package/Tiltfile +151 -0
  5. package/cli/bin/flisk.js +42 -0
  6. package/cli/dist/agent-runtimes/custom.js +335 -0
  7. package/cli/dist/agent-runtimes/registry.js +34 -0
  8. package/cli/dist/backend-frameworks/elysia.js +38 -0
  9. package/cli/dist/backend-frameworks/express.js +49 -0
  10. package/cli/dist/backend-frameworks/fastify.js +43 -0
  11. package/cli/dist/backend-frameworks/h3.js +37 -0
  12. package/cli/dist/backend-frameworks/koa.js +47 -0
  13. package/cli/dist/backend-frameworks/mcp.js +86 -0
  14. package/cli/dist/backend-frameworks/nestjs.js +55 -0
  15. package/cli/dist/backend-frameworks/registry.js +134 -0
  16. package/cli/dist/backend-frameworks/types.js +1 -0
  17. package/cli/dist/backend-languages/bun.js +76 -0
  18. package/cli/dist/backend-languages/go.js +125 -0
  19. package/cli/dist/backend-languages/node.js +122 -0
  20. package/cli/dist/backend-languages/python.js +94 -0
  21. package/cli/dist/backend-languages/registry.js +37 -0
  22. package/cli/dist/backend-languages/rust.js +82 -0
  23. package/cli/dist/backend-languages/types.js +1 -0
  24. package/cli/dist/cli.js +29 -0
  25. package/cli/dist/commands/__tests__/project-e2e-helpers.js +49 -0
  26. package/cli/dist/commands/__tests__/ui-loading-screen.test.js +16 -0
  27. package/cli/dist/commands/agent.js +182 -0
  28. package/cli/dist/commands/completion-candidates.js +116 -0
  29. package/cli/dist/commands/completion.js +843 -0
  30. package/cli/dist/commands/config.js +362 -0
  31. package/cli/dist/commands/doctor.js +1504 -0
  32. package/cli/dist/commands/down.js +114 -0
  33. package/cli/dist/commands/eject.js +108 -0
  34. package/cli/dist/commands/help.js +152 -0
  35. package/cli/dist/commands/import.js +164 -0
  36. package/cli/dist/commands/logs.js +119 -0
  37. package/cli/dist/commands/maintainers.js +102 -0
  38. package/cli/dist/commands/mcp.js +28 -0
  39. package/cli/dist/commands/networks.js +306 -0
  40. package/cli/dist/commands/project.js +447 -0
  41. package/cli/dist/commands/projects.js +103 -0
  42. package/cli/dist/commands/registry.js +53 -0
  43. package/cli/dist/commands/resource.js +992 -0
  44. package/cli/dist/commands/resources.js +127 -0
  45. package/cli/dist/commands/restart.js +89 -0
  46. package/cli/dist/commands/runtime.js +75 -0
  47. package/cli/dist/commands/stack.js +171 -0
  48. package/cli/dist/commands/stacks.js +71 -0
  49. package/cli/dist/commands/status.js +211 -0
  50. package/cli/dist/commands/ui.js +725 -0
  51. package/cli/dist/commands/up.js +609 -0
  52. package/cli/dist/commands/upgrade.js +840 -0
  53. package/cli/dist/commands/version.js +10 -0
  54. package/cli/dist/components/Accessible.js +11 -0
  55. package/cli/dist/components/BaseTooltip.js +30 -0
  56. package/cli/dist/components/DetailPanel.js +33 -0
  57. package/cli/dist/components/FileTree.js +51 -0
  58. package/cli/dist/components/ResourceSelectInput.js +42 -0
  59. package/cli/dist/components/ResourceTable.js +35 -0
  60. package/cli/dist/components/ServiceIssues.js +13 -0
  61. package/cli/dist/components/TUIHeader.js +27 -0
  62. package/cli/dist/components/TabBar.js +27 -0
  63. package/cli/dist/components/Tooltip.js +13 -0
  64. package/cli/dist/components/index.js +11 -0
  65. package/cli/dist/components/ui-theme.js +120 -0
  66. package/cli/dist/config/platform-standards.js +182 -0
  67. package/cli/dist/frontend-frameworks/lit.js +64 -0
  68. package/cli/dist/frontend-frameworks/preact.js +62 -0
  69. package/cli/dist/frontend-frameworks/qwik.js +61 -0
  70. package/cli/dist/frontend-frameworks/react.js +69 -0
  71. package/cli/dist/frontend-frameworks/registry.js +83 -0
  72. package/cli/dist/frontend-frameworks/solid.js +62 -0
  73. package/cli/dist/frontend-frameworks/svelte.js +67 -0
  74. package/cli/dist/frontend-frameworks/tanstack-router.js +101 -0
  75. package/cli/dist/frontend-frameworks/types.js +1 -0
  76. package/cli/dist/frontend-frameworks/vanilla.js +59 -0
  77. package/cli/dist/frontend-frameworks/vue.js +72 -0
  78. package/cli/dist/generator/__tests__/golden-helpers.js +43 -0
  79. package/cli/dist/generator/extension-fetch.js +291 -0
  80. package/cli/dist/generator/resource-templates.js +133 -0
  81. package/cli/dist/generator/template-engine.js +801 -0
  82. package/cli/dist/index.js +10 -0
  83. package/cli/dist/mcp/server.js +101 -0
  84. package/cli/dist/mcp/tools.js +351 -0
  85. package/cli/dist/program.js +37 -0
  86. package/cli/dist/types/index.js +38 -0
  87. package/cli/dist/utils/agent-host.js +36 -0
  88. package/cli/dist/utils/atomic-write.js +36 -0
  89. package/cli/dist/utils/bun-floor.js +9 -0
  90. package/cli/dist/utils/bun-requirement.js +10 -0
  91. package/cli/dist/utils/cache.js +63 -0
  92. package/cli/dist/utils/cold-preflight.js +257 -0
  93. package/cli/dist/utils/command-helpers.js +57 -0
  94. package/cli/dist/utils/constants.js +160 -0
  95. package/cli/dist/utils/discovery-context.js +71 -0
  96. package/cli/dist/utils/discovery-paths.js +93 -0
  97. package/cli/dist/utils/docker.js +34 -0
  98. package/cli/dist/utils/doctor-crashloop.js +161 -0
  99. package/cli/dist/utils/doctor-fix.js +391 -0
  100. package/cli/dist/utils/doctor-host.js +66 -0
  101. package/cli/dist/utils/doctor-report.js +78 -0
  102. package/cli/dist/utils/doctor-runtime.js +880 -0
  103. package/cli/dist/utils/doctor-starlark.js +132 -0
  104. package/cli/dist/utils/doctor-wiring.js +698 -0
  105. package/cli/dist/utils/down-cleanup.js +125 -0
  106. package/cli/dist/utils/env-validator.js +266 -0
  107. package/cli/dist/utils/errors.js +175 -0
  108. package/cli/dist/utils/exec-async.js +31 -0
  109. package/cli/dist/utils/file-helpers.js +104 -0
  110. package/cli/dist/utils/formatting.js +165 -0
  111. package/cli/dist/utils/generated-paths.js +51 -0
  112. package/cli/dist/utils/help-command.js +11 -0
  113. package/cli/dist/utils/host-port-config.js +140 -0
  114. package/cli/dist/utils/host-port-plan.js +100 -0
  115. package/cli/dist/utils/json-output.js +29 -0
  116. package/cli/dist/utils/machine-output.js +33 -0
  117. package/cli/dist/utils/paths.js +43 -0
  118. package/cli/dist/utils/platform.js +58 -0
  119. package/cli/dist/utils/port-assignment.js +75 -0
  120. package/cli/dist/utils/port-conflict-fix.js +25 -0
  121. package/cli/dist/utils/port-fallback-notice.js +17 -0
  122. package/cli/dist/utils/port-listener-probe.js +20 -0
  123. package/cli/dist/utils/project-config-defaults.js +17 -0
  124. package/cli/dist/utils/project-features.js +91 -0
  125. package/cli/dist/utils/project-templates.js +32 -0
  126. package/cli/dist/utils/prompt.js +97 -0
  127. package/cli/dist/utils/resource-features.js +184 -0
  128. package/cli/dist/utils/resource-kind.js +9 -0
  129. package/cli/dist/utils/schema-version-gate.js +45 -0
  130. package/cli/dist/utils/search-status.js +12 -0
  131. package/cli/dist/utils/secret-redaction.js +73 -0
  132. package/cli/dist/utils/service-config-checks.js +189 -0
  133. package/cli/dist/utils/service-manifest.js +254 -0
  134. package/cli/dist/utils/service-runtime-state.js +66 -0
  135. package/cli/dist/utils/service-urls.js +112 -0
  136. package/cli/dist/utils/services.js +360 -0
  137. package/cli/dist/utils/shared-infra.js +45 -0
  138. package/cli/dist/utils/shared-platform-postgres.js +232 -0
  139. package/cli/dist/utils/single-flight.js +21 -0
  140. package/cli/dist/utils/smoke.js +401 -0
  141. package/cli/dist/utils/spinner.js +40 -0
  142. package/cli/dist/utils/stack-features.js +15 -0
  143. package/cli/dist/utils/stack-status.js +14 -0
  144. package/cli/dist/utils/startup-report.js +78 -0
  145. package/cli/dist/utils/status-message.js +21 -0
  146. package/cli/dist/utils/status-ports.js +33 -0
  147. package/cli/dist/utils/suggestions.js +63 -0
  148. package/cli/dist/utils/tar.js +46 -0
  149. package/cli/dist/utils/tdk-version.js +51 -0
  150. package/cli/dist/utils/terminal-layout.js +19 -0
  151. package/cli/dist/utils/tilt-events.js +194 -0
  152. package/cli/dist/utils/tilt-logs.js +61 -0
  153. package/cli/dist/utils/tilt-port-owner.js +63 -0
  154. package/cli/dist/utils/tilt-process.js +54 -0
  155. package/cli/dist/utils/tilt-resource-state.js +32 -0
  156. package/cli/dist/utils/tilt-startup.js +49 -0
  157. package/cli/dist/utils/tilt-unreachable-message.js +9 -0
  158. package/cli/dist/utils/tilt.js +104 -0
  159. package/cli/dist/utils/ui-keymap.js +129 -0
  160. package/cli/dist/utils/ui-service-state.js +34 -0
  161. package/cli/dist/utils/up-only.js +28 -0
  162. package/cli/dist/utils/up-readiness.js +118 -0
  163. package/cli/dist/utils/url-actions.js +103 -0
  164. package/cli/dist/utils/validation.js +62 -0
  165. package/cli/dist/utils/which.js +56 -0
  166. package/cli/dist/utils/windows-doctor.js +176 -0
  167. package/cli/dist-bundle/chunk-6EA4DGCY.js +2 -0
  168. package/cli/dist-bundle/chunk-BZ4H7MM4.js +3 -0
  169. package/cli/dist-bundle/chunk-CLCUIDBH.js +510 -0
  170. package/cli/dist-bundle/cli.js +2017 -0
  171. package/cli/dist-bundle/cold-preflight-SY26O2IG.js +2 -0
  172. package/cli/dist-bundle/devtools-ZUHXW33W.js +5 -0
  173. package/cli/dist-bundle/extension-fetch-J4FFH7TJ.js +2 -0
  174. package/cli/package.json +83 -0
  175. package/cli/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
  176. package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
  177. package/cli/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
  178. package/cli/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
  179. package/cli/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
  180. package/cli/templates/.tiltignore.hbs +72 -0
  181. package/cli/templates/TILT_RESOURCE_DEFAULTS.star.hbs +220 -0
  182. package/cli/templates/TILT_TECH_STACK.star.hbs +149 -0
  183. package/cli/templates/Tiltfile.hbs +381 -0
  184. package/cli/templates/spec.master.hbs +192 -0
  185. package/discovery/AGENTS.md +362 -0
  186. package/discovery/TILT_DISCOVERY.star +429 -0
  187. package/discovery/Tiltfile +58 -0
  188. package/discovery/config.star +265 -0
  189. package/discovery/constants.star +167 -0
  190. package/discovery/deterministic.star +213 -0
  191. package/discovery/discovery_daemon.star +193 -0
  192. package/discovery/discovery_orchestrator.star +492 -0
  193. package/discovery/filtering.star +7 -0
  194. package/discovery/identity-management-backend/service.yaml +26 -0
  195. package/discovery/identity-management-frontend/service.yaml +29 -0
  196. package/discovery/identity-sdk/service.yaml +9 -0
  197. package/discovery/incremental_discovery.star +215 -0
  198. package/discovery/indexing.star +9 -0
  199. package/discovery/json_manifest_scanner.star +57 -0
  200. package/discovery/libraries.star +48 -0
  201. package/discovery/loading.star +25 -0
  202. package/discovery/manifest/constants.star +106 -0
  203. package/discovery/manifest/loading.star +418 -0
  204. package/discovery/manifest/normalize.star +289 -0
  205. package/discovery/manifest/validation.star +110 -0
  206. package/discovery/normalization.star +13 -0
  207. package/discovery/registry.star +562 -0
  208. package/discovery/resource_snapshot.py +384 -0
  209. package/discovery/resource_snapshot.star +145 -0
  210. package/discovery/schemas.star +3 -0
  211. package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
  212. package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
  213. package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
  214. package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
  215. package/discovery/test_resource_snapshot.py +253 -0
  216. package/discovery/validation.star +80 -0
  217. package/discovery/versioning.star +3 -0
  218. package/engine/AGENTS.md +706 -0
  219. package/engine/README.md +31 -0
  220. package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
  221. package/engine/Tiltfile +86 -0
  222. package/engine/assets/docker/golden-layers.Dockerfile +204 -0
  223. package/engine/assets/docker/wake-gateway/Dockerfile +28 -0
  224. package/engine/assets/docker/wake-gateway/decide.test.ts +177 -0
  225. package/engine/assets/docker/wake-gateway/decide.ts +135 -0
  226. package/engine/assets/docker/wake-gateway/server.ts +363 -0
  227. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +39 -0
  228. package/engine/assets/scripts/cleanup-tilt-images.sh +122 -0
  229. package/engine/assets/scripts/mac-m1-resource-monitor.sh +123 -0
  230. package/engine/config.star +5 -0
  231. package/engine/entrypoint.star +101 -0
  232. package/engine/lifecycle/orchestrator.star +263 -0
  233. package/engine/paths.star +719 -0
  234. package/engine/schemas/project-schema.json +147 -0
  235. package/engine/schemas/service-schema.json +537 -0
  236. package/engine/scripts/README.md +89 -0
  237. package/engine/scripts/build-and-publish-lib.sh +207 -0
  238. package/engine/scripts/check-lib-publish.sh +87 -0
  239. package/engine/scripts/debug-container.sh +265 -0
  240. package/engine/scripts/generate-manifest.sh +200 -0
  241. package/engine/spec.master +702 -0
  242. package/engine/spec.master.example +341 -0
  243. package/engine/topologies/README.md +33 -0
  244. package/engine/topologies/platform/docker/AGENTS.md +59 -0
  245. package/engine/topologies/platform/docker/auth/auth.star +207 -0
  246. package/engine/topologies/platform/docker/build/frontend_build_plan.star +65 -0
  247. package/engine/topologies/platform/docker/build/golden_image.star +37 -0
  248. package/engine/topologies/platform/docker/build/golden_image_build.star +144 -0
  249. package/engine/topologies/platform/docker/build/golden_image_constants.star +100 -0
  250. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +263 -0
  251. package/engine/topologies/platform/docker/compose/compose.star +637 -0
  252. package/engine/topologies/platform/docker/compose/compose_helpers.star +54 -0
  253. package/engine/topologies/platform/docker/compose/traefik_standalone.star +171 -0
  254. package/engine/topologies/platform/docker/config/bunignore.star +144 -0
  255. package/engine/topologies/platform/docker/config/dockerignore.star +152 -0
  256. package/engine/topologies/platform/docker/config/healthcheck.star +58 -0
  257. package/engine/topologies/platform/docker/constants.star +211 -0
  258. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +56 -0
  259. package/engine/topologies/platform/docker/dockerfile/language_dockerfile.star +264 -0
  260. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +76 -0
  261. package/engine/topologies/platform/docker/index.star +40 -0
  262. package/engine/topologies/platform/docker/layers/bun_helpers.star +25 -0
  263. package/engine/topologies/platform/docker/layers/infisical/index.star +42 -0
  264. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +264 -0
  265. package/engine/topologies/platform/docker/layers/l1_base_layers.star +89 -0
  266. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +147 -0
  267. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +229 -0
  268. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +282 -0
  269. package/engine/topologies/platform/docker/layers/prisma/constants.star +138 -0
  270. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +98 -0
  271. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +131 -0
  272. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +100 -0
  273. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +128 -0
  274. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +205 -0
  275. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +121 -0
  276. package/engine/topologies/platform/docker/networking/api_path_constants.star +206 -0
  277. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +31 -0
  278. package/engine/topologies/platform/docker/networking/traefik.star +266 -0
  279. package/engine/topologies/platform/docker/networking/traefik_constants.star +148 -0
  280. package/engine/topologies/platform/docker/networking/traefik_helpers.star +162 -0
  281. package/engine/topologies/platform/docker/networking/traefik_static_routes.star +165 -0
  282. package/engine/topologies/platform/docker/secrets/env_secrets.star +74 -0
  283. package/engine/topologies/platform/docker/secrets/infisical.star +109 -0
  284. package/engine/topologies/platform/net/AGENTS.md +64 -0
  285. package/engine/topologies/platform/net/proxy.star +6 -0
  286. package/engine/topologies/platform/registries/local.star +6 -0
  287. package/engine/topologies/platform/registries/verdaccio_loader.star +20 -0
  288. package/engine/topologies/platform/security/AGENTS.md +49 -0
  289. package/engine/topologies/platform/security/secrets.star +241 -0
  290. package/engine/topologies/platform/state/AGENTS.md +64 -0
  291. package/engine/topologies/platform/state/relational.star +6 -0
  292. package/engine/topologies/tilt/common/AGENTS.md +59 -0
  293. package/engine/topologies/tilt/common/utils.star +409 -0
  294. package/engine/topologies/tilt/common/utils_debug.star +71 -0
  295. package/engine/topologies/tilt/common/utils_deterministic.star +170 -0
  296. package/engine/topologies/tilt/common/utils_docker_networks.star +54 -0
  297. package/engine/topologies/tilt/common/utils_env.star +92 -0
  298. package/engine/topologies/tilt/common/utils_output.star +99 -0
  299. package/engine/topologies/tilt/config/AGENTS.md +68 -0
  300. package/engine/topologies/tilt/config/defaults.star +5 -0
  301. package/engine/topologies/tilt/config/feature_flags.star +12 -0
  302. package/engine/topologies/tilt/config/global.star +57 -0
  303. package/engine/topologies/tilt/config/profiles.star +398 -0
  304. package/engine/topologies/tilt/generators/agents_md.star +64 -0
  305. package/engine/topologies/tilt/generators/api_gateway.star +147 -0
  306. package/engine/topologies/tilt/generators/index.star +126 -0
  307. package/engine/topologies/tilt/generators/infisical/README.md +424 -0
  308. package/engine/topologies/tilt/generators/infisical/examples.star +314 -0
  309. package/engine/topologies/tilt/generators/infisical/index.star +59 -0
  310. package/engine/topologies/tilt/generators/infisical/machine_identity.star +422 -0
  311. package/engine/topologies/tilt/generators/infisical/organization.star +536 -0
  312. package/engine/topologies/tilt/generators/infisical/path_manager.star +478 -0
  313. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +422 -0
  314. package/engine/topologies/tilt/generators/nginx_conf.star +145 -0
  315. package/engine/topologies/tilt/generators/npmrc.star +132 -0
  316. package/engine/topologies/tilt/generators/tsconfig.star +25 -0
  317. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +73 -0
  318. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +137 -0
  319. package/engine/topologies/tilt/generators/typescript/common.star +9 -0
  320. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +78 -0
  321. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +140 -0
  322. package/engine/topologies/tilt/generators/typescript/include.star +25 -0
  323. package/engine/topologies/tilt/generators/typescript/playwright_config.star +42 -0
  324. package/engine/topologies/tilt/generators/typescript/prisma_config.star +51 -0
  325. package/engine/topologies/tilt/generators/validators.star +868 -0
  326. package/engine/topologies/tilt/generators/vite/backend.star +80 -0
  327. package/engine/topologies/tilt/generators/vite/frameworks/lit.star +92 -0
  328. package/engine/topologies/tilt/generators/vite/frameworks/preact.star +94 -0
  329. package/engine/topologies/tilt/generators/vite/frameworks/qwik.star +94 -0
  330. package/engine/topologies/tilt/generators/vite/frameworks/react.star +128 -0
  331. package/engine/topologies/tilt/generators/vite/frameworks/solid.star +94 -0
  332. package/engine/topologies/tilt/generators/vite/frameworks/svelte.star +94 -0
  333. package/engine/topologies/tilt/generators/vite/frameworks/vanilla.star +92 -0
  334. package/engine/topologies/tilt/generators/vite/frameworks/vue.star +94 -0
  335. package/engine/topologies/tilt/generators/vite/frontend.star +153 -0
  336. package/engine/topologies/tilt/generators/vite/generators.star +45 -0
  337. package/engine/topologies/tilt/generators/vite/helpers.star +256 -0
  338. package/engine/topologies/tilt/generators/vite/library.star +67 -0
  339. package/engine/topologies/tilt/generators/vite/sdk.star +75 -0
  340. package/engine/topologies/tilt/generators/vite/templates.star +460 -0
  341. package/engine/topologies/tilt/generators/vite_config.star +24 -0
  342. package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
  343. package/engine/topologies/tilt/manifest/README.md +679 -0
  344. package/engine/topologies/tilt/manifest/__init__.star +220 -0
  345. package/engine/topologies/tilt/manifest/constants.star +262 -0
  346. package/engine/topologies/tilt/manifest/errors.star +268 -0
  347. package/engine/topologies/tilt/manifest/integration.star +348 -0
  348. package/engine/topologies/tilt/manifest/json_to_yaml.py +61 -0
  349. package/engine/topologies/tilt/manifest/loader.star +239 -0
  350. package/engine/topologies/tilt/manifest/mapper.star +229 -0
  351. package/engine/topologies/tilt/manifest/parser.star +490 -0
  352. package/engine/topologies/tilt/manifest/schema.star +502 -0
  353. package/engine/topologies/tilt/manifest/tests/test_integration.star +278 -0
  354. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +475 -0
  355. package/engine/topologies/tilt/manifest/tests/test_manifest.star +319 -0
  356. package/engine/topologies/tilt/manifest/tests/test_validator.star +472 -0
  357. package/engine/topologies/tilt/manifest/validator.star +744 -0
  358. package/engine/topologies/tilt/manifest/yaml_to_json.py +20 -0
  359. package/engine/topologies/tilt/resources/AGENTS.md +71 -0
  360. package/engine/topologies/tilt/resources/build_concurrency.star +56 -0
  361. package/engine/topologies/tilt/resources/conditions.star +5 -0
  362. package/engine/topologies/tilt/resources/databases.star +246 -0
  363. package/engine/topologies/tilt/resources/declaration.star +5 -0
  364. package/engine/topologies/tilt/resources/deps.star +5 -0
  365. package/engine/topologies/tilt/resources/infra-loader.star +504 -0
  366. package/engine/topologies/tilt/resources/libs.star +32 -0
  367. package/engine/topologies/tilt/resources/libs_discovery.star +104 -0
  368. package/engine/topologies/tilt/resources/libs_paths.star +81 -0
  369. package/engine/topologies/tilt/resources/libs_resource_definition.star +153 -0
  370. package/engine/topologies/tilt/resources/libs_setup.star +166 -0
  371. package/engine/topologies/tilt/resources/libs_tsconfig.star +39 -0
  372. package/engine/topologies/tilt/resources/orchestrator/apply.star +79 -0
  373. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +864 -0
  374. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +90 -0
  375. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +150 -0
  376. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +38 -0
  377. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +46 -0
  378. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +193 -0
  379. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
  380. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +23 -0
  381. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +136 -0
  382. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +219 -0
  383. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +172 -0
  384. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +577 -0
  385. package/engine/topologies/tilt/resources/orchestrator/helpers.star +35 -0
  386. package/engine/topologies/tilt/resources/orchestrator.star +56 -0
  387. package/engine/topologies/tilt/resources/ordering.star +5 -0
  388. package/engine/topologies/tilt/resources/shared-platform-postgres.star +30 -0
  389. package/engine/topologies/tilt/resources/triggers.star +5 -0
  390. package/engine/topologies/tilt/resources/watchers.star +304 -0
  391. package/engine/where-things-live.star +719 -0
  392. package/examples/tdk-example/LICENSE +21 -0
  393. package/examples/tdk-example/README.md +23 -0
  394. package/examples/tdk-example/TILT_SERVICE_DEFAULTS.star +42 -0
  395. package/examples/tdk-example/TILT_TECH_STACK.star +67 -0
  396. package/examples/tdk-example/Tiltfile +25 -0
  397. package/examples/tdk-example/services/platform/messaging/docker-compose.yml +26 -0
  398. package/examples/tdk-example/services/shop/orders-api/package.json +20 -0
  399. package/examples/tdk-example/services/shop/orders-api/service.json +14 -0
  400. package/examples/tdk-example/services/shop/orders-api/src/index.ts +81 -0
  401. package/examples/tdk-example/services/shop/orders-app/index.html +12 -0
  402. package/examples/tdk-example/services/shop/orders-app/package.json +23 -0
  403. package/examples/tdk-example/services/shop/orders-app/public/.gitkeep +0 -0
  404. package/examples/tdk-example/services/shop/orders-app/service.json +9 -0
  405. package/examples/tdk-example/services/shop/orders-app/src/main.tsx +9 -0
  406. package/examples/tdk-example/services/shop/orders-app/src/orders.tsx +67 -0
  407. package/examples/tdk-example/services/shop/orders-app/src/style.css +15 -0
  408. package/examples/tdk-example/services/shop/orders-worker/package.json +18 -0
  409. package/examples/tdk-example/services/shop/orders-worker/service.json +13 -0
  410. package/examples/tdk-example/services/shop/orders-worker/src/index.ts +33 -0
  411. package/ext/Tiltfile +66 -0
  412. package/ext/ide-components/README.md +221 -0
  413. package/ext/ide-components/code_viewer/server.py +208 -0
  414. package/ext/ide-components/config_inspector/server.py +1052 -0
  415. package/ext/ide-components/file_browser/server.py +287 -0
  416. package/ext/ide-components/shared/config_service.py +471 -0
  417. package/ext/ide-components/shared/file_utils.py +300 -0
  418. package/ext/ide-components/shared/http_utils.py +234 -0
  419. package/ext/ide-components/shared/static/styles.css +1334 -0
  420. package/ext/ide-components/shared/syntax_highlighter.py +142 -0
  421. package/ext/ide-components/shared/template_engine.py +125 -0
  422. package/ext/ide-components/shared/templates/base.html +121 -0
  423. package/ext/ide-components/shared/test_config_service.py +328 -0
  424. package/ext/ide-components/shared/tilt_integration.py +160 -0
  425. package/ext/ui-enhancements/cron-status-server.sh +51 -0
  426. package/ext/ui-enhancements/cron-status-tracker.sh +148 -0
  427. package/ext/ui-enhancements/extension.yaml +36 -0
  428. package/ext/ui-enhancements/tiltfile.py +101 -0
  429. package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
  430. package/ext/ui-enhancements/ui/help-panel.css +279 -0
  431. package/ext/ui-enhancements/ui/icons.css +125 -0
  432. package/ext/ui-enhancements/ui/tooltips.css +114 -0
  433. package/package.json +94 -4
  434. package/shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh +25 -0
  435. package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +466 -0
  436. package/shared-platform-engineering/docker-templates/install-deps.sh +154 -0
  437. package/shared-platform-engineering/docker-templates/prisma-bun-client-link-fix.sh +14 -0
  438. package/shared-platform-engineering/docker-templates/prisma-normalize-client.sh +58 -0
  439. package/specs/specs/TILT_SERVICE_DEFAULTS.star +207 -0
  440. package/specs/specs/TILT_TECH_STACK.star +161 -0
@@ -0,0 +1,42 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🔐 INFISICAL DOCKER LAYERS - Master Index
5
+ # =============================================================================
6
+ # Centralizes all Infisical-related Docker layer functionality
7
+ # =============================================================================
8
+ #
9
+ # This module provides:
10
+ # - Dockerfile generation for Infisical integration
11
+ # - Secret injection at runtime (L4 layers)
12
+ # - CLI setup at build time (L3 layers)
13
+ # - Prisma migrator secret resolution
14
+ #
15
+ # Usage:
16
+ # load("./infisical/index.star", "InfisicalLayers")
17
+ #
18
+ # # Runtime setup
19
+ # dockerfile_snippet = InfisicalLayers.Docker.runtime_setup("my-service")
20
+ #
21
+ # # Builder setup
22
+ # builder_snippet = InfisicalLayers.Docker.builder_setup(use_infisical=True)
23
+ #
24
+ # # Environment for docker-compose
25
+ # env = InfisicalLayers.Docker.generate_compose_env("my-service")
26
+ # =============================================================================
27
+
28
+ # Load all Infisical Docker submodules
29
+ load("./infisical_docker.star", "InfisicalDocker")
30
+
31
+ # =============================================================================
32
+ # Exports
33
+ # =============================================================================
34
+
35
+ InfisicalLayers = struct(
36
+ # Main Docker integration
37
+ Docker=InfisicalDocker,
38
+
39
+ # Constants
40
+ ENTRYPOINT_PATH=InfisicalDocker.ENTRYPOINT_PATH,
41
+ ENTRYPOINT_SOURCE=InfisicalDocker.ENTRYPOINT_SOURCE,
42
+ )
@@ -0,0 +1,264 @@
1
+ # Copyright (c) 2026 Flisk Landscape contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # =============================================================================
4
+ # 🔐 INFISICAL DOCKER INTEGRATION
5
+ # =============================================================================
6
+ # Replaces: Hardcoded infisical-entrypoint.sh references in Dockerfile generation
7
+ # Uses: Starlark generators for secret configuration
8
+ # =============================================================================
9
+ #
10
+ # This module provides:
11
+ # - Dockerfile generation for Infisical secret injection
12
+ # - Environment variable configuration using Starlark generators
13
+ # - Entrypoint setup with proper secret paths
14
+ #
15
+ # Usage:
16
+ # load("./infisical_docker.star", "InfisicalDocker")
17
+ # dockerfile_snippet = InfisicalDocker.runtime_setup("my-service", "/services/my-service")
18
+ # =============================================================================
19
+
20
+ # Load the generators
21
+ load("../../../../tilt/generators/infisical/secrets_generator.star", _Secrets="SecretsGenerator")
22
+ load("../../../../tilt/generators/infisical/path_manager.star", _Paths="PathManager")
23
+
24
+ # =============================================================================
25
+ # Constants
26
+ # =============================================================================
27
+
28
+ ENTRYPOINT_PATH = "/entrypoint.sh"
29
+ ENTRYPOINT_SOURCE = "shared-platform-engineering/docker-templates/infisical-entrypoint.sh"
30
+
31
+ # =============================================================================
32
+ # Runtime Secret Injection (L4 Runtime Layers)
33
+ # =============================================================================
34
+
35
+ def _runtime_setup(resource_name, secret_path=None, resource_type="backend", command="bun run start", use_entrypoint=True):
36
+ """
37
+ Generate Dockerfile snippet for Infisical runtime setup.
38
+
39
+ Args:
40
+ resource_name: Name of the service
41
+ secret_path: Infisical path (default: auto-generated from resource_name)
42
+ resource_type: Type of service (backend, frontend, worker, etc.)
43
+ command: Command to run after secret injection
44
+ use_entrypoint: Whether to use entrypoint.sh (default: True)
45
+
46
+ Returns:
47
+ String with Dockerfile commands for runtime setup
48
+ """
49
+ # Auto-generate secret path if not provided
50
+ if not secret_path:
51
+ path_plan = _Paths.plan_resource_path(resource_name, resource_type)
52
+ secret_path = path_plan["full_path"]
53
+
54
+ # Generate configuration using the Starlark generator
55
+ config = _Secrets.generate_for_service(
56
+ resource_name=resource_name,
57
+ secret_path=secret_path,
58
+ resource_type=resource_type,
59
+ command=command,
60
+ )
61
+
62
+ # Extract environment variables from the config
63
+ env_vars = config["docker_compose"]["environment"]
64
+
65
+ parts = []
66
+
67
+ if use_entrypoint:
68
+ # Copy entrypoint script
69
+ parts.append("COPY --chmod=0755 {} {}\n".format(ENTRYPOINT_SOURCE, ENTRYPOINT_PATH))
70
+
71
+ # Set environment variables
72
+ for key, value in env_vars.items():
73
+ # Handle env var references properly
74
+ if value.startswith("${") and value.endswith("}"):
75
+ parts.append("ENV {}={}\n".format(key, value))
76
+ else:
77
+ parts.append("ENV {}=\"{}\"\n".format(key, value))
78
+
79
+ # Set RESOURCE_NAME explicitly
80
+ parts.append("ENV RESOURCE_NAME={}\n".format(resource_name))
81
+
82
+ # Set entrypoint
83
+ parts.append("ENTRYPOINT [\"{}\"]\n".format(ENTRYPOINT_PATH))
84
+
85
+ # Set command
86
+ cmd_parts = command.split()
87
+ cmd_json = ", ".join(["\"{}\"".format(p) for p in cmd_parts])
88
+ parts.append("CMD [{}]\n".format(cmd_json))
89
+ else:
90
+ # Without entrypoint, just set env vars and use direct command
91
+ for key, value in env_vars.items():
92
+ parts.append("ENV {}={}\n".format(key, value))
93
+ parts.append("CMD [\"{}\"]\n".format(command))
94
+
95
+ return "".join(parts)
96
+
97
+ def _runtime_setup_simple(resource_name, use_entrypoint=True):
98
+ """
99
+ Simple runtime setup using known service configuration.
100
+
101
+ Args:
102
+ resource_name: Name of the service
103
+ use_entrypoint: Whether to use entrypoint.sh
104
+
105
+ Returns:
106
+ String with Dockerfile commands
107
+ """
108
+ # Try to get known path
109
+ secret_path = _Paths.get_known_resource_path(resource_name)
110
+
111
+ if not secret_path:
112
+ # Plan a new path
113
+ path_plan = _Paths.plan_resource_path(resource_name)
114
+ secret_path = path_plan["full_path"]
115
+
116
+ return _runtime_setup(
117
+ resource_name=resource_name,
118
+ secret_path=secret_path,
119
+ use_entrypoint=use_entrypoint,
120
+ )
121
+
122
+ # =============================================================================
123
+ # Builder Secret Injection (L3 Builder Layers)
124
+ # =============================================================================
125
+
126
+ def _builder_setup(use_infisical=True, use_golden=True):
127
+ """
128
+ Generate Dockerfile snippet for builder Infisical CLI setup.
129
+
130
+ Args:
131
+ use_infisical: Whether to include Infisical CLI setup
132
+ use_golden: Whether using golden image (skips CLI install)
133
+
134
+ Returns:
135
+ String with Dockerfile commands for builder setup
136
+ """
137
+ if not use_infisical or use_golden:
138
+ return ""
139
+
140
+ # Only install Infisical CLI if not skipped AND not using golden image
141
+ return (
142
+ "# Conditionally install Infisical CLI only if not skipped\n"
143
+ + "RUN if [ \"$SKIP_INFISICAL_SETUP\" != \"1\" ]; then \\\n"
144
+ + " echo \"\u26a0\ufe0f Installing Infisical CLI...\" && \\\n"
145
+ + " apk add --no-cache bash curl netcat-openbsd && \\\n"
146
+ + " curl -sL https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.alpine.sh | bash && \\\n"
147
+ + " apk add --no-cache infisical; \\\n"
148
+ + " else \\\n"
149
+ + " echo \"\u2705 Skipping Infisical CLI installation (SKIP_INFISICAL_SETUP=1)\"; \\\n"
150
+ + " fi\n"
151
+ + "COPY --chmod=0755 {} {}\n".format(ENTRYPOINT_SOURCE, ENTRYPOINT_PATH)
152
+ )
153
+
154
+ # =============================================================================
155
+ # Environment Variable Generation (for docker-compose)
156
+ # =============================================================================
157
+
158
+ def _generate_compose_env(resource_name, secret_path=None, resource_type="backend", additional_vars=None):
159
+ """
160
+ Generate environment variables for docker-compose.
161
+
162
+ Args:
163
+ resource_name: Name of the service
164
+ secret_path: Infisical path
165
+ resource_type: Type of service
166
+ additional_vars: Additional environment variables
167
+
168
+ Returns:
169
+ Dict of environment variables for docker-compose
170
+ """
171
+ if not secret_path:
172
+ secret_path = _Paths.get_known_resource_path(resource_name)
173
+ if not secret_path:
174
+ path_plan = _Paths.plan_resource_path(resource_name, resource_type)
175
+ secret_path = path_plan["full_path"]
176
+
177
+ config = _Secrets.generate_for_service(
178
+ resource_name=resource_name,
179
+ secret_path=secret_path,
180
+ resource_type=resource_type,
181
+ )
182
+
183
+ env = config["docker_compose"]["environment"]
184
+
185
+ if additional_vars:
186
+ env.update(additional_vars)
187
+
188
+ return env
189
+
190
+ # =============================================================================
191
+ # Secret Path Resolution (for Prisma/migrators)
192
+ # =============================================================================
193
+
194
+ def _resolve_secret_path(resource_name, default_subpath="/database"):
195
+ """
196
+ Resolve the secret path for database operations.
197
+
198
+ Args:
199
+ resource_name: Name of the service
200
+ default_subpath: Default subpath for database secrets
201
+
202
+ Returns:
203
+ String with the full secret path
204
+ """
205
+ base_path = _Paths.get_known_resource_path(resource_name)
206
+
207
+ if not base_path:
208
+ path_plan = _Paths.plan_resource_path(resource_name)
209
+ base_path = path_plan["full_path"]
210
+
211
+ return "{}{}".format(base_path, default_subpath)
212
+
213
+ def _generate_migrator_env(resource_name, db_name=None):
214
+ """
215
+ Generate environment variables for database migrator.
216
+
217
+ Args:
218
+ resource_name: Name of the service
219
+ db_name: Database name (optional)
220
+
221
+ Returns:
222
+ Dict of environment variables
223
+ """
224
+ secret_path = _resolve_secret_path(resource_name)
225
+
226
+ env = {
227
+ "RESOURCE_NAME": resource_name,
228
+ "INFISICAL_SECRET_PATH": secret_path,
229
+ "INFISICAL_TOKEN": "${INFISICAL_TOKEN:-}",
230
+ "INFISICAL_CLIENT_ID": "${INFISICAL_CLIENT_ID:-}",
231
+ "INFISICAL_CLIENT_SECRET": "${INFISICAL_CLIENT_SECRET:-}",
232
+ "INFISICAL_API_URL": "${INFISICAL_API_URL:-http://infisical:8080}",
233
+ "INFISICAL_PROJECT_ID": "${INFISICAL_PROJECT_ID:-}",
234
+ "INFISICAL_ENVIRONMENT": "${INFISICAL_ENVIRONMENT:-dev}",
235
+ }
236
+
237
+ if db_name:
238
+ env["DATABASE_NAME"] = db_name
239
+
240
+ return env
241
+
242
+ # =============================================================================
243
+ # Main Public API
244
+ # =============================================================================
245
+
246
+ InfisicalDocker = struct(
247
+ # Runtime setup (L4 layers)
248
+ runtime_setup=_runtime_setup,
249
+ runtime_setup_simple=_runtime_setup_simple,
250
+
251
+ # Builder setup (L3 layers)
252
+ builder_setup=_builder_setup,
253
+
254
+ # Environment generation
255
+ generate_compose_env=_generate_compose_env,
256
+ generate_migrator_env=_generate_migrator_env,
257
+
258
+ # Path resolution
259
+ resolve_secret_path=_resolve_secret_path,
260
+
261
+ # Constants
262
+ ENTRYPOINT_PATH=ENTRYPOINT_PATH,
263
+ ENTRYPOINT_SOURCE=ENTRYPOINT_SOURCE,
264
+ )
@@ -0,0 +1,89 @@
1
+ # Copyright (c) 2026 Flisk contributors
2
+ # SPDX-License-Identifier: MIT
3
+ """
4
+ L1 Base Layers - OS and Runtime Environment Foundation
5
+
6
+ Provides the foundational layers for all Dockerfiles:
7
+ - l1_os_base: Alpine Linux base with essential tools
8
+ - l1_runtime_env: Runtime environment variables
9
+ """
10
+
11
+ BUN_BASE = "oven/bun:1.3.11-alpine"
12
+ ALPINE_BASE = "alpine:3.22"
13
+ load('../../../../../discovery/config.star', 'GLOBAL_CONFIG')
14
+
15
+ # Load project name for dynamic golden image naming
16
+ # Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
17
+ def _load_golden_prefix():
18
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
19
+ project_json_path = '.tdk/project.json'
20
+ if project_root:
21
+ project_json_path = project_root + '/' + project_json_path
22
+
23
+ if os.path.exists(project_json_path):
24
+ _project_json = read_json(project_json_path)
25
+ return _project_json.get('project', {}).get('name', 'tdk-project')
26
+ return 'tdk-project'
27
+
28
+ _GOLDEN_PREFIX = _load_golden_prefix()
29
+
30
+ GOLDEN_L1_IMAGE = GLOBAL_CONFIG['docker'].get('golden_l1_image', _GOLDEN_PREFIX + '-l1:latest')
31
+
32
+
33
+ def L1_generate_os_base(base_image = None, maintainer = None, use_golden = True):
34
+ """
35
+ Generate the OS base layer with Alpine Linux and essential tools.
36
+
37
+ Args:
38
+ base_image: Base image to use (default: {prefix}-l1:latest if use_golden=True, else Alpine 3.18)
39
+ maintainer: Maintainer label (default: project name from project.json)
40
+ use_golden: Whether to use the golden L1 image (default: True)
41
+
42
+ Returns:
43
+ Dockerfile content string for the l1_os_base stage
44
+ """
45
+ if base_image == None:
46
+ base_image = GOLDEN_L1_IMAGE if use_golden else ALPINE_BASE
47
+
48
+ # Set default maintainer from project name
49
+ if maintainer == None:
50
+ maintainer = _GOLDEN_PREFIX
51
+
52
+ # If using golden L1 image, skip dependency installation (already in base)
53
+ if base_image == GOLDEN_L1_IMAGE or _GOLDEN_PREFIX + "-l1" in base_image:
54
+ return (
55
+ "# ---- L1: os_base (Golden L1: " + base_image + ") ----\n"
56
+ + "FROM " + base_image + " AS l1_os_base\n"
57
+ + "# OS dependencies pre-installed in golden L1 image\n"
58
+ + "WORKDIR /app\n"
59
+ )
60
+
61
+ # Standard base with dependency installation
62
+ return (
63
+ "# ---- L1: os_base (" + base_image + ") ----\n"
64
+ + "FROM " + base_image + " AS l1_os_base\n"
65
+ + "LABEL maintainer=\"" + maintainer + "\"\n"
66
+ + "RUN apk add --no-cache ca-certificates tzdata curl bash openssl \\\n"
67
+ + " && addgroup -S app && adduser -S app -G app\n"
68
+ + "WORKDIR /app\n"
69
+ )
70
+
71
+
72
+ def L1_generate_runtime_env(envs = None):
73
+ """
74
+ Generate the runtime environment variables layer.
75
+
76
+ Args:
77
+ envs: Dictionary of environment variables (default: production settings)
78
+
79
+ Returns:
80
+ Dockerfile content string for the l1_runtime_env stage
81
+ """
82
+ if envs == None:
83
+ envs = {"NODE_ENV": "production", "BUN_INSTALL_CACHE_DIR": "/cache/bun"}
84
+ parts = ["# ---- L1: runtime_env ----\n", "# Shared runtime environment\n"]
85
+ for k in envs:
86
+ parts.append("ENV " + k + "=" + envs[k] + "\n")
87
+ return "".join(parts)
88
+
89
+ GLOBAL_CONFIG = {}
@@ -0,0 +1,147 @@
1
+ # Copyright (c) 2026 Flisk contributors
2
+ # SPDX-License-Identifier: MIT
3
+ # === INLINED CONSTANTS for pure extension loading ===
4
+ RUNTIME = "bun"
5
+ # === END INLINED CONSTANTS ===
6
+
7
+
8
+ """
9
+ L2 Dependency Layers - Package Manifest and Dependency Resolution
10
+
11
+ Handles the dependency layers for efficient Docker caching:
12
+ - l2_dependency_manifest: Copy and install package manifests
13
+ - l2_dependency_resolver: Cache resolved dependencies
14
+ """
15
+
16
+ load('./l1_base_layers.star', 'BUN_BASE')
17
+ load('../../../../../discovery/config.star', 'GLOBAL_CONFIG')
18
+ load('../../../tilt/common/utils_debug.star', 'DEBUG_MODE')
19
+ load('../../../tilt/manifest/constants.star', 'AUTOGENERATED_CONFIG_PATHS', 'GENERATED_CONFIG_FILENAMES')
20
+
21
+
22
+ # Load project name for dynamic golden image naming
23
+ # Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
24
+ def _load_golden_prefix():
25
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '')
26
+ project_json_path = '.tdk/project.json'
27
+ if project_root:
28
+ project_json_path = project_root + '/' + project_json_path
29
+
30
+ if os.path.exists(project_json_path):
31
+ _project_json = read_json(project_json_path)
32
+ return _project_json.get('project', {}).get('name', 'tdk-project')
33
+ return 'tdk-project'
34
+
35
+ _GOLDEN_PREFIX = _load_golden_prefix()
36
+
37
+ GOLDEN_L2_IMAGE = GLOBAL_CONFIG['docker'].get('golden_l2_image', _GOLDEN_PREFIX + '-l2:latest')
38
+
39
+
40
+ def normalize_res_path(res_path):
41
+ """Normalize resource path for Docker COPY commands.
42
+
43
+ Docker COPY requires paths relative to the build context (project root).
44
+ Absolute filesystem paths must become project-relative (including ../sibling).
45
+ Never strip only the leading '/' — that turns
46
+ `/private/var/.../platform/verdaccio` into a fake in-repo path.
47
+
48
+ Args:
49
+ res_path: Resource path (may be absolute or relative)
50
+
51
+ Returns:
52
+ Normalized relative path for Docker COPY
53
+ """
54
+ if not res_path:
55
+ return res_path
56
+ if not res_path.startswith('/'):
57
+ return res_path
58
+ project_root = os.environ.get('TDK_PROJECT_ROOT', '.')
59
+ cmd = (
60
+ "python3 -c \"import os; print(os.path.relpath(os.path.realpath('''" +
61
+ res_path +
62
+ "'''), os.path.realpath('''" +
63
+ project_root +
64
+ "''')))\""
65
+ )
66
+ relative = str(local(cmd, quiet=True, echo_off=True)).strip()
67
+ if relative:
68
+ return relative
69
+ root_prefix = project_root.rstrip('/') + '/'
70
+ if res_path.startswith(root_prefix):
71
+ return res_path[len(root_prefix):]
72
+ return res_path[1:]
73
+
74
+
75
+ def L2_generate_dependency_manifest(res_path, manager = RUNTIME, use_golden = True):
76
+ """
77
+ Generate the dependency manifest layer that copies package files.
78
+ This layer is cached independently for faster builds.
79
+
80
+ Args:
81
+ res_path: Resource path (service directory)
82
+ manager: Package manager to use (default: RUNTIME from master config)
83
+ use_golden: Whether to use golden L2 image (default: True)
84
+
85
+ Returns:
86
+ Dockerfile content string for the l2_deps_manifest stage
87
+ """
88
+ # Normalize res_path for Docker COPY (must be relative to build context)
89
+ res_path_rel = normalize_res_path(res_path)
90
+
91
+ # Prefer golden L2 image when enabled and defined; fall back to plain Bun image.
92
+ base_image = GOLDEN_L2_IMAGE if (use_golden and GOLDEN_L2_IMAGE) else BUN_BASE
93
+ use_golden_for_manifest = base_image == GOLDEN_L2_IMAGE
94
+ debug_tools_install = "" if use_golden_for_manifest else "# Install debugging tools for troubleshooting\nRUN echo '🔧 Installing debug tools...' && apk add --no-cache curl netcat-openbsd jq bind-tools vim && echo '✅ Debug tools installed'\n"
95
+
96
+ diagnostics_block = """
97
+ # Comprehensive pre-flight diagnostics (debug mode)
98
+ RUN echo '🔍 DEPENDENCY INSTALLATION DIAGNOSTICS (debug)' && \\
99
+ echo "Bun version: $(bun --version)" && \\
100
+ echo "Lock files:" && ls -lh bun.lock* 2>/dev/null && \\
101
+ echo "Cache dir:" && ls -lh /cache/bun 2>/dev/null || true
102
+ """
103
+ if not DEBUG_MODE:
104
+ diagnostics_block = "# Diagnostics suppressed (set TILT_DEBUG=true for verbose output)\n"
105
+
106
+ install_deps_verbose = "INSTALL_DEPS_VERBOSE=1 " if DEBUG_MODE else ""
107
+
108
+ return (
109
+ "# ---- L2: dependency_manifest ----\n"
110
+ + "FROM " + base_image + " AS l2_deps_manifest\n"
111
+ + "WORKDIR /app\n"
112
+ + "\n"
113
+ + "# Cache-busting mechanism - change this value to force dependency reinstall\n"
114
+ + "ARG CACHE_BUSTER=2026-06-25-v1\n"
115
+ + "RUN echo \"Cache buster: ${CACHE_BUSTER}\"\n"
116
+ + "\n"
117
+ + debug_tools_install
118
+ + "\n"
119
+ + "# Copy workspace root for monorepo resolution\n"
120
+ + "COPY package.json ./package.json\n"
121
+ + "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['npmrc_docker'] + " /app/.npmrc\n"
122
+ + "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['bunfig_docker'] + " /app/.bunfig.toml\n"
123
+ + "\n"
124
+ + "# Copy service manifest files for deterministic dependency layer\n"
125
+ + "WORKDIR /app/" + res_path + "\n"
126
+ + "COPY " + res_path_rel + "/package.json ./package.json\n"
127
+ + "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['npmrc_docker'] + " .npmrc\n"
128
+ + "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['bunfig_docker'] + " .bunfig.toml\n"
129
+ + "\n"
130
+ + diagnostics_block
131
+ + "# Install dependencies (quiet by default; set TILT_DEBUG=true for verbose diagnostics)\n"
132
+ + "COPY shared-platform-engineering/docker-templates/install-deps.sh /usr/local/bin/install-deps.sh\n"
133
+ # NOTE: sharing=shared allows parallel builds (20+ services) without lock contention.
134
+ # Bun's cache uses content-addressable storage with atomic writes, so concurrent access is safe.
135
+ + "RUN --mount=type=cache,target=/cache/bun,sharing=shared chmod +x /usr/local/bin/install-deps.sh && start_ts=$(date +%s) && "
136
+ + install_deps_verbose
137
+ + "/usr/local/bin/install-deps.sh && end_ts=$(date +%s) && echo \"install-deps duration: $((end_ts-start_ts))s\"\n"
138
+ # Guarantee /app/node_modules/.bun exists so L3's COPY --link never
139
+ # fails with "not found". Bun's isolated linker only creates this dir
140
+ # when hoisted packages are present; without TDK_LICENSE_KEY the public-
141
+ # npm install may skip it entirely.
142
+ + "RUN mkdir -p /app/node_modules/.bun\n"
143
+ )
144
+
145
+ DEBUG = {}
146
+
147
+ GLOBAL_CONFIG = {}