@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,36 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# ✅ ORCHESTRATOR APPLY - resource VALIDATION
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
load('../../common/utils.star', 'Utils')
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def validate_resource(resource_config):
|
|
9
|
+
resource_name = resource_config['name']
|
|
10
|
+
resource_paths = []
|
|
11
|
+
|
|
12
|
+
for resource in resource_config.get('resources', []):
|
|
13
|
+
resource_paths.append(resource_config['path'] + "/" + resource['name'])
|
|
14
|
+
|
|
15
|
+
circular_deps = Utils.detect_circular_deps(resource_paths)
|
|
16
|
+
if circular_deps:
|
|
17
|
+
error_msg = "🔴 CIRCULAR DEPENDENCY DETECTED IN RESOURCE: " + resource_name + "\n"
|
|
18
|
+
for cycle in circular_deps:
|
|
19
|
+
error_msg += " 🔄 " + ' → '.join(cycle) + "\n"
|
|
20
|
+
fail(error_msg)
|
|
21
|
+
|
|
22
|
+
for resource_path in resource_paths:
|
|
23
|
+
naming_errors = Utils.validate_lib_naming(resource_path)
|
|
24
|
+
if naming_errors:
|
|
25
|
+
# Print warnings but don't fail - allow services to load with missing libs
|
|
26
|
+
print("⚠️ LIBRARY NAMING WARNING in " + resource_name)
|
|
27
|
+
for err in naming_errors:
|
|
28
|
+
print(" ❌ " + err['package'] + ": " + err['error'])
|
|
29
|
+
print(" 📝 Continuing despite missing libraries (this may cause build failures)")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
ResourceValidation = struct(
|
|
33
|
+
validate = validate_resource,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
VALIDATION = {}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🎛️ ORCHESTRATOR APPLY - RUNTIME FLAGS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
def _resolve_bool_env(env_name, default_value):
|
|
6
|
+
value = os.environ.get(env_name, '').lower()
|
|
7
|
+
if value in ['1', 'true', 'yes', 'on']:
|
|
8
|
+
return True
|
|
9
|
+
if value in ['0', 'false', 'no', 'off']:
|
|
10
|
+
return False
|
|
11
|
+
return default_value
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def resolve_runtime_flags():
|
|
15
|
+
trigger_mode = os.environ.get('TILT_TRIGGER_MODE', 'auto').lower()
|
|
16
|
+
|
|
17
|
+
# Match trigger mode semantics by default:
|
|
18
|
+
# - auto mode: boot app resources automatically
|
|
19
|
+
# - manual mode: require explicit triggers for app resources
|
|
20
|
+
auto_init_apps = _resolve_bool_env('TILT_AUTO_INIT_APPS', trigger_mode == 'auto')
|
|
21
|
+
auto_init_migrators = _resolve_bool_env('TILT_AUTO_INIT_MIGRATORS', False)
|
|
22
|
+
|
|
23
|
+
# Config generators are lightweight and safe to run on startup by default.
|
|
24
|
+
auto_init_config_gen = _resolve_bool_env('TILT_AUTO_INIT_CONFIG_GEN', True)
|
|
25
|
+
|
|
26
|
+
# In manual mode, avoid hard gating app backends on migrator builds.
|
|
27
|
+
enforce_migrator_deps = _resolve_bool_env('TILT_ENFORCE_MIGRATOR_DEPS', trigger_mode == 'auto')
|
|
28
|
+
|
|
29
|
+
# In manual mode, default to single replica for faster local feedback loops.
|
|
30
|
+
disable_app_replicas = _resolve_bool_env('TILT_DISABLE_APP_REPLICAS', trigger_mode == 'manual')
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
'trigger_mode': trigger_mode,
|
|
34
|
+
'auto_init_apps': auto_init_apps,
|
|
35
|
+
'auto_init_migrators': auto_init_migrators,
|
|
36
|
+
'auto_init_config_gen': auto_init_config_gen,
|
|
37
|
+
'enforce_migrator_deps': enforce_migrator_deps,
|
|
38
|
+
'disable_app_replicas': disable_app_replicas,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
RuntimeFlags = struct(
|
|
43
|
+
resolve = resolve_runtime_flags,
|
|
44
|
+
)
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🧱 TILT SDK - TYPESCRIPT BUILDERS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: .tilt/provisioner/orchestrator/builders/typescript.star
|
|
5
|
+
# Purpose: TypeScript build helpers for orchestrator
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
10
|
+
OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
|
|
11
|
+
DEFAULTS = {}
|
|
12
|
+
|
|
13
|
+
# === END INLINED CONSTANTS ===
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
load('../../../common/utils.star', 'Utils')
|
|
17
|
+
# Import filewatch ignore patterns from master config (replaces hardcoded values)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _with_resource_prefix(pattern, resource_path):
|
|
21
|
+
"""Prefix dockerignore pattern so it applies to the service subtree in root context."""
|
|
22
|
+
normalized = pattern
|
|
23
|
+
if normalized.startswith('/'):
|
|
24
|
+
normalized = normalized[1:]
|
|
25
|
+
|
|
26
|
+
# Patterns in autogenerated dockerignore are service-relative.
|
|
27
|
+
# When context is project root, scope patterns under resource_path.
|
|
28
|
+
return resource_path + '/' + normalized
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def get_filewatch_ignore_patterns(resource_path):
|
|
32
|
+
"""Return filewatch ignore patterns to prevent fsnotify buffer overflow."""
|
|
33
|
+
return [
|
|
34
|
+
resource_path + "/node_modules",
|
|
35
|
+
resource_path + "/dist",
|
|
36
|
+
resource_path + "/build",
|
|
37
|
+
resource_path + "/.git",
|
|
38
|
+
resource_path + "/.prisma",
|
|
39
|
+
resource_path + "/.turbo",
|
|
40
|
+
resource_path + "/coverage",
|
|
41
|
+
resource_path + "/tmp",
|
|
42
|
+
resource_path + "/temp",
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
def _load_autogenerated_dockerignore_patterns(dockerfile_path, resource_path):
|
|
46
|
+
"""
|
|
47
|
+
Read Dockerfile-specific autogenerated dockerignore and convert to Tilt ignore rules.
|
|
48
|
+
Note: Tilt ignore does not support negate patterns ('!'), so those are skipped.
|
|
49
|
+
"""
|
|
50
|
+
dockerignore_path = dockerfile_path + '.dockerignore'
|
|
51
|
+
content = read_file(dockerignore_path, default='')
|
|
52
|
+
|
|
53
|
+
if not content:
|
|
54
|
+
return []
|
|
55
|
+
|
|
56
|
+
ignore_patterns = []
|
|
57
|
+
for raw_line in str(content).split('\n'):
|
|
58
|
+
line = raw_line.strip()
|
|
59
|
+
if not line or line.startswith('#') or line.startswith('!'):
|
|
60
|
+
continue
|
|
61
|
+
ignore_patterns.append(_with_resource_prefix(line, resource_path))
|
|
62
|
+
|
|
63
|
+
return ignore_patterns
|
|
64
|
+
|
|
65
|
+
def _get_resource_only_paths(resource_path):
|
|
66
|
+
"""
|
|
67
|
+
Generate minimal file paths for docker_build 'only' parameter.
|
|
68
|
+
This dramatically reduces build context from 7.4GB to just the necessary files.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
resource_path: Path to service (e.g., 'services/product/{domain}/{service-name}')
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
List of paths to include in build context
|
|
75
|
+
"""
|
|
76
|
+
only_paths = [
|
|
77
|
+
# Root level dependencies
|
|
78
|
+
'bun.lock',
|
|
79
|
+
'bun.lockb',
|
|
80
|
+
'package.json',
|
|
81
|
+
|
|
82
|
+
# Service-specific files
|
|
83
|
+
resource_path,
|
|
84
|
+
|
|
85
|
+
# Shared runtime scripts copied in generated Dockerfiles.
|
|
86
|
+
'shared-platform-engineering/docker-templates',
|
|
87
|
+
|
|
88
|
+
# Common DDD layers used by backend Dockerfiles.
|
|
89
|
+
'shared-ddd-layers/domain',
|
|
90
|
+
'shared-ddd-layers/infrastructure',
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
# Include only internal libraries referenced by this service package.json.
|
|
94
|
+
# This prevents unrelated library changes from triggering global rebuilds.
|
|
95
|
+
deps_map = Utils.build_deps_mapping(resource_path)
|
|
96
|
+
for dep_path in deps_map.values():
|
|
97
|
+
if dep_path not in only_paths:
|
|
98
|
+
only_paths.append(dep_path)
|
|
99
|
+
|
|
100
|
+
return only_paths
|
|
101
|
+
|
|
102
|
+
def _build_typescript_service(name, context, dockerfile, live_update_rules, deps, env=None):
|
|
103
|
+
"""Build a TypeScript service with Docker.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
name: Resource name
|
|
107
|
+
context: Docker build context
|
|
108
|
+
dockerfile: Path to Dockerfile
|
|
109
|
+
live_update_rules: Live update configuration
|
|
110
|
+
deps: Resource dependencies
|
|
111
|
+
env: Dict of environment variables to pass to container (optional)
|
|
112
|
+
"""
|
|
113
|
+
# Extract service path from dockerfile path (e.g., 'services/product/{domain}/{service-name}')
|
|
114
|
+
# The dockerfile parameter looks like: 'services/product/{domain}/{service-name}/autogenerated/Dockerfile.autogenerated'
|
|
115
|
+
resource_path = '/'.join(dockerfile.split('/')[:-1])
|
|
116
|
+
|
|
117
|
+
# Handle both 'autogenerated' (without dot) and '.autogenerated' (with dot)
|
|
118
|
+
# Some services use 'autogenerated', others use '.autogenerated' folder
|
|
119
|
+
autogenerated_folders = ['autogenerated', '.autogenerated']
|
|
120
|
+
for folder in autogenerated_folders:
|
|
121
|
+
suffix = '/' + folder
|
|
122
|
+
if resource_path.endswith(suffix):
|
|
123
|
+
resource_path = resource_path[:-len(suffix)]
|
|
124
|
+
break
|
|
125
|
+
|
|
126
|
+
# Also check OUTPUT.AUTOGENERATED_FOLDER for consistency
|
|
127
|
+
if resource_path.endswith('/' + OUTPUT.AUTOGENERATED_FOLDER):
|
|
128
|
+
resource_path = resource_path[:-(len('/' + OUTPUT.AUTOGENERATED_FOLDER))]
|
|
129
|
+
|
|
130
|
+
ignore_patterns = _load_autogenerated_dockerignore_patterns(dockerfile, resource_path)
|
|
131
|
+
|
|
132
|
+
# CRITICAL FIX: Add filewatch ignore patterns from master config
|
|
133
|
+
# These prevent fsnotify buffer overflow by excluding high-churn directories
|
|
134
|
+
# Previously hardcoded; now imported from TILT_RESOURCE_DEFAULTS.star
|
|
135
|
+
additional_ignores = get_filewatch_ignore_patterns(resource_path)
|
|
136
|
+
|
|
137
|
+
# Merge patterns, avoiding duplicates
|
|
138
|
+
for pattern in additional_ignores:
|
|
139
|
+
if pattern not in ignore_patterns:
|
|
140
|
+
ignore_patterns.append(pattern)
|
|
141
|
+
|
|
142
|
+
only_paths = _get_resource_only_paths(resource_path)
|
|
143
|
+
|
|
144
|
+
# Build context must be the project root (.) so that COPY commands can reference
|
|
145
|
+
# shared-platform-engineering/, shared-ddd-layers/, and services/ directories
|
|
146
|
+
# BUT we use 'only' to dramatically reduce the context size (from 7.4GB to ~100MB)
|
|
147
|
+
docker_build(
|
|
148
|
+
name,
|
|
149
|
+
context,
|
|
150
|
+
dockerfile=dockerfile,
|
|
151
|
+
target='production',
|
|
152
|
+
live_update=live_update_rules,
|
|
153
|
+
only=_get_resource_only_paths(resource_path),
|
|
154
|
+
ignore=ignore_patterns,
|
|
155
|
+
network='host',
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
TypescriptBuilders = struct(
|
|
160
|
+
build_typescript_service = _build_typescript_service,
|
|
161
|
+
load_dockerignore_patterns = _load_autogenerated_dockerignore_patterns,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
DEBUG = {}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# AGENTS.md - Dependency Resolution Module
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Centralized dependency resolution for Tilt SDK generators. Auto-discovers and injects configuration from internal dependencies.
|
|
6
|
+
|
|
7
|
+
## Key Functions
|
|
8
|
+
|
|
9
|
+
### `resolve_backend_api_path(manifest)`
|
|
10
|
+
Resolves API path from backend manifest when frontend has `backendName`.
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
# Frontend manifest: { "backendName": "identity-management-backend" }
|
|
14
|
+
api_path = resolve_backend_api_path(manifest)
|
|
15
|
+
# Returns: "/api/v1/identity-management" (from backend manifest)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### `resolve_dependency_api_urls(manifest)`
|
|
19
|
+
Resolves all API URLs from `dependsOn`.
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
# Manifest: { "dependsOn": ["identity", "user"] }
|
|
23
|
+
urls = resolve_dependency_api_urls(manifest)
|
|
24
|
+
# Returns: { "identity": "/api/v1/identities", "user": "/api/v1/users" }
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### `get_backend_manifest(manifest)`
|
|
28
|
+
Gets full backend manifest by `backendName`.
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
backend_manifest = get_backend_manifest(manifest)
|
|
32
|
+
# Returns: Full backend manifest dict
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### `inject_dependency_env_vars(manifest, base_env_vars)`
|
|
36
|
+
Auto-injects VITE_*_API_URL environment variables for all dependencies.
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
env_vars = inject_dependency_env_vars(manifest, {"PORT": 3000})
|
|
40
|
+
# Returns: { "PORT": 3000, "VITE_IDENTITY_API_URL": "/api/v1/identities" }
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
load("./dependencies/resolver.star", "resolve_backend_api_path")
|
|
47
|
+
|
|
48
|
+
def generate_something(manifest):
|
|
49
|
+
# Auto-resolve backend API path
|
|
50
|
+
api_path = resolve_backend_api_path(manifest)
|
|
51
|
+
if api_path:
|
|
52
|
+
# Use backend's apiPath
|
|
53
|
+
pass
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Architecture
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
manifest (with backendName)
|
|
60
|
+
↓
|
|
61
|
+
resolve_backend_api_path()
|
|
62
|
+
↓
|
|
63
|
+
registry.get_resource_by_name(backend_name)
|
|
64
|
+
↓
|
|
65
|
+
backend_service.resources[]
|
|
66
|
+
↓
|
|
67
|
+
backend_manifest.apiPath
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Future Extensions
|
|
71
|
+
|
|
72
|
+
- Add caching for resolved dependencies
|
|
73
|
+
- Add version compatibility checking
|
|
74
|
+
- Add circular dependency detection
|
|
75
|
+
- Support multiple backend references
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🔗 TILT SDK - DEPENDENCY RESOLUTION MODULE
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Purpose: Centralized dependency resolution for generators
|
|
5
|
+
# Auto-discover and inject configuration from internal dependencies
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
load("./resolver.star",
|
|
9
|
+
"resolve_backend_api_path",
|
|
10
|
+
"resolve_dependency_api_urls",
|
|
11
|
+
"get_backend_manifest",
|
|
12
|
+
"inject_dependency_env_vars",
|
|
13
|
+
"DependencyResolvers",
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# Re-export all functions for easy access
|
|
17
|
+
resolve_backend_api_path = resolve_backend_api_path
|
|
18
|
+
resolve_dependency_api_urls = resolve_dependency_api_urls
|
|
19
|
+
get_backend_manifest = get_backend_manifest
|
|
20
|
+
inject_dependency_env_vars = inject_dependency_env_vars
|
|
21
|
+
DependencyResolvers = DependencyResolvers
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🔗 TILT SDK - DEPENDENCY RESOLUTION HELPERS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Purpose: Resolve dependencies between services (frontend → backend lookups)
|
|
5
|
+
# Auto-inject configuration from internal dependencies
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
load("../../../../../../../discovery/registry.star", "get_resource_by_name")
|
|
9
|
+
|
|
10
|
+
def resolve_backend_api_path(manifest):
|
|
11
|
+
"""Resolve API path from backend manifest if backendName is specified.
|
|
12
|
+
|
|
13
|
+
Frontend manifests often reference a backend via backendName.
|
|
14
|
+
This function looks up the backend's apiPath for consistency.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
manifest: Frontend service manifest
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
str: API path from backend manifest, or None if not found
|
|
21
|
+
"""
|
|
22
|
+
backend_name = manifest.get("backendName")
|
|
23
|
+
if not backend_name:
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
# Try to find the backend service
|
|
27
|
+
backend_service = get_resource_by_name(backend_name)
|
|
28
|
+
if not backend_service:
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
# Get the backend manifest
|
|
32
|
+
backend_resources = backend_service.get("resources", [])
|
|
33
|
+
for resource in backend_resources:
|
|
34
|
+
if resource.get("name") == backend_name:
|
|
35
|
+
backend_manifest = resource.get("_manifest", {})
|
|
36
|
+
return backend_manifest.get("apiPath")
|
|
37
|
+
|
|
38
|
+
return None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def resolve_dependency_api_urls(manifest):
|
|
42
|
+
"""Resolve all API URLs from dependsOn.
|
|
43
|
+
|
|
44
|
+
For each dependency in dependsOn, looks up the service
|
|
45
|
+
and extracts its apiPath. Returns a dict mapping dependency names to URLs.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
manifest: Service manifest with dependsOn
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
dict: { dependency_name: api_url }
|
|
52
|
+
"""
|
|
53
|
+
deps = manifest.get("dependsOn", [])
|
|
54
|
+
if not deps:
|
|
55
|
+
return {}
|
|
56
|
+
|
|
57
|
+
urls = {}
|
|
58
|
+
for dep_name in deps:
|
|
59
|
+
dep_service = get_resource_by_name(dep_name)
|
|
60
|
+
if not dep_service:
|
|
61
|
+
continue
|
|
62
|
+
|
|
63
|
+
# Find the backend resource for this dependency
|
|
64
|
+
dep_resources = dep_service.get("resources", [])
|
|
65
|
+
for resource in dep_resources:
|
|
66
|
+
# Skip frontend resources, look for backend
|
|
67
|
+
if resource.get("appType") == "frontend":
|
|
68
|
+
continue
|
|
69
|
+
|
|
70
|
+
dep_manifest = resource.get("_manifest", {})
|
|
71
|
+
api_path = dep_manifest.get("apiPath")
|
|
72
|
+
if api_path:
|
|
73
|
+
urls[dep_name] = api_path
|
|
74
|
+
break
|
|
75
|
+
|
|
76
|
+
return urls
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def get_backend_manifest(manifest):
|
|
80
|
+
"""Get the backend manifest referenced by a frontend manifest.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
manifest: Frontend service manifest with backendName
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
dict: Backend manifest or None if not found
|
|
87
|
+
"""
|
|
88
|
+
backend_name = manifest.get("backendName")
|
|
89
|
+
if not backend_name:
|
|
90
|
+
return None
|
|
91
|
+
|
|
92
|
+
backend_service = get_resource_by_name(backend_name)
|
|
93
|
+
if not backend_service:
|
|
94
|
+
return None
|
|
95
|
+
|
|
96
|
+
backend_resources = backend_service.get("resources", [])
|
|
97
|
+
for resource in backend_resources:
|
|
98
|
+
if resource.get("name") == backend_name:
|
|
99
|
+
return resource.get("_manifest", {})
|
|
100
|
+
|
|
101
|
+
return None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def inject_dependency_env_vars(manifest, base_env_vars):
|
|
105
|
+
"""Inject environment variables from dependencies.
|
|
106
|
+
|
|
107
|
+
For each internal dependency, adds VITE_{DEP}_API_URL to env vars.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
manifest: Service manifest
|
|
111
|
+
base_env_vars: Base environment variables dict
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
dict: Updated environment variables with dependency URLs
|
|
115
|
+
"""
|
|
116
|
+
env_vars = dict(base_env_vars)
|
|
117
|
+
dep_urls = resolve_dependency_api_urls(manifest)
|
|
118
|
+
|
|
119
|
+
for dep_name, api_path in dep_urls.items():
|
|
120
|
+
# Convert dependency name to env var key
|
|
121
|
+
# e.g., "identity-management-backend" -> "IDENTITY_MANAGEMENT_BACKEND_API_URL"
|
|
122
|
+
env_key = dep_name.upper().replace("-", "_").replace(".", "_")
|
|
123
|
+
env_vars["VITE_" + env_key + "_API_URL"] = api_path
|
|
124
|
+
|
|
125
|
+
return env_vars
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
# Export struct for easy importing
|
|
129
|
+
DependencyResolvers = struct(
|
|
130
|
+
resolve_backend_api_path = resolve_backend_api_path,
|
|
131
|
+
resolve_dependency_api_urls = resolve_dependency_api_urls,
|
|
132
|
+
get_backend_manifest = get_backend_manifest,
|
|
133
|
+
inject_dependency_env_vars = inject_dependency_env_vars,
|
|
134
|
+
)
|