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