@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,40 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🔐 INFISICAL DOCKER LAYERS - Master Index
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Centralizes all Infisical-related Docker layer functionality
|
|
5
|
+
# =============================================================================
|
|
6
|
+
#
|
|
7
|
+
# This module provides:
|
|
8
|
+
# - Dockerfile generation for Infisical integration
|
|
9
|
+
# - Secret injection at runtime (L4 layers)
|
|
10
|
+
# - CLI setup at build time (L3 layers)
|
|
11
|
+
# - Prisma migrator secret resolution
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# load("./infisical/index.star", "InfisicalLayers")
|
|
15
|
+
#
|
|
16
|
+
# # Runtime setup
|
|
17
|
+
# dockerfile_snippet = InfisicalLayers.Docker.runtime_setup("my-service")
|
|
18
|
+
#
|
|
19
|
+
# # Builder setup
|
|
20
|
+
# builder_snippet = InfisicalLayers.Docker.builder_setup(use_infisical=True)
|
|
21
|
+
#
|
|
22
|
+
# # Environment for docker-compose
|
|
23
|
+
# env = InfisicalLayers.Docker.generate_compose_env("my-service")
|
|
24
|
+
# =============================================================================
|
|
25
|
+
|
|
26
|
+
# Load all Infisical Docker submodules
|
|
27
|
+
load("./infisical_docker.star", "InfisicalDocker")
|
|
28
|
+
|
|
29
|
+
# =============================================================================
|
|
30
|
+
# Exports
|
|
31
|
+
# =============================================================================
|
|
32
|
+
|
|
33
|
+
InfisicalLayers = struct(
|
|
34
|
+
# Main Docker integration
|
|
35
|
+
Docker=InfisicalDocker,
|
|
36
|
+
|
|
37
|
+
# Constants
|
|
38
|
+
ENTRYPOINT_PATH=InfisicalDocker.ENTRYPOINT_PATH,
|
|
39
|
+
ENTRYPOINT_SOURCE=InfisicalDocker.ENTRYPOINT_SOURCE,
|
|
40
|
+
)
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🔐 INFISICAL DOCKER INTEGRATION
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Replaces: Hardcoded infisical-entrypoint.sh references in Dockerfile generation
|
|
5
|
+
# Uses: Starlark generators for secret configuration
|
|
6
|
+
# =============================================================================
|
|
7
|
+
#
|
|
8
|
+
# This module provides:
|
|
9
|
+
# - Dockerfile generation for Infisical secret injection
|
|
10
|
+
# - Environment variable configuration using Starlark generators
|
|
11
|
+
# - Entrypoint setup with proper secret paths
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# load("./infisical_docker.star", "InfisicalDocker")
|
|
15
|
+
# dockerfile_snippet = InfisicalDocker.runtime_setup("my-service", "/services/my-service")
|
|
16
|
+
# =============================================================================
|
|
17
|
+
|
|
18
|
+
# Load the generators
|
|
19
|
+
load("../../../../tilt/generators/infisical/secrets_generator.star", _Secrets="SecretsGenerator")
|
|
20
|
+
load("../../../../tilt/generators/infisical/path_manager.star", _Paths="PathManager")
|
|
21
|
+
|
|
22
|
+
# =============================================================================
|
|
23
|
+
# Constants
|
|
24
|
+
# =============================================================================
|
|
25
|
+
|
|
26
|
+
ENTRYPOINT_PATH = "/entrypoint.sh"
|
|
27
|
+
ENTRYPOINT_SOURCE = "shared-platform-engineering/docker-templates/infisical-entrypoint.sh"
|
|
28
|
+
|
|
29
|
+
# =============================================================================
|
|
30
|
+
# Runtime Secret Injection (L4 Runtime Layers)
|
|
31
|
+
# =============================================================================
|
|
32
|
+
|
|
33
|
+
def _runtime_setup(resource_name, secret_path=None, resource_type="backend", command="bun run start", use_entrypoint=True):
|
|
34
|
+
"""
|
|
35
|
+
Generate Dockerfile snippet for Infisical runtime setup.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
resource_name: Name of the service
|
|
39
|
+
secret_path: Infisical path (default: auto-generated from resource_name)
|
|
40
|
+
resource_type: Type of service (backend, frontend, worker, etc.)
|
|
41
|
+
command: Command to run after secret injection
|
|
42
|
+
use_entrypoint: Whether to use entrypoint.sh (default: True)
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
String with Dockerfile commands for runtime setup
|
|
46
|
+
"""
|
|
47
|
+
# Auto-generate secret path if not provided
|
|
48
|
+
if not secret_path:
|
|
49
|
+
path_plan = _Paths.plan_resource_path(resource_name, resource_type)
|
|
50
|
+
secret_path = path_plan["full_path"]
|
|
51
|
+
|
|
52
|
+
# Generate configuration using the Starlark generator
|
|
53
|
+
config = _Secrets.generate_for_service(
|
|
54
|
+
resource_name=resource_name,
|
|
55
|
+
secret_path=secret_path,
|
|
56
|
+
resource_type=resource_type,
|
|
57
|
+
command=command,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Extract environment variables from the config
|
|
61
|
+
env_vars = config["docker_compose"]["environment"]
|
|
62
|
+
|
|
63
|
+
parts = []
|
|
64
|
+
|
|
65
|
+
if use_entrypoint:
|
|
66
|
+
# Copy entrypoint script
|
|
67
|
+
parts.append("COPY --chmod=0755 {} {}\n".format(ENTRYPOINT_SOURCE, ENTRYPOINT_PATH))
|
|
68
|
+
|
|
69
|
+
# Set environment variables
|
|
70
|
+
for key, value in env_vars.items():
|
|
71
|
+
# Handle env var references properly
|
|
72
|
+
if value.startswith("${") and value.endswith("}"):
|
|
73
|
+
parts.append("ENV {}={}\n".format(key, value))
|
|
74
|
+
else:
|
|
75
|
+
parts.append("ENV {}=\"{}\"\n".format(key, value))
|
|
76
|
+
|
|
77
|
+
# Set RESOURCE_NAME explicitly
|
|
78
|
+
parts.append("ENV RESOURCE_NAME={}\n".format(resource_name))
|
|
79
|
+
|
|
80
|
+
# Set entrypoint
|
|
81
|
+
parts.append("ENTRYPOINT [\"{}\"]\n".format(ENTRYPOINT_PATH))
|
|
82
|
+
|
|
83
|
+
# Set command
|
|
84
|
+
cmd_parts = command.split()
|
|
85
|
+
cmd_json = ", ".join(["\"{}\"".format(p) for p in cmd_parts])
|
|
86
|
+
parts.append("CMD [{}]\n".format(cmd_json))
|
|
87
|
+
else:
|
|
88
|
+
# Without entrypoint, just set env vars and use direct command
|
|
89
|
+
for key, value in env_vars.items():
|
|
90
|
+
parts.append("ENV {}={}\n".format(key, value))
|
|
91
|
+
parts.append("CMD [\"{}\"]\n".format(command))
|
|
92
|
+
|
|
93
|
+
return "".join(parts)
|
|
94
|
+
|
|
95
|
+
def _runtime_setup_simple(resource_name, use_entrypoint=True):
|
|
96
|
+
"""
|
|
97
|
+
Simple runtime setup using known service configuration.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
resource_name: Name of the service
|
|
101
|
+
use_entrypoint: Whether to use entrypoint.sh
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
String with Dockerfile commands
|
|
105
|
+
"""
|
|
106
|
+
# Try to get known path
|
|
107
|
+
secret_path = _Paths.get_known_resource_path(resource_name)
|
|
108
|
+
|
|
109
|
+
if not secret_path:
|
|
110
|
+
# Plan a new path
|
|
111
|
+
path_plan = _Paths.plan_resource_path(resource_name)
|
|
112
|
+
secret_path = path_plan["full_path"]
|
|
113
|
+
|
|
114
|
+
return _runtime_setup(
|
|
115
|
+
resource_name=resource_name,
|
|
116
|
+
secret_path=secret_path,
|
|
117
|
+
use_entrypoint=use_entrypoint,
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
# =============================================================================
|
|
121
|
+
# Builder Secret Injection (L3 Builder Layers)
|
|
122
|
+
# =============================================================================
|
|
123
|
+
|
|
124
|
+
def _builder_setup(use_infisical=True, use_golden=True):
|
|
125
|
+
"""
|
|
126
|
+
Generate Dockerfile snippet for builder Infisical CLI setup.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
use_infisical: Whether to include Infisical CLI setup
|
|
130
|
+
use_golden: Whether using golden image (skips CLI install)
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
String with Dockerfile commands for builder setup
|
|
134
|
+
"""
|
|
135
|
+
if not use_infisical or use_golden:
|
|
136
|
+
return ""
|
|
137
|
+
|
|
138
|
+
# Only install Infisical CLI if not skipped AND not using golden image
|
|
139
|
+
return (
|
|
140
|
+
"# Conditionally install Infisical CLI only if not skipped\n"
|
|
141
|
+
+ "RUN if [ \"$SKIP_INFISICAL_SETUP\" != \"1\" ]; then \\\n"
|
|
142
|
+
+ " echo \"\u26a0\ufe0f Installing Infisical CLI...\" && \\\n"
|
|
143
|
+
+ " apk add --no-cache bash curl netcat-openbsd && \\\n"
|
|
144
|
+
+ " curl -sL https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.alpine.sh | bash && \\\n"
|
|
145
|
+
+ " apk add --no-cache infisical; \\\n"
|
|
146
|
+
+ " else \\\n"
|
|
147
|
+
+ " echo \"\u2705 Skipping Infisical CLI installation (SKIP_INFISICAL_SETUP=1)\"; \\\n"
|
|
148
|
+
+ " fi\n"
|
|
149
|
+
+ "COPY --chmod=0755 {} {}\n".format(ENTRYPOINT_SOURCE, ENTRYPOINT_PATH)
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
# =============================================================================
|
|
153
|
+
# Environment Variable Generation (for docker-compose)
|
|
154
|
+
# =============================================================================
|
|
155
|
+
|
|
156
|
+
def _generate_compose_env(resource_name, secret_path=None, resource_type="backend", additional_vars=None):
|
|
157
|
+
"""
|
|
158
|
+
Generate environment variables for docker-compose.
|
|
159
|
+
|
|
160
|
+
Args:
|
|
161
|
+
resource_name: Name of the service
|
|
162
|
+
secret_path: Infisical path
|
|
163
|
+
resource_type: Type of service
|
|
164
|
+
additional_vars: Additional environment variables
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
Dict of environment variables for docker-compose
|
|
168
|
+
"""
|
|
169
|
+
if not secret_path:
|
|
170
|
+
secret_path = _Paths.get_known_resource_path(resource_name)
|
|
171
|
+
if not secret_path:
|
|
172
|
+
path_plan = _Paths.plan_resource_path(resource_name, resource_type)
|
|
173
|
+
secret_path = path_plan["full_path"]
|
|
174
|
+
|
|
175
|
+
config = _Secrets.generate_for_service(
|
|
176
|
+
resource_name=resource_name,
|
|
177
|
+
secret_path=secret_path,
|
|
178
|
+
resource_type=resource_type,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
env = config["docker_compose"]["environment"]
|
|
182
|
+
|
|
183
|
+
if additional_vars:
|
|
184
|
+
env.update(additional_vars)
|
|
185
|
+
|
|
186
|
+
return env
|
|
187
|
+
|
|
188
|
+
# =============================================================================
|
|
189
|
+
# Secret Path Resolution (for Prisma/migrators)
|
|
190
|
+
# =============================================================================
|
|
191
|
+
|
|
192
|
+
def _resolve_secret_path(resource_name, default_subpath="/database"):
|
|
193
|
+
"""
|
|
194
|
+
Resolve the secret path for database operations.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
resource_name: Name of the service
|
|
198
|
+
default_subpath: Default subpath for database secrets
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
String with the full secret path
|
|
202
|
+
"""
|
|
203
|
+
base_path = _Paths.get_known_resource_path(resource_name)
|
|
204
|
+
|
|
205
|
+
if not base_path:
|
|
206
|
+
path_plan = _Paths.plan_resource_path(resource_name)
|
|
207
|
+
base_path = path_plan["full_path"]
|
|
208
|
+
|
|
209
|
+
return "{}{}".format(base_path, default_subpath)
|
|
210
|
+
|
|
211
|
+
def _generate_migrator_env(resource_name, db_name=None):
|
|
212
|
+
"""
|
|
213
|
+
Generate environment variables for database migrator.
|
|
214
|
+
|
|
215
|
+
Args:
|
|
216
|
+
resource_name: Name of the service
|
|
217
|
+
db_name: Database name (optional)
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
Dict of environment variables
|
|
221
|
+
"""
|
|
222
|
+
secret_path = _resolve_secret_path(resource_name)
|
|
223
|
+
|
|
224
|
+
env = {
|
|
225
|
+
"RESOURCE_NAME": resource_name,
|
|
226
|
+
"INFISICAL_SECRET_PATH": secret_path,
|
|
227
|
+
"INFISICAL_TOKEN": "${INFISICAL_TOKEN:-}",
|
|
228
|
+
"INFISICAL_CLIENT_ID": "${INFISICAL_CLIENT_ID:-}",
|
|
229
|
+
"INFISICAL_CLIENT_SECRET": "${INFISICAL_CLIENT_SECRET:-}",
|
|
230
|
+
"INFISICAL_API_URL": "${INFISICAL_API_URL:-http://infisical:8080}",
|
|
231
|
+
"INFISICAL_PROJECT_ID": "${INFISICAL_PROJECT_ID:-}",
|
|
232
|
+
"INFISICAL_ENVIRONMENT": "${INFISICAL_ENVIRONMENT:-dev}",
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if db_name:
|
|
236
|
+
env["DATABASE_NAME"] = db_name
|
|
237
|
+
|
|
238
|
+
return env
|
|
239
|
+
|
|
240
|
+
# =============================================================================
|
|
241
|
+
# Main Public API
|
|
242
|
+
# =============================================================================
|
|
243
|
+
|
|
244
|
+
InfisicalDocker = struct(
|
|
245
|
+
# Runtime setup (L4 layers)
|
|
246
|
+
runtime_setup=_runtime_setup,
|
|
247
|
+
runtime_setup_simple=_runtime_setup_simple,
|
|
248
|
+
|
|
249
|
+
# Builder setup (L3 layers)
|
|
250
|
+
builder_setup=_builder_setup,
|
|
251
|
+
|
|
252
|
+
# Environment generation
|
|
253
|
+
generate_compose_env=_generate_compose_env,
|
|
254
|
+
generate_migrator_env=_generate_migrator_env,
|
|
255
|
+
|
|
256
|
+
# Path resolution
|
|
257
|
+
resolve_secret_path=_resolve_secret_path,
|
|
258
|
+
|
|
259
|
+
# Constants
|
|
260
|
+
ENTRYPOINT_PATH=ENTRYPOINT_PATH,
|
|
261
|
+
ENTRYPOINT_SOURCE=ENTRYPOINT_SOURCE,
|
|
262
|
+
)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""
|
|
2
|
+
L1 Base Layers - OS and Runtime Environment Foundation
|
|
3
|
+
|
|
4
|
+
Provides the foundational layers for all Dockerfiles:
|
|
5
|
+
- l1_os_base: Alpine Linux base with essential tools
|
|
6
|
+
- l1_runtime_env: Runtime environment variables
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
BUN_BASE = "oven/bun:1.3.11-alpine"
|
|
10
|
+
ALPINE_BASE = "alpine:3.18"
|
|
11
|
+
load('../../../../../discovery/config.star', 'GLOBAL_CONFIG')
|
|
12
|
+
|
|
13
|
+
# Load project name for dynamic golden image naming
|
|
14
|
+
# Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
|
|
15
|
+
def _load_golden_prefix():
|
|
16
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
17
|
+
project_json_path = '.tdk/project.json'
|
|
18
|
+
if project_root:
|
|
19
|
+
project_json_path = project_root + '/' + project_json_path
|
|
20
|
+
|
|
21
|
+
if os.path.exists(project_json_path):
|
|
22
|
+
_project_json = read_json(project_json_path)
|
|
23
|
+
return _project_json.get('project', {}).get('name', 'tdk-project')
|
|
24
|
+
return 'tdk-project'
|
|
25
|
+
|
|
26
|
+
_GOLDEN_PREFIX = _load_golden_prefix()
|
|
27
|
+
|
|
28
|
+
GOLDEN_L1_IMAGE = GLOBAL_CONFIG['docker'].get('golden_l1_image', _GOLDEN_PREFIX + '-l1:latest')
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def L1_generate_os_base(base_image = None, maintainer = None, use_golden = True):
|
|
32
|
+
"""
|
|
33
|
+
Generate the OS base layer with Alpine Linux and essential tools.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
base_image: Base image to use (default: {prefix}-l1:latest if use_golden=True, else Alpine 3.18)
|
|
37
|
+
maintainer: Maintainer label (default: project name from project.json)
|
|
38
|
+
use_golden: Whether to use the golden L1 image (default: True)
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Dockerfile content string for the l1_os_base stage
|
|
42
|
+
"""
|
|
43
|
+
if base_image == None:
|
|
44
|
+
base_image = GOLDEN_L1_IMAGE if use_golden else ALPINE_BASE
|
|
45
|
+
|
|
46
|
+
# Set default maintainer from project name
|
|
47
|
+
if maintainer == None:
|
|
48
|
+
maintainer = _GOLDEN_PREFIX
|
|
49
|
+
|
|
50
|
+
# If using golden L1 image, skip dependency installation (already in base)
|
|
51
|
+
if base_image == GOLDEN_L1_IMAGE or _GOLDEN_PREFIX + "-l1" in base_image:
|
|
52
|
+
return (
|
|
53
|
+
"# ---- L1: os_base (Golden L1: " + base_image + ") ----\n"
|
|
54
|
+
+ "FROM " + base_image + " AS l1_os_base\n"
|
|
55
|
+
+ "# OS dependencies pre-installed in golden L1 image\n"
|
|
56
|
+
+ "WORKDIR /app\n"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# Standard base with dependency installation
|
|
60
|
+
return (
|
|
61
|
+
"# ---- L1: os_base (" + base_image + ") ----\n"
|
|
62
|
+
+ "FROM " + base_image + " AS l1_os_base\n"
|
|
63
|
+
+ "LABEL maintainer=\"" + maintainer + "\"\n"
|
|
64
|
+
+ "RUN apk add --no-cache ca-certificates tzdata curl file bash openssl \\\n"
|
|
65
|
+
+ " && addgroup -S app && adduser -S app -G app\n"
|
|
66
|
+
+ "WORKDIR /app\n"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def L1_generate_runtime_env(envs = None):
|
|
71
|
+
"""
|
|
72
|
+
Generate the runtime environment variables layer.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
envs: Dictionary of environment variables (default: production settings)
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Dockerfile content string for the l1_runtime_env stage
|
|
79
|
+
"""
|
|
80
|
+
if envs == None:
|
|
81
|
+
envs = {"NODE_ENV": "production", "BUN_INSTALL_CACHE_DIR": "/cache/bun"}
|
|
82
|
+
parts = ["# ---- L1: runtime_env ----\n", "# Shared runtime environment\n"]
|
|
83
|
+
for k in envs:
|
|
84
|
+
parts.append("ENV " + k + "=" + envs[k] + "\n")
|
|
85
|
+
return "".join(parts)
|
|
86
|
+
|
|
87
|
+
GLOBAL_CONFIG = {}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
2
|
+
RUNTIME = "bun"
|
|
3
|
+
# === END INLINED CONSTANTS ===
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
L2 Dependency Layers - Package Manifest and Dependency Resolution
|
|
8
|
+
|
|
9
|
+
Handles the dependency layers for efficient Docker caching:
|
|
10
|
+
- l2_dependency_manifest: Copy and install package manifests
|
|
11
|
+
- l2_dependency_resolver: Cache resolved dependencies
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
load('./l1_base_layers.star', 'BUN_BASE')
|
|
15
|
+
load('../../../../../discovery/config.star', 'GLOBAL_CONFIG')
|
|
16
|
+
load('../../../tilt/common/utils_debug.star', 'DEBUG_MODE')
|
|
17
|
+
load('../../../tilt/manifest/constants.star', 'AUTOGENERATED_CONFIG_PATHS', 'GENERATED_CONFIG_FILENAMES')
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# Load project name for dynamic golden image naming
|
|
21
|
+
# Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
|
|
22
|
+
def _load_golden_prefix():
|
|
23
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
24
|
+
project_json_path = '.tdk/project.json'
|
|
25
|
+
if project_root:
|
|
26
|
+
project_json_path = project_root + '/' + project_json_path
|
|
27
|
+
|
|
28
|
+
if os.path.exists(project_json_path):
|
|
29
|
+
_project_json = read_json(project_json_path)
|
|
30
|
+
return _project_json.get('project', {}).get('name', 'tdk-project')
|
|
31
|
+
return 'tdk-project'
|
|
32
|
+
|
|
33
|
+
_GOLDEN_PREFIX = _load_golden_prefix()
|
|
34
|
+
|
|
35
|
+
GOLDEN_L2_IMAGE = GLOBAL_CONFIG['docker'].get('golden_l2_image', _GOLDEN_PREFIX + '-l2:latest')
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def normalize_res_path(res_path):
|
|
39
|
+
"""Normalize resource path for Docker COPY commands.
|
|
40
|
+
|
|
41
|
+
Docker COPY requires paths relative to the build context.
|
|
42
|
+
If res_path starts with '/', remove it to make it relative.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
res_path: Resource path (may be absolute or relative)
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
Normalized relative path for Docker COPY
|
|
49
|
+
"""
|
|
50
|
+
if res_path.startswith('/'):
|
|
51
|
+
return res_path[1:] # Remove leading slash
|
|
52
|
+
return res_path
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def L2_generate_dependency_manifest(res_path, manager = RUNTIME, use_golden = True):
|
|
56
|
+
"""
|
|
57
|
+
Generate the dependency manifest layer that copies package files.
|
|
58
|
+
This layer is cached independently for faster builds.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
res_path: Resource path (service directory)
|
|
62
|
+
manager: Package manager to use (default: RUNTIME from master config)
|
|
63
|
+
use_golden: Whether to use golden L2 image (default: True)
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
Dockerfile content string for the l2_deps_manifest stage
|
|
67
|
+
"""
|
|
68
|
+
# Normalize res_path for Docker COPY (must be relative to build context)
|
|
69
|
+
res_path_rel = normalize_res_path(res_path)
|
|
70
|
+
|
|
71
|
+
lockfile = "bun.lock*"
|
|
72
|
+
|
|
73
|
+
# Prefer golden L2 image when enabled and defined; fall back to plain Bun image.
|
|
74
|
+
base_image = GOLDEN_L2_IMAGE if (use_golden and GOLDEN_L2_IMAGE) else BUN_BASE
|
|
75
|
+
use_golden_for_manifest = base_image == GOLDEN_L2_IMAGE
|
|
76
|
+
debug_tools_install = "" if use_golden_for_manifest else "# Install debugging tools for troubleshooting\nRUN echo '🔧 Installing debug tools...' && apk add --no-cache curl netcat-openbsd jq bind-tools vim && echo '✅ Debug tools installed'\n"
|
|
77
|
+
|
|
78
|
+
diagnostics_block = """
|
|
79
|
+
# Comprehensive pre-flight diagnostics (debug mode)
|
|
80
|
+
RUN echo '🔍 DEPENDENCY INSTALLATION DIAGNOSTICS (debug)' && \\
|
|
81
|
+
echo "Bun version: $(bun --version)" && \\
|
|
82
|
+
echo "Lock files:" && ls -lh bun.lock* 2>/dev/null && \\
|
|
83
|
+
echo "Cache dir:" && ls -lh /cache/bun 2>/dev/null || true
|
|
84
|
+
"""
|
|
85
|
+
if not DEBUG_MODE:
|
|
86
|
+
diagnostics_block = "# Diagnostics suppressed (set TILT_DEBUG=true for verbose output)\n"
|
|
87
|
+
|
|
88
|
+
install_deps_verbose = "INSTALL_DEPS_VERBOSE=1 " if DEBUG_MODE else ""
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
"# ---- L2: dependency_manifest ----\n"
|
|
92
|
+
+ "FROM " + base_image + " AS l2_deps_manifest\n"
|
|
93
|
+
+ "WORKDIR /app\n"
|
|
94
|
+
+ "\n"
|
|
95
|
+
+ "# Cache-busting mechanism - change this value to force dependency reinstall\n"
|
|
96
|
+
+ "ARG CACHE_BUSTER=2026-06-25-v1\n"
|
|
97
|
+
+ "RUN echo \"Cache buster: ${CACHE_BUSTER}\"\n"
|
|
98
|
+
+ "\n"
|
|
99
|
+
+ debug_tools_install
|
|
100
|
+
+ "\n"
|
|
101
|
+
+ "# Copy workspace root for monorepo resolution\n"
|
|
102
|
+
+ "COPY package.json ./package.json\n"
|
|
103
|
+
+ "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['npmrc_docker'] + " /app/.npmrc\n"
|
|
104
|
+
+ "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['bunfig_docker'] + " /app/.bunfig.toml\n"
|
|
105
|
+
+ "\n"
|
|
106
|
+
+ "# Copy service manifest files for deterministic dependency layer\n"
|
|
107
|
+
+ "WORKDIR /app/" + res_path + "\n"
|
|
108
|
+
+ "COPY " + res_path_rel + "/package.json ./package.json\n"
|
|
109
|
+
+ "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['npmrc_docker'] + " .npmrc\n"
|
|
110
|
+
+ "COPY " + lockfile + " ./\n"
|
|
111
|
+
+ "COPY " + res_path_rel + "/" + AUTOGENERATED_CONFIG_PATHS['bunfig_docker'] + " .bunfig.toml\n"
|
|
112
|
+
+ "\n"
|
|
113
|
+
+ diagnostics_block
|
|
114
|
+
+ "# Install dependencies (quiet by default; set TILT_DEBUG=true for verbose diagnostics)\n"
|
|
115
|
+
+ "COPY shared-platform-engineering/docker-templates/install-deps.sh /usr/local/bin/install-deps.sh\n"
|
|
116
|
+
# NOTE: sharing=shared allows parallel builds (20+ services) without lock contention.
|
|
117
|
+
# Bun's cache uses content-addressable storage with atomic writes, so concurrent access is safe.
|
|
118
|
+
+ "RUN --mount=type=cache,target=/cache/bun,sharing=shared chmod +x /usr/local/bin/install-deps.sh && start_ts=$(date +%s) && "
|
|
119
|
+
+ install_deps_verbose
|
|
120
|
+
+ "/usr/local/bin/install-deps.sh && end_ts=$(date +%s) && echo \"install-deps duration: $((end_ts-start_ts))s\"\n"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
DEBUG = {}
|
|
124
|
+
|
|
125
|
+
GLOBAL_CONFIG = {}
|