@flisk-sh/flisk 0.0.0-stage → 1.3.189

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-QWYXYAX6.js +510 -0
  170. package/cli/dist-bundle/cli.js +2017 -0
  171. package/cli/dist-bundle/cold-preflight-MM46GFQA.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,466 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ # =============================================================================
5
+ # 🔐 UNIVERSAL INFISICAL ENTRYPOINT - Zero-Code Secret Injection
6
+ # =============================================================================
7
+ #
8
+ # This entrypoint wrapper injects secrets from Infisical WITHOUT modifying
9
+ # any microservice code. The service thinks it's reading from process.env,
10
+ # but Infisical CLI has already populated those variables.
11
+ #
12
+ # How it works:
13
+ # 1. Detects SERVICE_NAME environment variable (set by Tiltfile)
14
+ # 2. Constructs Infisical secret path: /services/{SERVICE_NAME}
15
+ # 3. Authenticates using Machine Identity (Universal Auth)
16
+ # 4. Uses `infisical run` to fetch secrets and inject into process env
17
+ # 5. Executes the original command (bun, npm, node, etc.)
18
+ #
19
+ # Key Benefits:
20
+ # - Zero refactoring: No SDK imports in microservices
21
+ # - Dynamic pathing: Auto-discovers service-specific secrets
22
+ # - Fallback support: Works without Infisical (for local dev)
23
+ # - Prisma compatible: CLI commands also see injected secrets
24
+ #
25
+ # 🗃️ DATABASE VIRTUALIZATION (BigTech Pattern):
26
+ # - Single PostgreSQL container with logical databases
27
+ # - Entrypoint waits for database to be ready before starting app
28
+ # - Saves ~80% RAM compared to 120 separate PostgreSQL containers
29
+ #
30
+ # 🎯 INVERSION OF CONTROL (Tilt as Single Source of Truth):
31
+ # - TILT_DATABASE_URL: If set by Docker Compose/Tilt, ALWAYS wins over Infisical
32
+ # - This ensures Tilt-created databases match application connections
33
+ # - Solves the "hidden DB secret" paradox without modifying Infisical
34
+ # - Precedence: TILT_DATABASE_URL > Infisical DATABASE_URL > Fallback
35
+ # =============================================================================
36
+
37
+ set -e
38
+
39
+ # Colors for terminal output
40
+ RED='\033[0;31m'
41
+ GREEN='\033[0;32m'
42
+ YELLOW='\033[1;33m'
43
+ BLUE='\033[0;34m'
44
+ CYAN='\033[0;36m'
45
+ NC='\033[0m' # No Color
46
+
47
+ log_info() {
48
+ printf "${BLUE}[ENTRYPOINT]${NC} %s\n" "$1"
49
+ }
50
+
51
+ log_success() {
52
+ printf "${GREEN}[ENTRYPOINT]${NC} %s\n" "$1"
53
+ }
54
+
55
+ log_warn() {
56
+ printf "${YELLOW}[ENTRYPOINT]${NC} %s\n" "$1"
57
+ }
58
+
59
+ log_error() {
60
+ printf "${RED}[ENTRYPOINT]${NC} %s\n" "$1"
61
+ }
62
+
63
+ log_db() {
64
+ printf "${CYAN}[DATABASE]${NC} %s\n" "$1"
65
+ }
66
+
67
+ # =============================================================================
68
+ # CONFIGURATION
69
+ # =============================================================================
70
+
71
+ # Service name (auto-detected from container or fallback to env var)
72
+ SERVICE_NAME="${SERVICE_NAME:-unknown-service}"
73
+
74
+ # Infisical configuration
75
+ INFISICAL_SITE_URL="${INFISICAL_SITE_URL:-https://app.infisical.com}"
76
+ INFISICAL_ENV="${INFISICAL_ENV:-dev}"
77
+ INFISICAL_SECRET_PATH="${INFISICAL_SECRET_PATH:-/services/${SERVICE_NAME}}"
78
+
79
+ # Check if Infisical is enabled (can be disabled for local dev)
80
+ INFISICAL_ENABLED="${INFISICAL_ENABLED:-true}"
81
+
82
+ # Database connectivity settings
83
+ DB_WAIT_TIMEOUT="${DB_WAIT_TIMEOUT:-60}"
84
+ DB_WAIT_INTERVAL="${DB_WAIT_INTERVAL:-2}"
85
+
86
+ # =============================================================================
87
+ # 🎯 INVERSION OF CONTROL - Tilt as Single Source of Truth
88
+ # =============================================================================
89
+ #
90
+ # Problem: Tilt creates databases but doesn't know what Infisical contains.
91
+ # This causes DATABASE_URL mismatch (e.g., tdk_project_staff vs staff_db_prod)
92
+ #
93
+ # Solution: TILT_* prefixed variables ALWAYS override Infisical secrets
94
+ # Tilt sets TILT_DATABASE_URL → we export it as DATABASE_URL BEFORE infisical run
95
+ #
96
+ # Variables that can be overridden by Tilt:
97
+ # - TILT_DATABASE_URL → DATABASE_URL
98
+ # - TILT_NATS_URL → NATS_URL
99
+ # - TILT_REDIS_URL → REDIS_URL
100
+ # - TILT_* → * (generic pattern)
101
+ # =============================================================================
102
+
103
+ # List of critical variables that Tilt can override
104
+ TILT_OVERRIDE_VARS="DATABASE_URL NATS_URL REDIS_URL DB_HOST DB_PORT DB_NAME DB_USER DB_PASSWORD"
105
+
106
+ # Track overrides for logging
107
+ TILT_OVERRIDES_APPLIED=0
108
+
109
+ apply_tilt_overrides() {
110
+ log_info "🎯 Checking for Tilt IoC overrides..."
111
+ local overrides_applied=0
112
+
113
+ for var_name in $TILT_OVERRIDE_VARS; do
114
+ tilt_var="TILT_${var_name}"
115
+ tilt_value=$(eval echo \$$tilt_var)
116
+
117
+ if [ -n "$tilt_value" ]; then
118
+ log_success " ✓ TILT_${var_name} overrides ${var_name}"
119
+ export "${var_name}=${tilt_value}"
120
+ overrides_applied=$((overrides_applied + 1))
121
+ TILT_OVERRIDES_APPLIED=$overrides_applied
122
+ fi
123
+ done
124
+
125
+ if [ $overrides_applied -eq 0 ]; then
126
+ log_info " No Tilt overrides found - using Infisical/defaults"
127
+ else
128
+ log_success " 🎯 Applied ${overrides_applied} Tilt override(s) - Tilt is SSOT!"
129
+ fi
130
+ }
131
+
132
+ # =============================================================================
133
+ # DATABASE VIRTUALIZATION FUNCTIONS (BigTech Pattern)
134
+ # =============================================================================
135
+ # Single PostgreSQL container with logical databases per service
136
+ # Saves ~80% RAM on Mac M1/M2 compared to 120 separate containers
137
+
138
+ wait_for_postgres() {
139
+ local db_host="$1"
140
+ local db_port="$2"
141
+ local db_name="$3"
142
+ local timeout="${DB_WAIT_TIMEOUT}"
143
+ local interval="${DB_WAIT_INTERVAL}"
144
+ local elapsed=0
145
+
146
+ log_db "🗃️ Waiting for PostgreSQL: ${db_host}:${db_port}/${db_name}"
147
+ log_db "⏱️ Timeout: ${timeout}s, Check interval: ${interval}s"
148
+
149
+ while [ $elapsed -lt $timeout ]; do
150
+ # TCP check first (port availability)
151
+ if nc -z "${db_host}" "${db_port}" 2>/dev/null; then
152
+ log_db "✓ PostgreSQL port ${db_port} is open"
153
+
154
+ # If we have psql, do a deeper health check
155
+ if command -v psql >/dev/null 2>&1; then
156
+ if PGPASSWORD="${db_password:-}" psql -h "${db_host}" -p "${db_port}" -U "${db_user:-tdk_project}" -d "${db_name}" -c "SELECT 1" >/dev/null 2>&1; then
157
+ log_success "✅ Database ${db_name} is ready!"
158
+ return 0
159
+ fi
160
+ else
161
+ # No psql available, trust TCP check
162
+ log_success "✅ PostgreSQL is reachable (TCP check passed)"
163
+ return 0
164
+ fi
165
+ fi
166
+
167
+ log_db "⏳ Waiting... (${elapsed}/${timeout}s)"
168
+ sleep $interval
169
+ elapsed=$((elapsed + interval))
170
+ done
171
+
172
+ log_warn "⚠️ Database connection timeout after ${timeout}s - proceeding anyway"
173
+ return 1
174
+ }
175
+
176
+ parse_database_url() {
177
+ # Parse DATABASE_URL: postgresql://user:password@host:port/dbname?schema=public
178
+ local url="$1"
179
+
180
+ # Extract components using sed
181
+ db_user=$(echo "$url" | sed -n 's|.*://\([^:]*\):.*|\1|p')
182
+ db_password=$(echo "$url" | sed -n 's|.*://[^:]*:\([^@]*\)@.*|\1|p')
183
+ db_host=$(echo "$url" | sed -n 's|.*@\([^:]*\):.*|\1|p')
184
+ db_port=$(echo "$url" | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
185
+ db_name=$(echo "$url" | sed -n 's|.*/\([^?]*\).*|\1|p')
186
+
187
+ # Export for use in other functions
188
+ export DB_USER="${db_user}"
189
+ export DB_PASSWORD="${db_password}"
190
+ export DB_HOST="${db_host}"
191
+ export DB_PORT="${db_port}"
192
+ export DB_NAME="${db_name}"
193
+ }
194
+
195
+ # =============================================================================
196
+ # INFISICAL VALIDATION
197
+ # =============================================================================
198
+
199
+ validate_infisical_config() {
200
+ local missing=""
201
+
202
+ if [ -z "$INFISICAL_CLIENT_ID" ]; then
203
+ missing="${missing}INFISICAL_CLIENT_ID "
204
+ fi
205
+
206
+ if [ -z "$INFISICAL_CLIENT_SECRET" ]; then
207
+ missing="${missing}INFISICAL_CLIENT_SECRET "
208
+ fi
209
+
210
+ if [ -z "$INFISICAL_PROJECT_ID" ]; then
211
+ missing="${missing}INFISICAL_PROJECT_ID "
212
+ fi
213
+
214
+ if [ -n "$missing" ]; then
215
+ log_warn "Missing Infisical config: ${missing}"
216
+ return 1
217
+ fi
218
+
219
+ return 0
220
+ }
221
+
222
+ # =============================================================================
223
+ # DATABASE CONNECTIVITY VALIDATION (Unified for Database Virtualization)
224
+ # =============================================================================
225
+
226
+ validate_database_connectivity() {
227
+ # Extract database info from DATABASE_URL if available
228
+ if [ -n "$DATABASE_URL" ]; then
229
+ parse_database_url "$DATABASE_URL"
230
+
231
+ log_info "🗃️ Database Virtualization Check:"
232
+ log_info " Host: ${DB_HOST:-unknown}"
233
+ log_info " Port: ${DB_PORT:-5432}"
234
+ log_info " Database: ${DB_NAME:-unknown}"
235
+ log_info " Service: ${SERVICE_NAME}"
236
+
237
+ # Wait for PostgreSQL to be ready
238
+ wait_for_postgres "${DB_HOST}" "${DB_PORT:-5432}" "${DB_NAME}"
239
+ else
240
+ log_warn "DATABASE_URL not set - skipping database connectivity check"
241
+ fi
242
+ }
243
+
244
+ # =============================================================================
245
+ # 📦 PRISMA AUTO-MIGRATION (Architect Level - Uber Pattern)
246
+ # =============================================================================
247
+ #
248
+ # Detects Prisma schema and runs migrations DIRECTLY without relying on
249
+ # package.json scripts. This removes human error dependency and ensures
250
+ # migrations always run regardless of script configuration.
251
+ #
252
+ # Benefits:
253
+ # - No dependency on package.json "db:migrate" script existing
254
+ # - Consistent migration behavior across all services
255
+ # - Self-healing: works even if package.json is misconfigured
256
+ # =============================================================================
257
+
258
+ AUTO_MIGRATE="${AUTO_MIGRATE:-true}"
259
+
260
+ run_prisma_migrations() {
261
+ # Skip if auto-migrate is disabled
262
+ if [ "$AUTO_MIGRATE" = "false" ] || [ "$AUTO_MIGRATE" = "0" ]; then
263
+ log_info "📦 Auto-migration disabled (AUTO_MIGRATE=false)"
264
+ return 0
265
+ fi
266
+
267
+ # Check for Prisma schema in common locations
268
+ local prisma_schema=""
269
+ if [ -f "./prisma/schema.prisma" ]; then
270
+ prisma_schema="./prisma/schema.prisma"
271
+ elif [ -f "./prisma/schema/schema.prisma" ]; then
272
+ prisma_schema="./prisma/schema/schema.prisma"
273
+ elif [ -f "./schema.prisma" ]; then
274
+ prisma_schema="./schema.prisma"
275
+ fi
276
+
277
+ if [ -n "$prisma_schema" ]; then
278
+ log_info "📦 Prisma schema found: ${prisma_schema}"
279
+
280
+ # Auto-resolve failed migrations (P3009) before deploying new ones.
281
+ # In dev/local environments, stale failed records in _prisma_migrations
282
+ # block all subsequent deploys. Resolve them automatically.
283
+ if [ -n "$DATABASE_URL" ]; then
284
+ local deploy_output
285
+ deploy_output=$(bunx prisma migrate deploy 2>&1) || true
286
+ if echo "$deploy_output" | grep -q "P3009"; then
287
+ log_warn "🔧 P3009: Found failed migration(s) — auto-resolving..."
288
+ # Extract migration name(s) from "The `<name>` migration ... failed" lines
289
+ echo "$deploy_output" | sed -n 's/.*The `\([^`]*\)` migration .* failed.*/\1/p' | while IFS= read -r migration_name; do
290
+ log_info " Rolling back: ${migration_name}"
291
+ bunx prisma migrate resolve --rolled-back "$migration_name" 2>&1 || true
292
+ done
293
+ # Retry deploy after resolving failed migrations
294
+ log_info "📦 Retrying database migrations..."
295
+ if bunx prisma migrate deploy 2>&1; then
296
+ log_success "✅ Database migrations completed successfully (after auto-resolve)"
297
+ else
298
+ log_warn "⚠️ Migration still failed after auto-resolve"
299
+ fi
300
+ elif echo "$deploy_output" | grep -q "applied successfully"; then
301
+ log_success "✅ Database migrations completed successfully"
302
+ else
303
+ # No P3009 and no success — could be "already in sync" or other info
304
+ echo "$deploy_output"
305
+ log_info "📦 Migration deploy completed (check output above)"
306
+ fi
307
+ else
308
+ log_warn "📦 DATABASE_URL not set — skipping migration deploy"
309
+ fi
310
+ else
311
+ log_info "📦 No Prisma schema found - skipping auto-migration"
312
+ fi
313
+ }
314
+
315
+ # =============================================================================
316
+ # MAIN EXECUTION
317
+ # =============================================================================
318
+
319
+ main() {
320
+ log_info "═══════════════════════════════════════════════════"
321
+ log_info "🚀 Starting service: ${SERVICE_NAME}"
322
+ log_info "🌍 Environment: ${INFISICAL_ENV}"
323
+ log_info "🔐 Secret path: ${INFISICAL_SECRET_PATH}"
324
+ log_info "🗃️ Database Virtualization: ENABLED (BigTech Pattern)"
325
+ log_info "🎯 Tilt IoC: ENABLED (Single Source of Truth)"
326
+ log_info "═══════════════════════════════════════════════════"
327
+
328
+ # 🎯 CRITICAL: Apply Tilt overrides FIRST (before anything else)
329
+ # This ensures TILT_DATABASE_URL becomes DATABASE_URL BEFORE:
330
+ # 1. validate_database_connectivity() uses it
331
+ # 2. infisical run potentially overwrites it
332
+ apply_tilt_overrides
333
+
334
+ # Check if Infisical is disabled
335
+ if [ "$INFISICAL_ENABLED" = "false" ] || [ "$INFISICAL_ENABLED" = "0" ]; then
336
+ log_warn "Infisical disabled - using direct environment variables"
337
+ validate_database_connectivity
338
+ run_prisma_migrations
339
+ exec "$@"
340
+ fi
341
+
342
+ # Check if infisical CLI is available
343
+ if ! command -v infisical >/dev/null 2>&1; then
344
+ log_warn "Infisical CLI not found - using direct environment variables"
345
+ validate_database_connectivity
346
+ run_prisma_migrations
347
+ exec "$@"
348
+ fi
349
+
350
+ # Validate Infisical configuration
351
+ if ! validate_infisical_config; then
352
+ log_warn "Infisical not configured - falling back to environment variables"
353
+ validate_database_connectivity
354
+ run_prisma_migrations
355
+ exec "$@"
356
+ fi
357
+
358
+ log_success "Infisical configured ✓"
359
+
360
+ # Authenticate with Machine Identity (Universal Auth)
361
+ # This is NON-INTERACTIVE - uses client ID/secret from env vars
362
+ log_info "Authenticating with Machine Identity..."
363
+
364
+ if ! infisical login --method=universal-auth \
365
+ --client-id="$INFISICAL_CLIENT_ID" \
366
+ --client-secret="$INFISICAL_CLIENT_SECRET" \
367
+ --domain="$INFISICAL_SITE_URL" \
368
+ --silent 2>/dev/null; then
369
+ log_warn "Machine Identity auth failed - falling back to environment variables"
370
+ validate_database_connectivity
371
+ run_prisma_migrations
372
+ exec "$@"
373
+ fi
374
+
375
+ log_success "Authenticated ✓"
376
+
377
+ # Validate database connectivity BEFORE starting the app
378
+ # This ensures the shared PostgreSQL is ready (Database Virtualization pattern)
379
+ validate_database_connectivity
380
+
381
+ # 📦 PRISMA AUTO-MIGRATION with Infisical context
382
+ # Run migrations INSIDE infisical run so DATABASE_URL from secrets is available
383
+ # Includes P3009 auto-resolve: marks stale failed migrations as rolled-back
384
+ log_info "📦 Running Prisma migrations with Infisical secrets..."
385
+ infisical run \
386
+ --domain="$INFISICAL_SITE_URL" \
387
+ --projectId="$INFISICAL_PROJECT_ID" \
388
+ --env="$INFISICAL_ENV" \
389
+ --path="$INFISICAL_SECRET_PATH" \
390
+ --expand=false \
391
+ --silent \
392
+ -- sh -c '
393
+ if [ -f "./prisma/schema.prisma" ] || [ -f "./prisma/schema/schema.prisma" ]; then
394
+ output=$(bunx prisma migrate deploy 2>&1) || true
395
+ if echo "$output" | grep -q "P3009"; then
396
+ echo "[ENTRYPOINT] 🔧 P3009: Auto-resolving failed migration(s)..."
397
+ echo "$output" | sed -n "s/.*The \`\([^\`]*\)\` migration .* failed.*/\1/p" | while IFS= read -r mig; do
398
+ echo "[ENTRYPOINT] Rolling back: $mig"
399
+ bunx prisma migrate resolve --rolled-back "$mig" 2>&1 || true
400
+ done
401
+ echo "[ENTRYPOINT] 📦 Retrying migrations..."
402
+ bunx prisma migrate deploy 2>&1 || echo "[ENTRYPOINT] ⚠️ Migration still failed after auto-resolve"
403
+ else
404
+ echo "$output"
405
+ fi
406
+ fi
407
+ ' || true
408
+
409
+ # Execute with Infisical secret injection
410
+ # 🎯 CRITICAL FIX: Instead of using `infisical run` (which always overwrites existing env vars),
411
+ # we fetch secrets and only export vars that aren't already set. This preserves TILT_* overrides.
412
+ # Precedence: TILT_* > Infisical > Defaults
413
+
414
+ log_info "Fetching secrets from Infisical..."
415
+
416
+ # Fetch secrets in plain format (KEY=VALUE per line)
417
+ # Use a temporary file to capture output safely
418
+ temp_secrets=$(mktemp)
419
+ trap "rm -f $temp_secrets" EXIT
420
+
421
+ infisical secrets \
422
+ --domain="$INFISICAL_SITE_URL" \
423
+ --projectId="$INFISICAL_PROJECT_ID" \
424
+ --env="$INFISICAL_ENV" \
425
+ --path="$INFISICAL_SECRET_PATH" \
426
+ --expand=false \
427
+ --plain \
428
+ --silent > "$temp_secrets" 2>/dev/null || true
429
+
430
+ # Only export secrets that aren't already set in the environment
431
+ # This preserves TILT_DATABASE_URL -> DATABASE_URL override
432
+ secrets_exported=0
433
+ if [ -s "$temp_secrets" ]; then
434
+ while IFS= read -r line; do
435
+ # Skip empty lines
436
+ [ -z "$line" ] && continue
437
+
438
+ # Split on first = only (in case value contains =)
439
+ key="${line%%=*}"
440
+ value="${line#*=}"
441
+
442
+ # Only export if not already set in environment
443
+ eval "current_val=\$$key"
444
+ if [ -z "$current_val" ]; then
445
+ export "${key}=${value}"
446
+ secrets_exported=$((secrets_exported + 1))
447
+ fi
448
+ done < "$temp_secrets"
449
+ fi
450
+
451
+ log_success "Injected ${secrets_exported} secret(s) from Infisical (preserving ${TILT_OVERRIDES_APPLIED} TILT override(s))"
452
+ log_info "🎯 Final DATABASE_URL: ${DATABASE_URL:-not-set}"
453
+ log_success "🎉 Service ${SERVICE_NAME} starting with Database Virtualization!"
454
+
455
+ exec "$@"
456
+ }
457
+
458
+ # Handle the case where no command is provided
459
+ if [ $# -eq 0 ]; then
460
+ log_error "No command provided"
461
+ log_info "Usage: /entrypoint.sh <command> [args...]"
462
+ log_info "Example: /entrypoint.sh bun run src/index.ts"
463
+ exit 1
464
+ fi
465
+
466
+ main "$@"
@@ -0,0 +1,154 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ set -e
5
+
6
+ # =============================================================================
7
+ # CRITICAL FIX: Bun concurrency and DNS settings for Docker/Colima
8
+ # These prevent "Resolving dependencies" hang
9
+ # =============================================================================
10
+ export BUN_INSTALL_CONCURRENCY=4 # Default is 16+, reduce for Docker
11
+ export UV_THREADPOOL_SIZE=4 # Limit threads (default is 128)
12
+ export BUN_NETWORK_TIMEOUT=30000 # 30s timeout per request
13
+ export BUN_RESOLVE_TIMEOUT=60000 # 60s for resolution phase
14
+
15
+ # DNS fixes for Colima/Docker
16
+ export NODE_OPTIONS="--dns-result-order=ipv4first"
17
+
18
+ start_ts=$(date +%s)
19
+ echo "⏱️ install-deps start: $(date '+%Y-%m-%d %H:%M:%S %z')"
20
+ echo "🔧 Bun concurrency: $BUN_INSTALL_CONCURRENCY, Threadpool: $UV_THREADPOOL_SIZE"
21
+
22
+ finish_install_timer() {
23
+ end_ts=$(date +%s)
24
+ echo "install-deps duration: $((end_ts-start_ts))s"
25
+ }
26
+ trap 'finish_install_timer' EXIT INT TERM
27
+
28
+ export NODE_ENV=development
29
+
30
+ # Use persistent cache directory (Docker layer, not mount)
31
+ export BUN_INSTALL_CACHE_DIR=/cache/bun
32
+ mkdir -p $BUN_INSTALL_CACHE_DIR
33
+
34
+ # =============================================================================
35
+ # Check Verdaccio registry (premium feature — only required when VERDACCIO_LICENSE_KEY is set)
36
+ # Without a license key, skip Verdaccio and fall back to public npm registry.
37
+ # =============================================================================
38
+ if [ -z "${TDK_LICENSE_KEY:-}" ]; then
39
+ echo "ℹ️ TDK_LICENSE_KEY not set — skipping private registry (public npm only)"
40
+ VERDACCIO_URL=""
41
+ else
42
+ VERDACCIO_URL="http://localhost:4873"
43
+ echo "🔍 Checking Verdaccio registry at $VERDACCIO_URL..."
44
+ if ! wget -q --spider --timeout=3 "$VERDACCIO_URL" 2>/dev/null; then
45
+ VERDACCIO_URL="http://host.docker.internal:4873"
46
+ echo " localhost unreachable, trying $VERDACCIO_URL..."
47
+ if ! wget -q --spider --timeout=3 "$VERDACCIO_URL" 2>/dev/null; then
48
+ echo "❌ Verdaccio not reachable at localhost:4873 or host.docker.internal:4873. Build will fail."
49
+ echo " Ensure Verdaccio is running: docker ps | grep verdaccio"
50
+ exit 1
51
+ fi
52
+ fi
53
+ echo "✅ Verdaccio available at $VERDACCIO_URL"
54
+ fi
55
+
56
+ # =============================================================================
57
+ # CRITICAL FIX: Reduced timeout for faster failure detection (was 900s)
58
+ # Using 60s to fail fast and retry, rather than hanging for 15 minutes
59
+ # =============================================================================
60
+ # CRITICAL FIX: Extended timeout for full dependency resolution
61
+ # 60s was too short - packages resolve but need time for transitive deps
62
+ INSTALL_TIMEOUT_SECONDS="${BUN_INSTALL_TIMEOUT_SECONDS:-300}"
63
+ echo "📦 Dependency install timeout: ${INSTALL_TIMEOUT_SECONDS}s (Verdaccio packages available)"
64
+
65
+ INSTALL_DEPS_VERBOSE="${INSTALL_DEPS_VERBOSE:-0}"
66
+ if [ "$INSTALL_DEPS_VERBOSE" = "1" ]; then
67
+ echo "🚀 Installing dependencies (verbose)..."
68
+ BUN_VERBOSE_FLAG="--verbose"
69
+ FAIL_TAIL_LINES=200
70
+ else
71
+ echo "📦 Installing dependencies..."
72
+ BUN_VERBOSE_FLAG=""
73
+ FAIL_TAIL_LINES=50
74
+ fi
75
+
76
+ BUN_INSTALL_LOG=/tmp/bun-install.log
77
+
78
+ # Start tail in background for live logging
79
+ touch "$BUN_INSTALL_LOG"
80
+ tail -n 20 -f "$BUN_INSTALL_LOG" 2>/dev/null &
81
+ TAIL_PID=$!
82
+ cleanup_tail() {
83
+ kill "$TAIL_PID" 2>/dev/null || true
84
+ }
85
+ trap 'cleanup_tail; finish_install_timer' EXIT INT TERM
86
+
87
+ # =============================================================================
88
+ # Cache configuration: Use persistent Docker layer path
89
+ # =============================================================================
90
+ # Uses /cache/bun (persistent Docker layer path, not a mount).
91
+ # This avoids the "FileNotFound when create temporary directory" bug
92
+ # that occurs with Docker --mount=type=cache, while still persisting
93
+ # cache across rebuilds via Docker layer caching.
94
+ echo "🔧 Using /cache/bun for Bun cache (persistent Docker layer)..."
95
+ export BUN_CACHE_DIR="/cache/bun"
96
+ mkdir -p "$BUN_CACHE_DIR"
97
+ BUN_CACHE_FLAG="--cache-dir=/cache/bun"
98
+ echo "📁 Cache location: /cache/bun"
99
+
100
+ # =============================================================================
101
+ # Install function with timeout and logging
102
+ # Uses constrained concurrency to prevent "Resolving dependencies" hang
103
+ # =============================================================================
104
+ run_install() {
105
+ local args="$1"
106
+ local attempt="$2"
107
+
108
+ echo "📌 Attempt $attempt: bun install $args (concurrency: $BUN_INSTALL_CONCURRENCY)"
109
+ set +e
110
+ # Use timeout with explicit concurrency limit
111
+ timeout "$INSTALL_TIMEOUT_SECONDS" \
112
+ bun install $args \
113
+ --concurrent-tasks "$BUN_INSTALL_CONCURRENCY" \
114
+ --concurrent-scripts "$BUN_INSTALL_CONCURRENCY" \
115
+ $BUN_CACHE_FLAG $BUN_VERBOSE_FLAG >"$BUN_INSTALL_LOG" 2>&1
116
+ local code=$?
117
+ set -e
118
+ return $code
119
+ }
120
+
121
+ # =============================================================================
122
+ # Install with lockfile but allow updates within resolved ranges
123
+ # =============================================================================
124
+ ATTEMPT=1
125
+ INSTALL_CODE=0
126
+
127
+ run_install "--force" $ATTEMPT
128
+ INSTALL_CODE=$?
129
+ ATTEMPT=$((ATTEMPT + 1))
130
+
131
+ cleanup_tail
132
+
133
+ # =============================================================================
134
+ # Final status check
135
+ # =============================================================================
136
+ if [ "$INSTALL_CODE" -ne 0 ]; then
137
+ echo "❌ Dependency installation failed after $((ATTEMPT - 1)) attempts (exit $INSTALL_CODE). Last ${FAIL_TAIL_LINES} lines:"
138
+ tail -n "$FAIL_TAIL_LINES" "$BUN_INSTALL_LOG"
139
+ exit 1
140
+ fi
141
+
142
+ if [ ! -d "node_modules" ] || [ -z "$(ls -A node_modules 2>/dev/null)" ]; then
143
+ echo "❌ Dependency installation produced empty node_modules. Last ${FAIL_TAIL_LINES} lines:"
144
+ tail -n "$FAIL_TAIL_LINES" "$BUN_INSTALL_LOG"
145
+ exit 1
146
+ fi
147
+
148
+ echo "✅ Dependency installation complete"
149
+ if [ "$INSTALL_DEPS_VERBOSE" = "1" ]; then
150
+ echo "📊 Total packages: $(ls node_modules 2>/dev/null | wc -l)"
151
+ du -sh node_modules 2>/dev/null || true
152
+ fi
153
+
154
+ # No cache cleanup needed (--no-cache flag used)
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ # Copyright (c) 2026 Flisk contributors
3
+ # SPDX-License-Identifier: MIT
4
+ set -e
5
+
6
+ # Fix Bun module resolution: .prisma/client must be reachable from .bun linker paths.
7
+ for dir in node_modules/.bun/@prisma+client*/node_modules; do
8
+ [ -d "$dir" ] && ln -sf "$(pwd)/node_modules/.prisma" "$dir/.prisma" || true
9
+ done
10
+
11
+ # Also fix malformed @prisma/client package.json in Bun cache if present.
12
+ for pkg in node_modules/.bun/@prisma+client*/node_modules/@prisma/client/package.json; do
13
+ [ -f "$pkg" ] && echo '{"name":"@prisma/client","main":"index.js","types":"index.d.ts"}' > "$pkg" || true
14
+ done