@tdk-landscape/tdk-cli-core 1.3.15 → 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/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,145 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🌐 TILT SDK - API GATEWAY (Referer-Based Context Routing)
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: .tilt/topologies/tilt/generators/api_gateway.star
|
|
5
|
+
# Purpose: Auto-discover backends and generate referer-based routing map
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
load('../../../../discovery/registry.star', 'get_app_resources', 'get_resource_aliases')
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _extract_referer_pattern(base_path, stack):
|
|
12
|
+
"""Extract referer pattern from basePath or stack - use actual names."""
|
|
13
|
+
if base_path:
|
|
14
|
+
return base_path.strip('/').lower()
|
|
15
|
+
if stack:
|
|
16
|
+
return stack.lower()
|
|
17
|
+
return None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _collect_backend_dependencies(frontend_manifest):
|
|
21
|
+
"""
|
|
22
|
+
Resolve backend resource names for a frontend manifest's declared dependencies.
|
|
23
|
+
Includes frontend's own backend and backend resources from dependency aliases.
|
|
24
|
+
"""
|
|
25
|
+
if frontend_manifest == None:
|
|
26
|
+
return None
|
|
27
|
+
|
|
28
|
+
allowed = {}
|
|
29
|
+
|
|
30
|
+
frontend_backend = frontend_manifest.get('backendName')
|
|
31
|
+
if frontend_backend:
|
|
32
|
+
allowed[frontend_backend] = True
|
|
33
|
+
|
|
34
|
+
manifest_deps = frontend_manifest.get('dependencies')
|
|
35
|
+
if manifest_deps == None:
|
|
36
|
+
manifest_deps = frontend_manifest.get('dependsOn', [])
|
|
37
|
+
|
|
38
|
+
aliases = get_resource_aliases()
|
|
39
|
+
for dep in manifest_deps:
|
|
40
|
+
dep_name = str(dep)
|
|
41
|
+
if dep_name.endswith('-backend'):
|
|
42
|
+
allowed[dep_name] = True
|
|
43
|
+
continue
|
|
44
|
+
|
|
45
|
+
alias_targets = aliases.get(dep_name, [])
|
|
46
|
+
for target in alias_targets:
|
|
47
|
+
if target.endswith('-backend'):
|
|
48
|
+
allowed[target] = True
|
|
49
|
+
|
|
50
|
+
return allowed
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _get_backend_port(backend_name, fallback = 4000):
|
|
54
|
+
for service in get_app_resources():
|
|
55
|
+
for resource in service.get('resources', []):
|
|
56
|
+
if resource.get('name') == backend_name:
|
|
57
|
+
manifest = resource.get('_manifest', {})
|
|
58
|
+
app_type = manifest.get('appType', resource.get('app_type', 'backend'))
|
|
59
|
+
if app_type == 'backend':
|
|
60
|
+
return manifest.get('containerPort', 3000)
|
|
61
|
+
return resource.get('port', fallback)
|
|
62
|
+
return fallback
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_backend_routing_map(frontend_manifest = None):
|
|
66
|
+
"""
|
|
67
|
+
Auto-scan all backends from discovered manifests and build referer-based routing map.
|
|
68
|
+
Returns dict: {referer_pattern: {backend_name, port}}
|
|
69
|
+
"""
|
|
70
|
+
routing_map = {}
|
|
71
|
+
default_backend = None
|
|
72
|
+
|
|
73
|
+
allowed_backends = _collect_backend_dependencies(frontend_manifest)
|
|
74
|
+
|
|
75
|
+
for resource_group in get_app_resources():
|
|
76
|
+
stack_name = resource_group.get('name', '')
|
|
77
|
+
|
|
78
|
+
for resource in resource_group.get('resources', []):
|
|
79
|
+
manifest = resource.get('_manifest', {})
|
|
80
|
+
app_type = manifest.get('appType', resource.get('app_type', 'backend'))
|
|
81
|
+
|
|
82
|
+
if app_type != 'backend':
|
|
83
|
+
continue
|
|
84
|
+
|
|
85
|
+
backend_name = resource.get('name', '')
|
|
86
|
+
if allowed_backends != None and backend_name not in allowed_backends:
|
|
87
|
+
continue
|
|
88
|
+
if app_type == 'backend':
|
|
89
|
+
port = manifest.get('containerPort', 3000)
|
|
90
|
+
else:
|
|
91
|
+
port = resource.get('port', 4000)
|
|
92
|
+
|
|
93
|
+
base_path = manifest.get('basePath', '')
|
|
94
|
+
stack = manifest.get('stack', stack_name)
|
|
95
|
+
|
|
96
|
+
pattern = _extract_referer_pattern(base_path, stack)
|
|
97
|
+
|
|
98
|
+
if pattern:
|
|
99
|
+
routing_map[pattern] = {'name': backend_name, 'port': port}
|
|
100
|
+
elif not default_backend:
|
|
101
|
+
default_backend = {'name': backend_name, 'port': port}
|
|
102
|
+
|
|
103
|
+
return routing_map, default_backend
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def build_referer_map_block(frontend_manifest = None):
|
|
107
|
+
"""
|
|
108
|
+
Build the nginx map block by scanning all manifests.
|
|
109
|
+
Routes are sorted by specificity (longest path first) to ensure proper matching.
|
|
110
|
+
Uses flexible matching to handle both /order/ and /orders paths.
|
|
111
|
+
"""
|
|
112
|
+
routing_map, default_backend = get_backend_routing_map(frontend_manifest)
|
|
113
|
+
|
|
114
|
+
sorted_patterns = sorted(routing_map.keys(), key=len, reverse=True)
|
|
115
|
+
|
|
116
|
+
lines = [
|
|
117
|
+
' # Auto-discovered backend routing map (referer-based context routing)',
|
|
118
|
+
' map $http_referer $api_backend {'
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
for pattern in sorted_patterns:
|
|
122
|
+
backend = routing_map[pattern]
|
|
123
|
+
backend_url = 'http://{}:{}'.format(backend['name'], backend['port'])
|
|
124
|
+
lines.append(' ~*{} {};'.format(pattern, backend_url))
|
|
125
|
+
|
|
126
|
+
if default_backend:
|
|
127
|
+
default_url = 'http://{}:{}'.format(default_backend['name'], default_backend['port'])
|
|
128
|
+
lines.append(' default {};'.format(default_url))
|
|
129
|
+
elif frontend_manifest != None and frontend_manifest.get('backendName'):
|
|
130
|
+
backend_name = frontend_manifest.get('backendName')
|
|
131
|
+
backend_port = _get_backend_port(backend_name, 4000)
|
|
132
|
+
lines.append(' default http://{}:{};'.format(backend_name, backend_port))
|
|
133
|
+
else:
|
|
134
|
+
# No hardcoded fallback - backendName must be specified in manifest
|
|
135
|
+
lines.append(' default http://backend-not-configured:4000;')
|
|
136
|
+
|
|
137
|
+
lines.append(' }')
|
|
138
|
+
|
|
139
|
+
return '\n'.join(lines)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
ApiGateway = struct(
|
|
143
|
+
get_backend_routing_map = get_backend_routing_map,
|
|
144
|
+
build_referer_map_block = build_referer_map_block,
|
|
145
|
+
)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🎯 GENERATORS - Master Index
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# All generators for Tilt topology configuration
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
# =============================================================================
|
|
8
|
+
# Legacy Generators (existing)
|
|
9
|
+
# =============================================================================
|
|
10
|
+
|
|
11
|
+
# Load individual generator functions (they export functions, not structs)
|
|
12
|
+
load("./typescript/backend_tsconfig.star", "generate_backend_tsconfig")
|
|
13
|
+
load("./typescript/frontend_tsconfig.star", "generate_frontend_tsconfig")
|
|
14
|
+
load("./typescript/frontend_library_tsconfig.star", "generate_frontend_library_tsconfig")
|
|
15
|
+
load("./typescript/backend_library_tsconfig.star", "generate_backend_library_tsconfig")
|
|
16
|
+
load("./typescript/prisma_config.star", "generate_prisma_config")
|
|
17
|
+
load("./typescript/playwright_config.star", "generate_playwright_config")
|
|
18
|
+
|
|
19
|
+
load("./vite/generators.star", "generate_for_manifest")
|
|
20
|
+
load("./npmrc.star", "PackageConfig")
|
|
21
|
+
load("./agents_md.star", "AgentsMd")
|
|
22
|
+
# NOTE: nginx_conf.star and api_gateway.star loaded from manifest_resource.star
|
|
23
|
+
# to avoid circular imports with discovery/registry
|
|
24
|
+
|
|
25
|
+
# =============================================================================
|
|
26
|
+
# NEW: Pre-Flight Validation Generators (v2.0)
|
|
27
|
+
# =============================================================================
|
|
28
|
+
# These generators prevent vibe-coding failures by validating before build
|
|
29
|
+
|
|
30
|
+
load("./validators.star", "Validators")
|
|
31
|
+
# fixed_frontend_tsconfig.star, dependency_manifest.star, and
|
|
32
|
+
# database_provisioner.star moved to premium/ - none had any call sites
|
|
33
|
+
# outside this file, so they were dead code in the free engine.
|
|
34
|
+
|
|
35
|
+
# =============================================================================
|
|
36
|
+
# 🔐 INFISICAL Secrets Management Generators
|
|
37
|
+
# =============================================================================
|
|
38
|
+
# Provides complete Infisical integration for secret management
|
|
39
|
+
|
|
40
|
+
load("./infisical/index.star", "Infisical")
|
|
41
|
+
|
|
42
|
+
# =============================================================================
|
|
43
|
+
# Legacy Exports (for backward compatibility)
|
|
44
|
+
# =============================================================================
|
|
45
|
+
|
|
46
|
+
# Functions are already loaded directly
|
|
47
|
+
# Vite generator
|
|
48
|
+
Vite = struct(
|
|
49
|
+
for_manifest = generate_for_manifest,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
# =============================================================================
|
|
53
|
+
# NEW: Pre-Flight Validation Exports
|
|
54
|
+
# =============================================================================
|
|
55
|
+
|
|
56
|
+
# Validators - Pre-flight checks
|
|
57
|
+
Validate = Validators
|
|
58
|
+
|
|
59
|
+
# =============================================================================
|
|
60
|
+
# 🔐 INFISICAL Secrets Management Exports
|
|
61
|
+
# =============================================================================
|
|
62
|
+
|
|
63
|
+
# Complete Infisical integration
|
|
64
|
+
SecretsManagement = Infisical
|
|
65
|
+
|
|
66
|
+
# =============================================================================
|
|
67
|
+
# Master Generation Orchestrator
|
|
68
|
+
# =============================================================================
|
|
69
|
+
|
|
70
|
+
def run_pre_flight_validations(resource_path, manifest, all_services, global_config):
|
|
71
|
+
"""
|
|
72
|
+
Runs all pre-flight validations for a service.
|
|
73
|
+
|
|
74
|
+
This is the main entry point for validation. Call this during config-gen
|
|
75
|
+
to catch issues before they cause build failures.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
resource_path: Path to service directory
|
|
79
|
+
manifest: Service manifest dict
|
|
80
|
+
all_services: List of all services for dependency checking
|
|
81
|
+
global_config: Global topology config
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
Validation report dict
|
|
85
|
+
"""
|
|
86
|
+
return Validators.run_all_validations(
|
|
87
|
+
resource_path,
|
|
88
|
+
manifest,
|
|
89
|
+
all_services,
|
|
90
|
+
global_config,
|
|
91
|
+
None, # write_fn - will write to .autogenerated/
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
# generate_fixed_frontend_tsconfig, resolve_missing_dependencies, and
|
|
95
|
+
# provision_resource_database moved to premium/ along with the modules
|
|
96
|
+
# they wrapped (fixed_frontend_tsconfig.star, dependency_manifest.star,
|
|
97
|
+
# database_provisioner.star) - none had call sites outside this file.
|
|
98
|
+
|
|
99
|
+
# =============================================================================
|
|
100
|
+
# Exports
|
|
101
|
+
# =============================================================================
|
|
102
|
+
|
|
103
|
+
Generators = struct(
|
|
104
|
+
# Legacy
|
|
105
|
+
generate_backend_tsconfig=generate_backend_tsconfig,
|
|
106
|
+
generate_frontend_tsconfig=generate_frontend_tsconfig,
|
|
107
|
+
generate_frontend_library_tsconfig=generate_frontend_library_tsconfig,
|
|
108
|
+
generate_backend_library_tsconfig=generate_backend_library_tsconfig,
|
|
109
|
+
generate_prisma_config=generate_prisma_config,
|
|
110
|
+
generate_playwright_config=generate_playwright_config,
|
|
111
|
+
Vite=Vite,
|
|
112
|
+
|
|
113
|
+
# NEW: Pre-flight validation
|
|
114
|
+
Validate=Validate,
|
|
115
|
+
|
|
116
|
+
# NEW: Orchestrators
|
|
117
|
+
run_pre_flight_validations=run_pre_flight_validations,
|
|
118
|
+
|
|
119
|
+
# NEW: Infisical Secrets Management
|
|
120
|
+
SecretsManagement=SecretsManagement,
|
|
121
|
+
|
|
122
|
+
# NEW: AGENTS.md Generator for .autogenerated/ folder
|
|
123
|
+
AgentsMd=AgentsMd,
|
|
124
|
+
)
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
# 🔐 Infisical Starlark Generators - Complete Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Infisical Starlark generators provide a complete, programmatic way to manage secret injection in the TDK CLI. This replaces shell-based configuration with type-safe Starlark code.
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
11
|
+
│ INFISICAL GENERATORS │
|
|
12
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
13
|
+
│ │
|
|
14
|
+
│ 1. SECRETS GENERATOR (secrets_generator.star) │
|
|
15
|
+
│ ├── generate_for_service() - Service secret config │
|
|
16
|
+
│ ├── generate_docker_compose_env() - Docker Compose env │
|
|
17
|
+
│ ├── generate_entrypoint_env() - Entrypoint configuration │
|
|
18
|
+
│ └── generate_local_env_template() - Local dev .env │
|
|
19
|
+
│ │
|
|
20
|
+
│ 2. PATH MANAGER (path_manager.star) │
|
|
21
|
+
│ ├── plan_resource_path() - Plan Infisical path │
|
|
22
|
+
│ ├── validate_path() - Path validation │
|
|
23
|
+
│ ├── known_paths - 14 predefined service paths │
|
|
24
|
+
│ └── ROOT_PATHS, PLATFORM_PATHS - Path constants │
|
|
25
|
+
│ │
|
|
26
|
+
│ 3. MACHINE IDENTITY (machine_identity.star) │
|
|
27
|
+
│ ├── generate_universal_auth() - Client ID/Secret auth │
|
|
28
|
+
│ ├── generate_development_machine() - Dev machine config │
|
|
29
|
+
│ ├── generate_ci_machine() - CI/CD machine config │
|
|
30
|
+
│ └── AUTH_METHODS - All supported auth methods │
|
|
31
|
+
│ │
|
|
32
|
+
│ 4. ORGANIZATION (organization.star) │
|
|
33
|
+
│ ├── generate_config() - Complete org setup │
|
|
34
|
+
│ ├── ENVIRONMENTS - dev, staging, prod configs │
|
|
35
|
+
│ ├── ROLES - Admin, developer, readonly, etc. │
|
|
36
|
+
│ └── SECRET_TEMPLATES - DATABASE_URL, JWT_SECRET, etc. │
|
|
37
|
+
│ │
|
|
38
|
+
│ 5. DOCKER INTEGRATION (infisical_docker.star) │
|
|
39
|
+
│ ├── runtime_setup() - L4 runtime secret injection │
|
|
40
|
+
│ ├── builder_setup() - L3 builder CLI setup │
|
|
41
|
+
│ └── generate_compose_env() - Docker Compose environment │
|
|
42
|
+
│ │
|
|
43
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Quick Start
|
|
47
|
+
|
|
48
|
+
### 1. Load the Modules
|
|
49
|
+
|
|
50
|
+
```starlark
|
|
51
|
+
# Option 1: Load complete Infisical module
|
|
52
|
+
load("engine/topologies/tilt/generators/infisical/index.star", "Infisical")
|
|
53
|
+
|
|
54
|
+
# Option 2: Load from generators index (recommended)
|
|
55
|
+
load("engine/topologies/tilt/generators/index.star", "Generators")
|
|
56
|
+
Infisical = Generators.SecretsManagement
|
|
57
|
+
|
|
58
|
+
# Option 3: Load from security module (full integration)
|
|
59
|
+
load("engine/topologies/platform/security/secrets.star", "Secrets")
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Configure Service Secrets
|
|
63
|
+
|
|
64
|
+
```starlark
|
|
65
|
+
# Generate complete configuration for a service
|
|
66
|
+
config = Infisical.Secrets.generate_for_service(
|
|
67
|
+
resource_name="user-management-backend",
|
|
68
|
+
secret_path="/services/user",
|
|
69
|
+
resource_type="backend",
|
|
70
|
+
command="bun run src/index.ts",
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
# Access generated configuration
|
|
74
|
+
print(config["resource_name"]) # "user-management-backend"
|
|
75
|
+
print(config["secret_path"]) # "/services/user"
|
|
76
|
+
print(config["required_secrets"]) # ["DATABASE_URL", "JWT_SECRET", "RESOURCE_API_KEY"]
|
|
77
|
+
print(config["docker_compose"]["environment"])
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 3. Use in Dockerfile Generation
|
|
81
|
+
|
|
82
|
+
```starlark
|
|
83
|
+
# In L4 runtime layer generation
|
|
84
|
+
load("engine/topologies/platform/docker/layers/infisical/index.star", "InfisicalLayers")
|
|
85
|
+
|
|
86
|
+
def generate_backend_runtime(resource_name, cmd="bun run start"):
|
|
87
|
+
parts = []
|
|
88
|
+
|
|
89
|
+
# ... other Dockerfile setup ...
|
|
90
|
+
|
|
91
|
+
# Use InfisicalDocker for runtime secret injection
|
|
92
|
+
infisical_setup = InfisicalLayers.Docker.runtime_setup(
|
|
93
|
+
resource_name=resource_name,
|
|
94
|
+
resource_type="backend",
|
|
95
|
+
command=cmd,
|
|
96
|
+
use_entrypoint=True,
|
|
97
|
+
)
|
|
98
|
+
parts.append(infisical_setup)
|
|
99
|
+
|
|
100
|
+
return "".join(parts)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 4. Use in Docker Compose
|
|
104
|
+
|
|
105
|
+
```starlark
|
|
106
|
+
# Generate environment variables for docker-compose
|
|
107
|
+
env = Infisical.Docker.generate_compose_env(
|
|
108
|
+
resource_name="user-management-backend",
|
|
109
|
+
resource_type="backend",
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
# Use in dc_resource
|
|
113
|
+
dc_resource("user-management-backend", env=env)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Detailed API Reference
|
|
117
|
+
|
|
118
|
+
### Secrets Generator
|
|
119
|
+
|
|
120
|
+
#### `generate_for_service(resource_name, secret_path, resource_type, command, additional_vars)`
|
|
121
|
+
|
|
122
|
+
Generates complete secret configuration for a service.
|
|
123
|
+
|
|
124
|
+
**Parameters:**
|
|
125
|
+
- `resource_name` (str): Name of the service (e.g., "user-management-backend")
|
|
126
|
+
- `secret_path` (str): Infisical path (e.g., "/services/user")
|
|
127
|
+
- `resource_type` (str): Type of service (backend, frontend, payment, notification)
|
|
128
|
+
- `command` (str): Command to run after secret injection (optional)
|
|
129
|
+
- `additional_vars` (dict): Additional environment variables (optional)
|
|
130
|
+
|
|
131
|
+
**Returns:**
|
|
132
|
+
```starlark
|
|
133
|
+
{
|
|
134
|
+
"resource_name": str,
|
|
135
|
+
"secret_path": str,
|
|
136
|
+
"resource_type": str,
|
|
137
|
+
"validation": {"valid": bool, "errors": [str]},
|
|
138
|
+
"docker_compose": {"environment": dict},
|
|
139
|
+
"entrypoint": {"environment": dict},
|
|
140
|
+
"kubernetes": {"secret_ref": dict},
|
|
141
|
+
"local_template": str,
|
|
142
|
+
"required_secrets": [str],
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### `generate_for_services_batch(services_config)`
|
|
147
|
+
|
|
148
|
+
Batch configuration for multiple services.
|
|
149
|
+
|
|
150
|
+
```starlark
|
|
151
|
+
services = [
|
|
152
|
+
{"name": "user", "path": "/services/user", "type": "backend"},
|
|
153
|
+
{"name": "payment", "path": "/services/payment", "type": "payment"},
|
|
154
|
+
]
|
|
155
|
+
configs = Infisical.Secrets.generate_for_services_batch(services)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Path Manager
|
|
159
|
+
|
|
160
|
+
#### `plan_resource_path(resource_name, resource_type, parent_path)`
|
|
161
|
+
|
|
162
|
+
Plans the Infisical path for a service.
|
|
163
|
+
|
|
164
|
+
```starlark
|
|
165
|
+
plan = Infisical.Paths.plan_resource_path(
|
|
166
|
+
resource_name="user-management-backend",
|
|
167
|
+
resource_type="backend",
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
# Returns:
|
|
171
|
+
# {
|
|
172
|
+
# "resource_name": "user-management-backend",
|
|
173
|
+
# "resource_type": "backend",
|
|
174
|
+
# "parent_path": "/services",
|
|
175
|
+
# "resource_folder": "user",
|
|
176
|
+
# "full_path": "/services/user",
|
|
177
|
+
# "validation": {"valid": True, "errors": [], "warnings": []},
|
|
178
|
+
# "subpaths": ["/services/user/database", ...],
|
|
179
|
+
# }
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
#### Predefined Service Paths
|
|
183
|
+
|
|
184
|
+
14 services have predefined paths:
|
|
185
|
+
|
|
186
|
+
```starlark
|
|
187
|
+
# Access all known paths
|
|
188
|
+
print(Infisical.Paths.known_paths)
|
|
189
|
+
|
|
190
|
+
# Get specific service path
|
|
191
|
+
path = Infisical.Paths.get_known_resource_path("user-management-backend")
|
|
192
|
+
# Returns: "/services/user"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
| Service | Path |
|
|
196
|
+
|---------|------|
|
|
197
|
+
| user-management-backend | /services/user |
|
|
198
|
+
| order-management-backend | /services/order |
|
|
199
|
+
| order-planner-backend | /services/order-planner |
|
|
200
|
+
| staff-management-backend | /services/staff |
|
|
201
|
+
| treatment-management-backend | /services/treatment |
|
|
202
|
+
| inventory-management-backend | /services/inventory |
|
|
203
|
+
| website-management-backend | /services/website |
|
|
204
|
+
| gdpr-compliance-backend | /services/gdpr |
|
|
205
|
+
| payment-management-backend | /services/payment |
|
|
206
|
+
| payment-processing-backend | /services/billing |
|
|
207
|
+
| api-gateway | /services/api-gateway |
|
|
208
|
+
| api-gateway-test | /services/api-gateway-test |
|
|
209
|
+
| orchestrator-glue-backend | /services/orchestrator-glue |
|
|
210
|
+
|
|
211
|
+
### Machine Identity
|
|
212
|
+
|
|
213
|
+
#### `generate_universal_auth(identity_name, access_paths, project_id, environment)`
|
|
214
|
+
|
|
215
|
+
Generates Universal Auth (Client ID + Client Secret) configuration.
|
|
216
|
+
|
|
217
|
+
```starlark
|
|
218
|
+
config = Infisical.Identity.generate_universal_auth(
|
|
219
|
+
identity_name="dev-machine",
|
|
220
|
+
access_paths=["/services/*", "/platform/*"],
|
|
221
|
+
project_id="bc7cf07f-4002-4148-bca8-78a05c95dea2",
|
|
222
|
+
environment="dev",
|
|
223
|
+
)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
#### Predefined Machine Templates
|
|
227
|
+
|
|
228
|
+
```starlark
|
|
229
|
+
# Development machine (broad access)
|
|
230
|
+
dev_machine = Infisical.Identity.generate_development_machine("dev-machine")
|
|
231
|
+
|
|
232
|
+
# CI/CD machine (for GitHub Actions)
|
|
233
|
+
ci_machine = Infisical.Identity.generate_ci_machine("github-actions")
|
|
234
|
+
|
|
235
|
+
# Service-specific machine (restricted access)
|
|
236
|
+
resource_machine = Infisical.Identity.generate_resource_specific_machine("user")
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Organization
|
|
240
|
+
|
|
241
|
+
#### `generate_config(org_name, env_names, resource_names)`
|
|
242
|
+
|
|
243
|
+
Generates complete organization configuration.
|
|
244
|
+
|
|
245
|
+
```starlark
|
|
246
|
+
org = Infisical.Org.generate_config(
|
|
247
|
+
org_name="{project}",
|
|
248
|
+
env_names=["dev", "staging", "prod"],
|
|
249
|
+
resource_names=["user", "order", "payment"],
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
# Returns complete setup including:
|
|
253
|
+
# - Organization metadata
|
|
254
|
+
# - Project configuration
|
|
255
|
+
# - Environments
|
|
256
|
+
# - Roles
|
|
257
|
+
# - Folder structure
|
|
258
|
+
# - Secret templates
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Migration from Shell Scripts
|
|
262
|
+
|
|
263
|
+
### Before (Shell-based)
|
|
264
|
+
|
|
265
|
+
```dockerfile
|
|
266
|
+
# Hardcoded in Dockerfile generation
|
|
267
|
+
COPY --chmod=0755 shared-platform-engineering/docker-templates/infisical-entrypoint.sh /entrypoint.sh
|
|
268
|
+
ENV RESOURCE_NAME=my-service
|
|
269
|
+
ENV INFISICAL_SECRET_PATH=/services/my-service
|
|
270
|
+
ENTRYPOINT ["/entrypoint.sh"]
|
|
271
|
+
CMD ["bun", "run", "start"]
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### After (Starlark generators)
|
|
275
|
+
|
|
276
|
+
```starlark
|
|
277
|
+
# In your Tiltfile or .star file
|
|
278
|
+
load("engine/topologies/platform/docker/layers/infisical/index.star", "InfisicalLayers")
|
|
279
|
+
|
|
280
|
+
# Generate Dockerfile snippet dynamically
|
|
281
|
+
infisical_setup = InfisicalLayers.Docker.runtime_setup(
|
|
282
|
+
resource_name="my-service",
|
|
283
|
+
secret_path="/services/my-service", # Auto-generated if not provided
|
|
284
|
+
resource_type="backend",
|
|
285
|
+
command="bun run start",
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
# Returns:
|
|
289
|
+
# COPY --chmod=0755 shared-platform-engineering/docker-templates/infisical-entrypoint.sh /entrypoint.sh
|
|
290
|
+
# ENV RESOURCE_NAME=my-service
|
|
291
|
+
# ENV INFISICAL_SECRET_PATH=/services/my-service
|
|
292
|
+
# ENV INFISICAL_TOKEN=${INFISICAL_TOKEN:-}
|
|
293
|
+
# ... (all env vars from generator)
|
|
294
|
+
# ENTRYPOINT ["/entrypoint.sh"]
|
|
295
|
+
# CMD ["bun", "run", "start"]
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Usage in Tiltfile
|
|
299
|
+
|
|
300
|
+
### Complete Example
|
|
301
|
+
|
|
302
|
+
```starlark
|
|
303
|
+
# Load modules
|
|
304
|
+
load("engine/topologies/platform/security/secrets.star", "Secrets")
|
|
305
|
+
load("engine/topologies/tilt/generators/infisical/index.star", "Infisical")
|
|
306
|
+
|
|
307
|
+
# Define services to configure
|
|
308
|
+
services = [
|
|
309
|
+
"user-management-backend",
|
|
310
|
+
"order-management-backend",
|
|
311
|
+
"payment-management-backend",
|
|
312
|
+
]
|
|
313
|
+
|
|
314
|
+
# Configure all services
|
|
315
|
+
for service in services:
|
|
316
|
+
# Get predefined configuration
|
|
317
|
+
config = Secrets.configure_predefined_service(service)
|
|
318
|
+
|
|
319
|
+
if config:
|
|
320
|
+
# Use in docker_compose
|
|
321
|
+
docker_compose("services/{}/docker-compose.yml".format(service))
|
|
322
|
+
dc_resource(
|
|
323
|
+
service,
|
|
324
|
+
env=config["docker_compose"]["environment"],
|
|
325
|
+
labels=["backend"],
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
# Or configure all at once
|
|
329
|
+
all_configs = Secrets.configure_all_predefined_services()
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## Testing
|
|
333
|
+
|
|
334
|
+
### Validate Paths
|
|
335
|
+
|
|
336
|
+
```starlark
|
|
337
|
+
# Validate a custom path
|
|
338
|
+
result = Infisical.Paths.validate_path("/services/my-service")
|
|
339
|
+
print(result["valid"]) # True/False
|
|
340
|
+
print(result["errors"]) # [] or [error messages]
|
|
341
|
+
print(result["normalized"]) # Normalized path
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Validate Machine Identity
|
|
345
|
+
|
|
346
|
+
```starlark
|
|
347
|
+
# Check auth method
|
|
348
|
+
result = Infisical.Identity.validate_auth_method("universal-auth")
|
|
349
|
+
print(result["valid"]) # True
|
|
350
|
+
print(result["supported"]) # True
|
|
351
|
+
print(result["deprecated"]) # False
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## File Structure
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
tdk-cli/engine/topologies/
|
|
358
|
+
├── tilt/generators/infisical/
|
|
359
|
+
│ ├── index.star # Master module export
|
|
360
|
+
│ ├── secrets_generator.star # Secret injection config
|
|
361
|
+
│ ├── path_manager.star # Path/folder management
|
|
362
|
+
│ ├── machine_identity.star # Machine ID configuration
|
|
363
|
+
│ ├── organization.star # Org setup templates
|
|
364
|
+
│ └── examples.star # Usage examples
|
|
365
|
+
│
|
|
366
|
+
└── platform/docker/layers/infisical/
|
|
367
|
+
├── index.star # Docker layers index
|
|
368
|
+
└── infisical_docker.star # Dockerfile generation
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## Best Practices
|
|
372
|
+
|
|
373
|
+
1. **Use Predefined Services**: When possible, use `Secrets.PREDEFINED_RESOURCES` instead of manual configuration.
|
|
374
|
+
|
|
375
|
+
2. **Validate Early**: Always validate paths and configurations before using them:
|
|
376
|
+
```starlark
|
|
377
|
+
validation = Infisical.Paths.validate_path(path)
|
|
378
|
+
if not validation["valid"]:
|
|
379
|
+
fail("Invalid path: " + str(validation["errors"]))
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
3. **Don't Hardcode Secrets**: Always use generators for secret paths and never hardcode secret values.
|
|
383
|
+
|
|
384
|
+
4. **Batch Configuration**: Use `generate_for_services_batch()` when configuring multiple services.
|
|
385
|
+
|
|
386
|
+
5. **Environment Separation**: Use different configurations for dev/staging/prod:
|
|
387
|
+
```starlark
|
|
388
|
+
if environment == "prod":
|
|
389
|
+
config = Infisical.Identity.generate_production_machine(...)
|
|
390
|
+
else:
|
|
391
|
+
config = Infisical.Identity.generate_development_machine(...)
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
## Troubleshooting
|
|
395
|
+
|
|
396
|
+
### Path Validation Failures
|
|
397
|
+
|
|
398
|
+
```starlark
|
|
399
|
+
result = Infisical.Paths.validate_path("/invalid/path with spaces")
|
|
400
|
+
# Returns: {"valid": False, "errors": ["Invalid characters: [' ']"]}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Fix: Use the path normalizer
|
|
404
|
+
```starlark
|
|
405
|
+
normalized = Infisical.Paths.normalize_path("/invalid/path with spaces")
|
|
406
|
+
# Returns: "/invalid/path-with-spaces"
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### Unknown Service
|
|
410
|
+
|
|
411
|
+
```starlark
|
|
412
|
+
path = Infisical.Paths.get_known_resource_path("unknown-service")
|
|
413
|
+
# Returns: None
|
|
414
|
+
|
|
415
|
+
# Solution: Plan a new path
|
|
416
|
+
plan = Infisical.Paths.plan_resource_path("unknown-service")
|
|
417
|
+
path = plan["full_path"] # "/services/unknown-service"
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
## See Also
|
|
421
|
+
|
|
422
|
+
- `examples.star` - Complete usage examples
|
|
423
|
+
- `SECRETS_SETUP_COMPLETE.md` - Infisical setup documentation
|
|
424
|
+
- `MACHINE_IDENTITY.md` - Machine identity setup guide
|