@tdk-landscape/tdk-cli-core 1.3.15 → 1.3.26
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/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 +59 -18
- 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/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,341 @@
|
|
|
1
|
+
#!/usr/bin/env starlark
|
|
2
|
+
# BEFORE/AFTER: Making Tilt Obvious (Zig-Style Explicitness)
|
|
3
|
+
#
|
|
4
|
+
# This file demonstrates how the new spec.master makes the system
|
|
5
|
+
# completely explicit - addressing the Zig developer's critique about
|
|
6
|
+
# "hidden control flow" and "no hidden allocations"
|
|
7
|
+
|
|
8
|
+
# =============================================================================
|
|
9
|
+
# ❌ BEFORE: Implicit, Hidden, Magic
|
|
10
|
+
# =============================================================================
|
|
11
|
+
|
|
12
|
+
# Magic load - where does this file live? Who knows.
|
|
13
|
+
# load("./discovery/registry.star", "get_app_resources")
|
|
14
|
+
|
|
15
|
+
# Magic context - what's inside ctx? Runtime mystery.
|
|
16
|
+
# ctx = Context.build(full_graph, manifest)
|
|
17
|
+
|
|
18
|
+
# Magic path construction - where does this write?
|
|
19
|
+
# output_path = path.join(resource_path, "tsconfig.json")
|
|
20
|
+
|
|
21
|
+
# Magic feature check - is this enabled? Where defined?
|
|
22
|
+
# if features.is_enabled("istio"):
|
|
23
|
+
|
|
24
|
+
# Magic port allocation - algorithm hidden
|
|
25
|
+
# port = allocate_port(resource_name)
|
|
26
|
+
|
|
27
|
+
# Magic dependency resolution - how does this work?
|
|
28
|
+
# deps = resolve_dependencies(manifest)
|
|
29
|
+
|
|
30
|
+
# =============================================================================
|
|
31
|
+
# ✅ AFTER: Explicit, Obvious, No Magic
|
|
32
|
+
# =============================================================================
|
|
33
|
+
|
|
34
|
+
# Load the master spec - ALL paths are explicit constants
|
|
35
|
+
load("{PROJECT_ROOT}/.tilt/spec.master", "SPEC", "CONSTANTS", "VALIDATION", "FEATURES", "OUTPUT", "DEBUG")
|
|
36
|
+
|
|
37
|
+
# 💡 ALTERNATIVE: Use the easier-to-remember alias names
|
|
38
|
+
# Both work identically - use whichever you prefer!
|
|
39
|
+
#
|
|
40
|
+
# load("{PROJECT_ROOT}/.tilt/paths.star", "SPEC", "CONSTANTS", "DEBUG")
|
|
41
|
+
# load("{PROJECT_ROOT}/.tilt/where-things-live.star", "SPEC", "CONSTANTS", "DEBUG")
|
|
42
|
+
#
|
|
43
|
+
# Why aliases? Because "paths" is easier to remember than "spec.master" 😊
|
|
44
|
+
|
|
45
|
+
# Explicit imports - you SEE exactly what files are loaded
|
|
46
|
+
load(SPEC.DISCOVERY.REGISTRY, "get_app_resources", "get_resource_by_name")
|
|
47
|
+
load(SPEC.DISCOVERY.LOADING, "load_manifest")
|
|
48
|
+
load(SPEC.GENERATORS.VITE, "generate_vite_config")
|
|
49
|
+
load(SPEC.GENERATORS.TSCONFIG, "generate_tsconfig")
|
|
50
|
+
load(SPEC.GENERATORS.DOCKERFILE, "generate_dockerfile")
|
|
51
|
+
load(SPEC.GENERATORS.MANIFEST_RESOURCE, "ManifestResource")
|
|
52
|
+
|
|
53
|
+
# EXPLICIT path construction - no hidden logic
|
|
54
|
+
def get_resource_path(resource_name):
|
|
55
|
+
"""Build service path EXPLICITLY from constants."""
|
|
56
|
+
return SPEC.RESOURCES_DIR + "/product/" + resource_name
|
|
57
|
+
|
|
58
|
+
def get_manifest_path(resource_path):
|
|
59
|
+
"""Manifest path is EXPLICIT, not discovered."""
|
|
60
|
+
return resource_path + "/" + RESOURCE_PATTERNS.MANIFEST_FILE
|
|
61
|
+
|
|
62
|
+
def get_output_path(resource_name, filename):
|
|
63
|
+
"""Output path is EXPLICIT, constructed from constants."""
|
|
64
|
+
return OUTPUT.CONFIGS + "/" + resource_name + "/" + filename
|
|
65
|
+
|
|
66
|
+
# =============================================================================
|
|
67
|
+
# EXPLICIT CONFIGURATION GENERATION
|
|
68
|
+
# =============================================================================
|
|
69
|
+
|
|
70
|
+
def generate_resource_configs(resource_name, manifest):
|
|
71
|
+
"""
|
|
72
|
+
Generate configs with EXPLICIT paths and constraints.
|
|
73
|
+
No hidden allocations. No magic context.
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
# EXPLICIT: Validate inputs (Zig-style defensive programming)
|
|
77
|
+
if not resource_name:
|
|
78
|
+
fail("resource_name is empty - explicit validation")
|
|
79
|
+
|
|
80
|
+
if not manifest:
|
|
81
|
+
fail("manifest is empty - explicit validation")
|
|
82
|
+
|
|
83
|
+
# EXPLICIT: Port validation with visible constraints
|
|
84
|
+
port = manifest.get("port")
|
|
85
|
+
if port < VALIDATION.MIN_PORT or port > VALIDATION.MAX_PORT:
|
|
86
|
+
fail("port {} outside valid range [{}-{}]".format(
|
|
87
|
+
port, VALIDATION.MIN_PORT, VALIDATION.MAX_PORT
|
|
88
|
+
))
|
|
89
|
+
|
|
90
|
+
if port in VALIDATION.RESERVED_PORTS:
|
|
91
|
+
fail("port {} is in RESERVED_PORTS list".format(port))
|
|
92
|
+
|
|
93
|
+
# EXPLICIT: Feature check - visible toggle
|
|
94
|
+
if FEATURES.ISTIO_INTEGRATION:
|
|
95
|
+
# 🗓️ ROADMAP: Will generate Istio configs when implemented
|
|
96
|
+
istio_config = generate_istio_config(manifest)
|
|
97
|
+
else:
|
|
98
|
+
# EXPLICIT: Currently using Traefik
|
|
99
|
+
istio_config = None
|
|
100
|
+
|
|
101
|
+
# EXPLICIT: Path construction - you SEE where files go
|
|
102
|
+
resource_path = get_resource_path(resource_name)
|
|
103
|
+
output_dir = get_output_path(resource_name, "")
|
|
104
|
+
|
|
105
|
+
configs = {
|
|
106
|
+
"tsconfig": {
|
|
107
|
+
"input": get_manifest_path(resource_path),
|
|
108
|
+
"output": output_dir + RESOURCE_PATTERNS.GENERATED_TSCONFIG,
|
|
109
|
+
"generator": SPEC.GENERATORS.TSCONFIG,
|
|
110
|
+
},
|
|
111
|
+
"vite": {
|
|
112
|
+
"input": get_manifest_path(resource_path),
|
|
113
|
+
"output": output_dir + RESOURCE_PATTERNS.GENERATED_VITE_CONFIG,
|
|
114
|
+
"generator": SPEC.GENERATORS.VITE,
|
|
115
|
+
},
|
|
116
|
+
"dockerfile": {
|
|
117
|
+
"input": get_manifest_path(resource_path),
|
|
118
|
+
"output": resource_path + "/" + RESOURCE_PATTERNS.DOCKERFILE,
|
|
119
|
+
"generator": SPEC.GENERATORS.DOCKERFILE,
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
# EXPLICIT: Debug output (visible when DEBUG.DUMP_GENERATED_CONFIGS)
|
|
124
|
+
if DEBUG.DUMP_GENERATED_CONFIGS:
|
|
125
|
+
print("[DEBUG] Generated configs for {}:".format(resource_name))
|
|
126
|
+
for name, cfg in configs.items():
|
|
127
|
+
print(" {}: {}".format(name, cfg["output"]))
|
|
128
|
+
|
|
129
|
+
return configs
|
|
130
|
+
|
|
131
|
+
# =============================================================================
|
|
132
|
+
# EXPLICIT SERVICE DISCOVERY (No Magic Globbing)
|
|
133
|
+
# =============================================================================
|
|
134
|
+
|
|
135
|
+
def discover_services_explicit():
|
|
136
|
+
"""
|
|
137
|
+
Discover services with EXPLICIT search paths.
|
|
138
|
+
No hidden glob patterns. Everything visible.
|
|
139
|
+
"""
|
|
140
|
+
discovered = []
|
|
141
|
+
|
|
142
|
+
# EXPLICIT: Iterate declared search paths
|
|
143
|
+
for search_path in DISCOVERY.RESOURCE_SEARCH_PATHS:
|
|
144
|
+
# EXPLICIT: Glob pattern is declared in spec.master
|
|
145
|
+
pattern = search_path + "/" + DISCOVERY.MANIFEST_PATTERNS[0] # service.json
|
|
146
|
+
|
|
147
|
+
# EXPLICIT: Check exclusions
|
|
148
|
+
matches = glob([pattern], exclude=DISCOVERY.EXCLUDE_PATTERNS)
|
|
149
|
+
|
|
150
|
+
for match in matches:
|
|
151
|
+
# EXPLICIT: Construct service info from path
|
|
152
|
+
resource_dir = os.path.dirname(match)
|
|
153
|
+
resource_name = os.path.basename(resource_dir)
|
|
154
|
+
|
|
155
|
+
discovered.append({
|
|
156
|
+
"name": resource_name,
|
|
157
|
+
"path": resource_dir,
|
|
158
|
+
"manifest_path": match,
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
return discovered
|
|
162
|
+
|
|
163
|
+
# =============================================================================
|
|
164
|
+
# EXPLICIT CONTEXT BUILDING (No Black Box)
|
|
165
|
+
# =============================================================================
|
|
166
|
+
|
|
167
|
+
def build_explicit_context(resource_manifest, all_services):
|
|
168
|
+
"""
|
|
169
|
+
Build context EXPLICITLY - every field is visible.
|
|
170
|
+
No mystery black box.
|
|
171
|
+
"""
|
|
172
|
+
ctx = struct(
|
|
173
|
+
# EXPLICIT: Source data
|
|
174
|
+
manifest = resource_manifest,
|
|
175
|
+
all_services = all_services,
|
|
176
|
+
|
|
177
|
+
# EXPLICIT: Computed values (transparent logic)
|
|
178
|
+
resource_name = resource_manifest.get("appName"),
|
|
179
|
+
resource_path = get_resource_path(resource_manifest.get("appName")),
|
|
180
|
+
port = resource_manifest.get("port"),
|
|
181
|
+
|
|
182
|
+
# EXPLICIT: Dependencies (resolved, not hidden)
|
|
183
|
+
dependencies = resolve_explicit_dependencies(
|
|
184
|
+
resource_manifest.get("dependsOn", []),
|
|
185
|
+
all_services
|
|
186
|
+
),
|
|
187
|
+
|
|
188
|
+
# EXPLICIT: System constants
|
|
189
|
+
constants = CONSTANTS,
|
|
190
|
+
validation = VALIDATION,
|
|
191
|
+
features = FEATURES,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
# EXPLICIT: Debug inspection
|
|
195
|
+
if DEBUG.DUMP_CONTEXT_ON_GENERATION:
|
|
196
|
+
print("[DEBUG] Context for {}:".format(ctx.resource_name))
|
|
197
|
+
print(" port: {}".format(ctx.port))
|
|
198
|
+
print(" dependencies: {}".format([d["name"] for d in ctx.dependencies]))
|
|
199
|
+
print(" features enabled: {}".format([f for f in dir(FEATURES) if not f.startswith("_")]))
|
|
200
|
+
|
|
201
|
+
return ctx
|
|
202
|
+
|
|
203
|
+
def resolve_explicit_dependencies(dep_names, all_services):
|
|
204
|
+
"""
|
|
205
|
+
Resolve dependencies EXPLICITLY.
|
|
206
|
+
No hidden graph traversal.
|
|
207
|
+
"""
|
|
208
|
+
resolved = []
|
|
209
|
+
|
|
210
|
+
for dep_name in dep_names:
|
|
211
|
+
# EXPLICIT: Lookup in explicit list
|
|
212
|
+
found = None
|
|
213
|
+
for svc in all_services:
|
|
214
|
+
if svc["name"] == dep_name:
|
|
215
|
+
found = svc
|
|
216
|
+
break
|
|
217
|
+
|
|
218
|
+
if not found:
|
|
219
|
+
fail("Dependency '{}' not found in explicit service list".format(dep_name))
|
|
220
|
+
|
|
221
|
+
# EXPLICIT: Check for circular dependencies
|
|
222
|
+
if dep_name in resolved:
|
|
223
|
+
fail("Circular dependency detected involving '{}'".format(dep_name))
|
|
224
|
+
|
|
225
|
+
resolved.append(found)
|
|
226
|
+
|
|
227
|
+
return resolved
|
|
228
|
+
|
|
229
|
+
# =============================================================================
|
|
230
|
+
# EXPLICIT GENERATION ENTRY POINT
|
|
231
|
+
# =============================================================================
|
|
232
|
+
|
|
233
|
+
def generate_all_explicit():
|
|
234
|
+
"""
|
|
235
|
+
Main generation with EXPLICIT flow.
|
|
236
|
+
Every step is visible. No magic.
|
|
237
|
+
"""
|
|
238
|
+
|
|
239
|
+
print("=" * 60)
|
|
240
|
+
print("TILT GENERATION - EXPLICIT MODE")
|
|
241
|
+
print("=" * 60)
|
|
242
|
+
|
|
243
|
+
# EXPLICIT: Step 1 - Discovery
|
|
244
|
+
print("\n[1/5] DISCOVERY")
|
|
245
|
+
print(" Search paths: {}".format(DISCOVERY.RESOURCE_SEARCH_PATHS))
|
|
246
|
+
services = discover_services_explicit()
|
|
247
|
+
print(" Found {} services".format(len(services)))
|
|
248
|
+
for svc in services:
|
|
249
|
+
print(" - {} at {}".format(svc["name"], svc["path"]))
|
|
250
|
+
|
|
251
|
+
# EXPLICIT: Step 2 - Validation
|
|
252
|
+
print("\n[2/5] VALIDATION")
|
|
253
|
+
for svc in services:
|
|
254
|
+
port = svc.get("port", 0)
|
|
255
|
+
if port < VALIDATION.MIN_PORT:
|
|
256
|
+
fail(" ❌ {}: port {} below minimum {}".format(
|
|
257
|
+
svc["name"], port, VALIDATION.MIN_PORT
|
|
258
|
+
))
|
|
259
|
+
print(" ✅ {}: port {} valid".format(svc["name"], port))
|
|
260
|
+
|
|
261
|
+
# EXPLICIT: Step 3 - Context Building
|
|
262
|
+
print("\n[3/5] CONTEXT BUILDING")
|
|
263
|
+
contexts = {}
|
|
264
|
+
for svc in services:
|
|
265
|
+
ctx = build_explicit_context(svc, services)
|
|
266
|
+
contexts[svc["name"]] = ctx
|
|
267
|
+
print(" ✅ {}: context built".format(svc["name"]))
|
|
268
|
+
|
|
269
|
+
# EXPLICIT: Step 4 - Generation
|
|
270
|
+
print("\n[4/5] GENERATION")
|
|
271
|
+
generated = {}
|
|
272
|
+
for svc in services:
|
|
273
|
+
configs = generate_resource_configs(svc["name"], svc)
|
|
274
|
+
generated[svc["name"]] = configs
|
|
275
|
+
print(" ✅ {}: {} configs generated".format(svc["name"], len(configs)))
|
|
276
|
+
|
|
277
|
+
# EXPLICIT: Step 5 - Output
|
|
278
|
+
print("\n[5/5] OUTPUT")
|
|
279
|
+
print(" Output directory: {}".format(OUTPUT.CONFIGS))
|
|
280
|
+
for svc_name, configs in generated.items():
|
|
281
|
+
for cfg_name, cfg in configs.items():
|
|
282
|
+
print(" Writing: {}".format(cfg["output"]))
|
|
283
|
+
# write_file(cfg["output"], cfg["content"])
|
|
284
|
+
|
|
285
|
+
print("\n" + "=" * 60)
|
|
286
|
+
print("GENERATION COMPLETE")
|
|
287
|
+
print(" Services: {}".format(len(services)))
|
|
288
|
+
print(" Configs: {}".format(sum(len(c) for c in generated.values())))
|
|
289
|
+
print(" Output: {}".format(OUTPUT.CONFIGS))
|
|
290
|
+
print("=" * 60)
|
|
291
|
+
|
|
292
|
+
# =============================================================================
|
|
293
|
+
# ZIG-STYLE MANIFESTO APPLIED
|
|
294
|
+
# =============================================================================
|
|
295
|
+
|
|
296
|
+
"""
|
|
297
|
+
WHAT CHANGED:
|
|
298
|
+
|
|
299
|
+
BEFORE (Implicit):
|
|
300
|
+
- Paths discovered at runtime
|
|
301
|
+
- Features checked magically
|
|
302
|
+
- Context is black box
|
|
303
|
+
- Errors at runtime
|
|
304
|
+
|
|
305
|
+
AFTER (Explicit - Zig-style):
|
|
306
|
+
- Paths are CONSTANTS in spec.master
|
|
307
|
+
- Features are EXPLICIT STRUCT toggles
|
|
308
|
+
- Context is EXPLICIT STRUCT (every field visible)
|
|
309
|
+
- Errors at "compile time" (Tiltfile load)
|
|
310
|
+
|
|
311
|
+
PRINCIPLES APPLIED:
|
|
312
|
+
✅ No hidden control flow
|
|
313
|
+
✅ No hidden allocations (paths explicit)
|
|
314
|
+
✅ No magic (everything declared in spec.master)
|
|
315
|
+
✅ Explicit is better than implicit
|
|
316
|
+
✅ Fail fast with clear messages
|
|
317
|
+
|
|
318
|
+
ANSWER TO ZIG DEVELOPER:
|
|
319
|
+
"You wanted obvious. Now it's obvious."
|
|
320
|
+
"Every path is a constant."
|
|
321
|
+
"Every feature is a toggle."
|
|
322
|
+
"Every context field is visible."
|
|
323
|
+
"No magic. No surprises."
|
|
324
|
+
"""
|
|
325
|
+
|
|
326
|
+
# =============================================================================
|
|
327
|
+
# USAGE EXAMPLE
|
|
328
|
+
# =============================================================================
|
|
329
|
+
|
|
330
|
+
# To use in your Tiltfile:
|
|
331
|
+
#
|
|
332
|
+
# load("{}/.tilt/spec.master".format(PROJECT_ROOT), "SPEC", "CONSTANTS")
|
|
333
|
+
#
|
|
334
|
+
# # Now EVERYTHING is explicit and obvious
|
|
335
|
+
# print("Registry path: {}".format(SPEC.DISCOVERY.REGISTRY))
|
|
336
|
+
# print("Max port: {}".format(VALIDATION.MAX_PORT))
|
|
337
|
+
# print("Istio enabled: {}".format(FEATURES.ISTIO_INTEGRATION))
|
|
338
|
+
#
|
|
339
|
+
# # No more guessing where files live
|
|
340
|
+
# # No more wondering what ctx contains
|
|
341
|
+
# # No more hidden feature flags
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Topologies (Incremental Migration)
|
|
3
|
+
status: backlog
|
|
4
|
+
created: 2026-03-31
|
|
5
|
+
updated: 2026-03-31
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Topologies (Incremental Migration)
|
|
9
|
+
|
|
10
|
+
This folder is the new destination for Tilt topology modules.
|
|
11
|
+
|
|
12
|
+
Current migrated modules (only currently needed runtime pieces):
|
|
13
|
+
- `platform/docker/*` (native compose/dockerfile/dockerignore/golden-layer generators + layers)
|
|
14
|
+
- `platform/net/proxy.star`
|
|
15
|
+
- `platform/state/relational.star`
|
|
16
|
+
- `platform/security/secrets.star`
|
|
17
|
+
- `platform/registries/local.star`
|
|
18
|
+
- `platform/observability/logging.star`
|
|
19
|
+
- `tilt/common/utils.star` (shared runtime utilities)
|
|
20
|
+
- `tilt/discovery/*` (native registry + native manifest scanner/grouping/dependency graph)
|
|
21
|
+
- `tilt/discovery/manifest/*` (native manifest constants/loading/normalize/validation)
|
|
22
|
+
- `tilt/config/{global,defaults,profiles,feature_flags}.star` (native config + native focus profile logic)
|
|
23
|
+
- `tilt/generators/*` (native vite/typescript/npmrc/nginx modules)
|
|
24
|
+
- `tilt/resources/*` (native libs/databases/infra-loader/watchers/orchestrator modules)
|
|
25
|
+
- `product_autogenerated_services_list/services.star`
|
|
26
|
+
- `product_autogenerated_resource_manifests/*`
|
|
27
|
+
|
|
28
|
+
Explicitly not created yet (not needed by current runtime):
|
|
29
|
+
- `platform/net/firewall.star`
|
|
30
|
+
- Most unreferenced files from the full target map.
|
|
31
|
+
|
|
32
|
+
Migration strategy:
|
|
33
|
+
- Keep behavior stable while moving runtime code out of `compat/`.
|
|
34
|
+
- Keep `compat/` as fallback shims during incremental cleanup.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# AGENTS.md - Docker Platform Infrastructure
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Docker image building, golden image layers, and Dockerfile generation for all services.
|
|
6
|
+
|
|
7
|
+
## Key Concepts
|
|
8
|
+
|
|
9
|
+
### Golden Image Architecture (L1-L4)
|
|
10
|
+
```
|
|
11
|
+
L1: Base (Bun, Node, essential tools)
|
|
12
|
+
L2: Dependencies (cached node_modules)
|
|
13
|
+
L3: Builder (build tools)
|
|
14
|
+
L4: Runtime (minimal production image)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Key Files
|
|
18
|
+
|
|
19
|
+
### Golden Images
|
|
20
|
+
- **`golden_image.star`** - GoldenImage struct with L1-L4 builders
|
|
21
|
+
- **`dockerfile.star`** - Dockerfile generation for apps
|
|
22
|
+
- **`constants.star`** - Docker constants, image names
|
|
23
|
+
|
|
24
|
+
### Layer Building
|
|
25
|
+
- **`layers/l1_base_layers.star`** - Base image with Bun/Node
|
|
26
|
+
- **`layers/l2_dependency_layers.star`** - Dependency installation
|
|
27
|
+
- **`layers/l3_builder_layers.star`** - Build stage
|
|
28
|
+
- **`layers/l4_runtime_layers.star`** - Minimal runtime
|
|
29
|
+
|
|
30
|
+
### Specialized
|
|
31
|
+
- **`layers/prisma/`** - Prisma-specific Docker layers
|
|
32
|
+
- **`generators/golden_docker_generator.star`** - Old generator (v1)
|
|
33
|
+
- **`generators/golden_docker_generator_v2.star`** - Current generator (v2)
|
|
34
|
+
|
|
35
|
+
## Common Tasks
|
|
36
|
+
|
|
37
|
+
### Generate Dockerfile for service
|
|
38
|
+
```starlark
|
|
39
|
+
load("./dockerfile.star", "generate_app_dockerfile")
|
|
40
|
+
dockerfile = generate_app_dockerfile(path, resource_name, start_command)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Get golden image
|
|
44
|
+
```starlark
|
|
45
|
+
load("./golden_image.star", "GoldenImage")
|
|
46
|
+
digest = GoldenImage.get_digest("l2")
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Integration
|
|
50
|
+
|
|
51
|
+
- Called by `generators/manifest_resource.star` - when building service resources
|
|
52
|
+
- Used by discovery - to determine Dockerfile paths
|
|
53
|
+
- Outputs to services' `autogenerated/Dockerfile.*.autogenerated`
|
|
54
|
+
|
|
55
|
+
## Important Notes
|
|
56
|
+
|
|
57
|
+
- Golden images use digests for cache invalidation
|
|
58
|
+
- L2 layer caches `node_modules` for faster rebuilds
|
|
59
|
+
- Each service's Dockerfile starts `FROM {project}/golden-image-l4:latest`
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🔐 TILT SDK - AUTH CONFIGURATION UTILITIES
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: .tilt/topologies/platform/docker/auth.star
|
|
5
|
+
# Purpose: Centralized authentication configuration helpers for docker-compose
|
|
6
|
+
# and environment file generation across the platform.
|
|
7
|
+
#
|
|
8
|
+
# Design Principle: This module is decoupled from manifest.json structure.
|
|
9
|
+
# It accepts auth configuration as a dictionary parameter and does
|
|
10
|
+
# not know where the config comes from. Callers (env.star, compose.star)
|
|
11
|
+
# are responsible for extracting auth fields from manifest and passing
|
|
12
|
+
# them as the auth_config dict.
|
|
13
|
+
# =============================================================================
|
|
14
|
+
|
|
15
|
+
# Default values for auth configuration
|
|
16
|
+
DEFAULT_AUTH_MODE = 'local-jwt'
|
|
17
|
+
DEFAULT_JWT_SECRET = 'local-development-secret-min-32-chars-long'
|
|
18
|
+
DEFAULT_IDENTITY_RESOURCE_URL = 'http://identity-service:3000'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_auth_mode(auth_config):
|
|
22
|
+
"""Get auth mode from auth config with default fallback.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
str: Auth mode ('local-jwt' or 'identity-service')
|
|
29
|
+
"""
|
|
30
|
+
if not auth_config:
|
|
31
|
+
return DEFAULT_AUTH_MODE
|
|
32
|
+
return auth_config.get('authMode', DEFAULT_AUTH_MODE)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def get_jwt_secret(auth_config):
|
|
36
|
+
"""Get JWT secret from auth config with default fallback.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
str: JWT secret for local-jwt mode
|
|
43
|
+
"""
|
|
44
|
+
if not auth_config:
|
|
45
|
+
return DEFAULT_JWT_SECRET
|
|
46
|
+
return auth_config.get('jwtSecret', DEFAULT_JWT_SECRET)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def get_identity_resource_url(auth_config):
|
|
50
|
+
"""Get identity service URL from auth config with default fallback.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
str: URL for identity service
|
|
57
|
+
"""
|
|
58
|
+
if not auth_config:
|
|
59
|
+
return DEFAULT_IDENTITY_RESOURCE_URL
|
|
60
|
+
return auth_config.get('identityServiceUrl', DEFAULT_IDENTITY_RESOURCE_URL)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def get_auth_config(auth_config):
|
|
64
|
+
"""Get complete auth configuration from auth config dict.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
struct: Auth configuration with mode, jwt_secret, and identity_resource_url
|
|
71
|
+
"""
|
|
72
|
+
return struct(
|
|
73
|
+
mode = get_auth_mode(auth_config),
|
|
74
|
+
jwt_secret = get_jwt_secret(auth_config),
|
|
75
|
+
identity_resource_url = get_identity_resource_url(auth_config),
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def is_local_jwt_mode(auth_config):
|
|
80
|
+
"""Check if auth mode is local-jwt.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
bool: True if auth mode is 'local-jwt'
|
|
87
|
+
"""
|
|
88
|
+
return get_auth_mode(auth_config) == 'local-jwt'
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def is_identity_resource_mode(auth_config):
|
|
92
|
+
"""Check if auth mode is identity-service.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
bool: True if auth mode is 'identity-service'
|
|
99
|
+
"""
|
|
100
|
+
return get_auth_mode(auth_config) == 'identity-service'
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def generate_docker_compose_auth_env(auth_config):
|
|
104
|
+
"""Generate docker-compose environment variables for auth configuration.
|
|
105
|
+
|
|
106
|
+
This function returns the properly formatted environment variable block
|
|
107
|
+
for docker-compose.yml files based on the auth mode.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
str: Formatted auth environment variables for docker-compose
|
|
114
|
+
"""
|
|
115
|
+
auth_mode = get_auth_mode(auth_config)
|
|
116
|
+
jwt_secret = get_jwt_secret(auth_config)
|
|
117
|
+
identity_resource_url = get_identity_resource_url(auth_config)
|
|
118
|
+
|
|
119
|
+
if auth_mode == 'local-jwt':
|
|
120
|
+
return """ - AUTH_MODE=local-jwt
|
|
121
|
+
- JWT_SECRET=${JWT_SECRET:-%(jwt_secret)s}""" % {'jwt_secret': jwt_secret}
|
|
122
|
+
else:
|
|
123
|
+
return """ - AUTH_MODE=identity-service
|
|
124
|
+
- IDENTITY_RESOURCE_URL=${IDENTITY_RESOURCE_URL:-%(identity_resource_url)s}""" % {'identity_resource_url': identity_resource_url}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def generate_env_file_auth_section(auth_config):
|
|
128
|
+
"""Generate .env file auth section content.
|
|
129
|
+
|
|
130
|
+
This function returns the formatted authentication configuration section
|
|
131
|
+
for .env.backend.autogenerated files.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
auth_config: Auth configuration dictionary (may be None or empty)
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
str: Formatted auth section for .env files
|
|
138
|
+
"""
|
|
139
|
+
auth_mode = get_auth_mode(auth_config)
|
|
140
|
+
jwt_secret = get_jwt_secret(auth_config)
|
|
141
|
+
identity_resource_url = get_identity_resource_url(auth_config)
|
|
142
|
+
|
|
143
|
+
content = """
|
|
144
|
+
# Authentication Configuration
|
|
145
|
+
# Mode: {auth_mode} (options: local-jwt, identity-service)
|
|
146
|
+
AUTH_MODE={auth_mode}
|
|
147
|
+
""".format(auth_mode=auth_mode)
|
|
148
|
+
|
|
149
|
+
if auth_mode == 'local-jwt':
|
|
150
|
+
content += "JWT_SECRET={jwt_secret}\n".format(jwt_secret=jwt_secret)
|
|
151
|
+
else:
|
|
152
|
+
content += "IDENTITY_RESOURCE_URL={identity_resource_url}\n".format(identity_resource_url=identity_resource_url)
|
|
153
|
+
|
|
154
|
+
return content
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
# Export all functions as a struct for easy importing
|
|
158
|
+
AuthConfig = struct(
|
|
159
|
+
get_auth_mode = get_auth_mode,
|
|
160
|
+
get_jwt_secret = get_jwt_secret,
|
|
161
|
+
get_identity_resource_url = get_identity_resource_url,
|
|
162
|
+
get_auth_config = get_auth_config,
|
|
163
|
+
is_local_jwt_mode = is_local_jwt_mode,
|
|
164
|
+
is_identity_resource_mode = is_identity_resource_mode,
|
|
165
|
+
generate_docker_compose_auth_env = generate_docker_compose_auth_env,
|
|
166
|
+
generate_env_file_auth_section = generate_env_file_auth_section,
|
|
167
|
+
)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🏗️ TILT SDK - GOLDEN LAYERED IMAGES PROVIDER
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Purpose: Public API facade for golden layered image orchestration.
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
load('./golden_image_constants.star',
|
|
8
|
+
'GOLDEN_IMAGE_PREFIX',
|
|
9
|
+
'GOLDEN_LAYERS',
|
|
10
|
+
'get_layer_reference',
|
|
11
|
+
)
|
|
12
|
+
load('./golden_image_build.star', 'build_golden_layers')
|
|
13
|
+
load('./golden_image_dockerfile.star', 'generate_golden_dockerfile')
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
GoldenImage = struct(
|
|
17
|
+
# Build functions
|
|
18
|
+
build = build_golden_layers,
|
|
19
|
+
|
|
20
|
+
# Reference getters
|
|
21
|
+
get_layer = get_layer_reference,
|
|
22
|
+
l1 = lambda: get_layer_reference('l1'),
|
|
23
|
+
l2 = lambda: get_layer_reference('l2'),
|
|
24
|
+
l3_backend = lambda: get_layer_reference('l3-backend'),
|
|
25
|
+
l3_frontend = lambda: get_layer_reference('l3-frontend'),
|
|
26
|
+
l3_migrator = lambda: get_layer_reference('l3-migrator'),
|
|
27
|
+
l4_backend = lambda: get_layer_reference('l4-backend'),
|
|
28
|
+
l4_frontend = lambda: get_layer_reference('l4-frontend'),
|
|
29
|
+
l4_migrator = lambda: get_layer_reference('l4-migrator'),
|
|
30
|
+
|
|
31
|
+
# Constants
|
|
32
|
+
layers = GOLDEN_LAYERS,
|
|
33
|
+
prefix = GOLDEN_IMAGE_PREFIX,
|
|
34
|
+
|
|
35
|
+
# Generators
|
|
36
|
+
generate_dockerfile = generate_golden_dockerfile,
|
|
37
|
+
)
|