@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,258 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🧪 TILT SDK - ENV GENERATORS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: .tilt/provisioner/orchestrator/generators/env.star
|
|
5
|
+
# Purpose: Environment file generation helpers
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
9
|
+
BASE_PORT_FRONTEND = 3000
|
|
10
|
+
BASE_PORT_BACKEND = 4000
|
|
11
|
+
OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
|
|
12
|
+
# === END INLINED CONSTANTS ===
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
load("../../../../platform/docker/auth/auth.star", "AuthConfig")
|
|
16
|
+
load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
|
|
17
|
+
load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _normalize_dependency_path(dependency):
|
|
22
|
+
dep = str(dependency).strip()
|
|
23
|
+
if not dep:
|
|
24
|
+
return ''
|
|
25
|
+
|
|
26
|
+
if dep.endswith('-management-backend'):
|
|
27
|
+
return dep.replace('-management-backend', '')
|
|
28
|
+
|
|
29
|
+
if dep.endswith('-backend'):
|
|
30
|
+
return dep[:-8]
|
|
31
|
+
|
|
32
|
+
if dep.endswith('-frontend'):
|
|
33
|
+
return dep[:-9]
|
|
34
|
+
|
|
35
|
+
return dep
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _dependency_env_key(dependency):
|
|
39
|
+
dep = str(dependency).upper()
|
|
40
|
+
key = ''
|
|
41
|
+
for i in range(len(dep)):
|
|
42
|
+
char = dep[i]
|
|
43
|
+
if (char >= 'A' and char <= 'Z') or (char >= '0' and char <= '9'):
|
|
44
|
+
key += char
|
|
45
|
+
else:
|
|
46
|
+
key += '_'
|
|
47
|
+
while '__' in key:
|
|
48
|
+
key = key.replace('__', '_')
|
|
49
|
+
return key.strip('_')
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _build_dependency_env_lines(manifest):
|
|
53
|
+
dependencies = manifest.get('dependencies', manifest.get('dependsOn', []))
|
|
54
|
+
if not dependencies:
|
|
55
|
+
return ''
|
|
56
|
+
|
|
57
|
+
# Deduplicate while preserving first-seen order.
|
|
58
|
+
seen = {}
|
|
59
|
+
ordered = []
|
|
60
|
+
for dep in dependencies:
|
|
61
|
+
dep_path = _normalize_dependency_path(dep)
|
|
62
|
+
if dep_path and not seen.get(dep_path, False):
|
|
63
|
+
seen[dep_path] = True
|
|
64
|
+
ordered.append(dep_path)
|
|
65
|
+
|
|
66
|
+
if not ordered:
|
|
67
|
+
return ''
|
|
68
|
+
|
|
69
|
+
lines = '\n# Dependency API URLs (using standardized /api/v1 paths)\n'
|
|
70
|
+
for dep_path in ordered:
|
|
71
|
+
dep_key = _dependency_env_key(dep_path)
|
|
72
|
+
# Use standardized API path from traefik helpers
|
|
73
|
+
dep_api_path = get_api_path(dep_path)
|
|
74
|
+
lines += 'VITE_{dep_key}_API_URL=http://{local_domain}{dep_api_path}\n'.format(
|
|
75
|
+
dep_key=dep_key,
|
|
76
|
+
dep_api_path=dep_api_path,
|
|
77
|
+
local_domain=PlatformDockerConstants.LOCAL_DOMAIN,
|
|
78
|
+
)
|
|
79
|
+
return lines
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _generate_params_env(manifest, backend_manifest=None, write_fn=None):
|
|
83
|
+
"""Generate params (non-secret) environment variables from manifest.
|
|
84
|
+
|
|
85
|
+
This generates config like BASE_URL, PORT, etc. - NEVER secrets.
|
|
86
|
+
Secrets are handled separately by _generate_secrets_env().
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
manifest: Service manifest dict with configuration
|
|
90
|
+
backend_manifest: Optional backend manifest for frontend services
|
|
91
|
+
write_fn: Optional write function for file output (callable)
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
str: Generated environment file content
|
|
95
|
+
"""
|
|
96
|
+
resource_path = manifest.get('_resource_path', '')
|
|
97
|
+
app_type = manifest.get('appType', 'backend')
|
|
98
|
+
stack = manifest.get('stack', 'app')
|
|
99
|
+
port = manifest.get('port', BASE_PORT_FRONTEND)
|
|
100
|
+
# Use standardized API path from traefik helpers
|
|
101
|
+
api_path = get_api_path(stack)
|
|
102
|
+
api_url = 'http://' + PlatformDockerConstants.LOCAL_DOMAIN + api_path
|
|
103
|
+
target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.backend.autogenerated'
|
|
104
|
+
|
|
105
|
+
# Auth configuration - support both identity service and local JWT modes
|
|
106
|
+
# Use centralized auth utilities for consistency
|
|
107
|
+
# Extract auth config from manifest to pass as a separate dict
|
|
108
|
+
# Auto-detect identity-service mode if 'identity' is in dependsOn
|
|
109
|
+
internal_deps = manifest.get('dependsOn', []) if manifest else []
|
|
110
|
+
has_identity_dep = 'identity' in internal_deps
|
|
111
|
+
|
|
112
|
+
# If manifest has authMode, use it; otherwise auto-detect based on identity dependency
|
|
113
|
+
manifest_auth_mode = manifest.get('authMode') if manifest else None
|
|
114
|
+
if manifest_auth_mode:
|
|
115
|
+
auth_mode = manifest_auth_mode
|
|
116
|
+
elif has_identity_dep:
|
|
117
|
+
auth_mode = 'identity-service'
|
|
118
|
+
else:
|
|
119
|
+
auth_mode = None
|
|
120
|
+
|
|
121
|
+
auth_config = {
|
|
122
|
+
'authMode': auth_mode,
|
|
123
|
+
'jwtSecret': manifest.get('jwtSecret') if manifest else None,
|
|
124
|
+
'identityServiceUrl': manifest.get('identityServiceUrl') if manifest else None,
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# If we auto-detected identity-service mode but no URL is set, use default
|
|
128
|
+
if auth_mode == 'identity-service' and not auth_config['identityServiceUrl']:
|
|
129
|
+
auth_config['identityServiceUrl'] = AuthConfig.get_identity_resource_url(None)
|
|
130
|
+
|
|
131
|
+
if app_type == 'frontend':
|
|
132
|
+
backend_port = backend_manifest.get('port', BASE_PORT_BACKEND) if backend_manifest else BASE_PORT_BACKEND
|
|
133
|
+
backend_name = manifest.get('backendName', stack + '-backend')
|
|
134
|
+
target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.frontend.autogenerated'
|
|
135
|
+
|
|
136
|
+
# Get basePath from manifest or default to /{stack}
|
|
137
|
+
base_path = manifest.get('basePath', '/' + stack)
|
|
138
|
+
public_url = 'http://' + PlatformDockerConstants.LOCAL_DOMAIN + base_path
|
|
139
|
+
|
|
140
|
+
content = """# Generated by Tilt SDK - DO NOT EDIT
|
|
141
|
+
# Frontend Environment Variables
|
|
142
|
+
VITE_API_PORT={backend_port}
|
|
143
|
+
VITE_API_URL={api_url}
|
|
144
|
+
VITE_BACKEND_NAME={backend_name}
|
|
145
|
+
PUBLIC_URL={public_url}
|
|
146
|
+
""".format(
|
|
147
|
+
backend_port=backend_port,
|
|
148
|
+
api_url=api_url,
|
|
149
|
+
backend_name=backend_name,
|
|
150
|
+
public_url=public_url,
|
|
151
|
+
)
|
|
152
|
+
content += _build_dependency_env_lines(manifest)
|
|
153
|
+
else:
|
|
154
|
+
db_name = manifest.get('databaseName', PlatformDockerConstants.get_db_name(stack))
|
|
155
|
+
|
|
156
|
+
content = """# Generated by Tilt SDK - DO NOT EDIT
|
|
157
|
+
# Backend Environment Variables
|
|
158
|
+
PORT={port}
|
|
159
|
+
DATABASE_NAME={db_name}
|
|
160
|
+
API_URL={api_url}
|
|
161
|
+
""".format(port=port, db_name=db_name, api_url=api_url)
|
|
162
|
+
|
|
163
|
+
if manifest.get('usePrisma', True):
|
|
164
|
+
content += """
|
|
165
|
+
# Prisma
|
|
166
|
+
DATABASE_URL=""" + PlatformDockerConstants.get_database_url_for_env(db_name) + """
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
# Add authentication configuration using centralized auth utilities
|
|
170
|
+
content += AuthConfig.generate_env_file_auth_section(auth_config)
|
|
171
|
+
|
|
172
|
+
# Add params (non-secret config variables)
|
|
173
|
+
# NOTE: Secrets are NEVER added here - they come from Infisical only
|
|
174
|
+
params = manifest.get('params', manifest.get('envVars', {})) # Fallback to envVars during migration
|
|
175
|
+
if params:
|
|
176
|
+
content += '\n# Params (non-secret config)\n'
|
|
177
|
+
# Sort keys for deterministic output to avoid unnecessary file rewrites.
|
|
178
|
+
for key in sorted(params.keys()):
|
|
179
|
+
value = params.get(key)
|
|
180
|
+
content += key + '=' + str(value) + '\n'
|
|
181
|
+
|
|
182
|
+
if write_fn and resource_path:
|
|
183
|
+
write_fn(resource_path + target_filename, content)
|
|
184
|
+
|
|
185
|
+
return content
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _generate_secrets_env(manifest, write_fn=None):
|
|
189
|
+
"""Generate secrets environment variables from Infisical.
|
|
190
|
+
|
|
191
|
+
This function returns a dict of secrets that will be resolved
|
|
192
|
+
from Infisical at runtime. The actual values are NOT embedded here.
|
|
193
|
+
|
|
194
|
+
CRITICAL: This function NEVER reads secrets from files - only from Infisical.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
manifest: Service manifest dict with secrets configuration
|
|
198
|
+
write_fn: Optional write function for file output (callable)
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
dict: Map of secret names to Infisical placeholder values
|
|
202
|
+
"""
|
|
203
|
+
resource_path = manifest.get('_resource_path', '')
|
|
204
|
+
secrets_config = manifest.get('secrets', {})
|
|
205
|
+
|
|
206
|
+
if not secrets_config:
|
|
207
|
+
return {}
|
|
208
|
+
|
|
209
|
+
required = secrets_config.get('required', [])
|
|
210
|
+
optional = secrets_config.get('optional', [])
|
|
211
|
+
|
|
212
|
+
# Build a placeholder map - actual values come from Infisical at runtime
|
|
213
|
+
secrets_env = {}
|
|
214
|
+
|
|
215
|
+
for secret_name in required:
|
|
216
|
+
# Placeholder - value resolved by Infisical
|
|
217
|
+
secrets_env[secret_name] = "${INFISICAL_SECRET:" + secret_name + "}"
|
|
218
|
+
|
|
219
|
+
for secret_name in optional:
|
|
220
|
+
# Placeholder - value resolved by Infisical
|
|
221
|
+
secrets_env[secret_name] = "${INFISICAL_SECRET:" + secret_name + "}"
|
|
222
|
+
|
|
223
|
+
return secrets_env
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def _get_all_env(manifest, backend_manifest=None, write_fn=None):
|
|
227
|
+
"""Generate complete environment (params + secrets placeholder).
|
|
228
|
+
|
|
229
|
+
Returns a dict with both params and secrets keys.
|
|
230
|
+
Actual secret values resolved by Infisical at container runtime.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
manifest: Service manifest dict with configuration
|
|
234
|
+
backend_manifest: Optional backend manifest for frontend services
|
|
235
|
+
write_fn: Optional write function for file output (callable)
|
|
236
|
+
|
|
237
|
+
Returns:
|
|
238
|
+
dict: Contains 'params' (str) and 'secrets' (dict) keys
|
|
239
|
+
"""
|
|
240
|
+
# Phase 1: Generate params (non-secret config)
|
|
241
|
+
params_content = _generate_params_env(manifest, backend_manifest, write_fn)
|
|
242
|
+
|
|
243
|
+
# Phase 2: Get secrets configuration (resolved by Infisical)
|
|
244
|
+
secrets_env = _generate_secrets_env(manifest, write_fn)
|
|
245
|
+
|
|
246
|
+
return {
|
|
247
|
+
'params': params_content,
|
|
248
|
+
'secrets': secrets_env,
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
EnvGenerators = struct(
|
|
253
|
+
generate_params_env = _generate_params_env,
|
|
254
|
+
generate_secrets_env = _generate_secrets_env,
|
|
255
|
+
get_all_env = _get_all_env,
|
|
256
|
+
# Legacy alias for backward compatibility during migration
|
|
257
|
+
generate_env_file = _generate_params_env,
|
|
258
|
+
)
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🎨 TILT SDK - FRONTEND API CLIENT GENERATORS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Purpose: Generate api-client.ts, env.ts, and index.ts for frontend services
|
|
5
|
+
# These files import from @{npm_scope}/platform-api-client package
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
# Load npm scope from project.json
|
|
9
|
+
# Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
|
|
10
|
+
def _load_npm_scope():
|
|
11
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
12
|
+
project_json_path = '.tdk/project.json'
|
|
13
|
+
if project_root:
|
|
14
|
+
project_json_path = project_root + '/' + project_json_path
|
|
15
|
+
|
|
16
|
+
if os.path.exists(project_json_path):
|
|
17
|
+
_project_json = read_json(project_json_path)
|
|
18
|
+
return _project_json.get('project', {}).get('name', 'tdk-project')
|
|
19
|
+
return 'tdk-project'
|
|
20
|
+
|
|
21
|
+
_NPM_SCOPE = _load_npm_scope()
|
|
22
|
+
|
|
23
|
+
load("../../../../platform/docker/networking/traefik_helpers.star", "get_api_path")
|
|
24
|
+
load("../../../../platform/docker/constants.star", "PlatformDockerConstants")
|
|
25
|
+
load("./dependencies/resolver.star", "resolve_backend_api_path")
|
|
26
|
+
|
|
27
|
+
def generate_frontend_api_client(manifest, write_fn=None):
|
|
28
|
+
"""Generate .autogenerated/api-client.ts for a frontend resource.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
manifest: Resource manifest with stack field
|
|
32
|
+
write_fn: Optional function to write file (for Tilt)
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
str: Generated file content
|
|
36
|
+
"""
|
|
37
|
+
stack = manifest.get("stack", "app")
|
|
38
|
+
|
|
39
|
+
# Auto-resolve apiPath from backend manifest if backendName is specified
|
|
40
|
+
backend_api_path = resolve_backend_api_path(manifest)
|
|
41
|
+
if backend_api_path:
|
|
42
|
+
api_path = backend_api_path
|
|
43
|
+
else:
|
|
44
|
+
api_path = get_api_path(stack, manifest)
|
|
45
|
+
|
|
46
|
+
content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
|
|
47
|
+
// Source: engine/topologies/tilt/resources/orchestrator/generators/frontend.star
|
|
48
|
+
// Purpose: Pre-configured API client for {stack} resource
|
|
49
|
+
|
|
50
|
+
import {{ createApiClient }} from '@" + _NPM_SCOPE + "'/platform-api-client';
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Pre-configured API client for {stack} resource
|
|
54
|
+
*
|
|
55
|
+
* Usage:
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import {{ apiClient }} from '../.autogenerated/api-client';
|
|
58
|
+
* const data = await apiClient.get('/');
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export const apiClient = createApiClient({{
|
|
62
|
+
baseURL: import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}',
|
|
63
|
+
withAuth: true,
|
|
64
|
+
}});
|
|
65
|
+
|
|
66
|
+
export default apiClient;
|
|
67
|
+
'''.format(
|
|
68
|
+
stack=stack,
|
|
69
|
+
api_path=api_path,
|
|
70
|
+
local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
if write_fn:
|
|
74
|
+
resource_path = manifest.get('_resource_path', '')
|
|
75
|
+
write_fn(resource_path + '/.autogenerated/api-client.ts', content)
|
|
76
|
+
|
|
77
|
+
return content
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def generate_frontend_env_ts(manifest, write_fn=None):
|
|
81
|
+
"""Generate .autogenerated/env.ts for a frontend resource.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
manifest: Resource manifest with stack field
|
|
85
|
+
write_fn: Optional function to write file (for Tilt)
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
str: Generated file content
|
|
89
|
+
"""
|
|
90
|
+
stack = manifest.get("stack", "app")
|
|
91
|
+
|
|
92
|
+
# Auto-resolve apiPath from backend manifest if backendName is specified
|
|
93
|
+
backend_api_path = resolve_backend_api_path(manifest)
|
|
94
|
+
if backend_api_path:
|
|
95
|
+
api_path = backend_api_path
|
|
96
|
+
else:
|
|
97
|
+
api_path = get_api_path(stack, manifest)
|
|
98
|
+
|
|
99
|
+
content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
|
|
100
|
+
// Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
|
|
101
|
+
// Purpose: Environment constants for {stack} resource
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Base API URL for {stack} resource
|
|
105
|
+
* Uses VITE_API_URL env var with fallback to local dev URL
|
|
106
|
+
*/
|
|
107
|
+
export const API_URL = import.meta.env.VITE_API_URL || 'http://{local_domain}{api_path}';
|
|
108
|
+
'''.format(
|
|
109
|
+
stack=stack,
|
|
110
|
+
api_path=api_path,
|
|
111
|
+
local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if write_fn:
|
|
115
|
+
resource_path = manifest.get('_resource_path', '')
|
|
116
|
+
write_fn(resource_path + '/.autogenerated/env.ts', content)
|
|
117
|
+
|
|
118
|
+
return content
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def generate_frontend_api_index(manifest, write_fn=None):
|
|
122
|
+
"""Generate .autogenerated/api-index.ts for clean imports.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
manifest: Service manifest
|
|
126
|
+
write_fn: Optional function to write file (for Tilt)
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
str: Generated file content
|
|
130
|
+
"""
|
|
131
|
+
content = '''// 🛑 GENERATED BY TILT SDK - DO NOT EDIT
|
|
132
|
+
// Source: .tilt/topologies/tilt/resources/orchestrator/generators/frontend.star
|
|
133
|
+
// Purpose: Clean barrel exports for API client
|
|
134
|
+
|
|
135
|
+
export { apiClient } from './api-client';
|
|
136
|
+
export { API_URL } from './env';
|
|
137
|
+
'''
|
|
138
|
+
|
|
139
|
+
if write_fn:
|
|
140
|
+
resource_path = manifest.get('_resource_path', '')
|
|
141
|
+
write_fn(resource_path + '/.autogenerated/api-index.ts', content)
|
|
142
|
+
|
|
143
|
+
return content
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def generate_all_frontend_api_files(manifest, write_fn=None):
|
|
147
|
+
"""Generate all frontend API files for a service.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
manifest: Service manifest
|
|
151
|
+
write_fn: Function to write files
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
dict: Generated content for each file
|
|
155
|
+
"""
|
|
156
|
+
return {
|
|
157
|
+
'api-client.ts': generate_frontend_api_client(manifest, write_fn),
|
|
158
|
+
'env.ts': generate_frontend_env_ts(manifest, write_fn),
|
|
159
|
+
'api-index.ts': generate_frontend_api_index(manifest, write_fn),
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# Export struct for easy importing
|
|
164
|
+
FrontendGenerators = struct(
|
|
165
|
+
generate_api_client = generate_frontend_api_client,
|
|
166
|
+
generate_env_ts = generate_frontend_env_ts,
|
|
167
|
+
generate_api_index = generate_frontend_api_index,
|
|
168
|
+
generate_all = generate_all_frontend_api_files,
|
|
169
|
+
)
|