@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,437 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🏗️ TILT SDK - INFRASTRUCTURE LOADER
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: .tilt/provisioner/infra-loader.star
|
|
5
|
+
# Purpose: Load and configure infrastructure services
|
|
6
|
+
# =============================================================================
|
|
7
|
+
#
|
|
8
|
+
# This module centralizes infrastructure loading:
|
|
9
|
+
# - Database (PostgreSQL, Redis)
|
|
10
|
+
# - Messaging (NATS, Kafka)
|
|
11
|
+
# - Secrets (Infisical)
|
|
12
|
+
# - Registry (Verdaccio)
|
|
13
|
+
# - Proxy (Traefik)
|
|
14
|
+
# - Monitoring (SigNoz, ELK)
|
|
15
|
+
# - CDC (Debezium)
|
|
16
|
+
#
|
|
17
|
+
# Usage:
|
|
18
|
+
# Infra.load_all(should_enable_fn)
|
|
19
|
+
# =============================================================================
|
|
20
|
+
|
|
21
|
+
load("../../platform/docker/constants.star", "PlatformDockerConstants")
|
|
22
|
+
load("../../platform/docker/compose/traefik_standalone.star", "generate_standalone_traefik_compose")
|
|
23
|
+
|
|
24
|
+
# =============================================================================
|
|
25
|
+
# 🗃️ DATABASE MANAGEMENT
|
|
26
|
+
# =============================================================================
|
|
27
|
+
|
|
28
|
+
def _file_exists(path):
|
|
29
|
+
"""Check if a file exists."""
|
|
30
|
+
result = str(local("test -f '{path}' && echo 'yes' || echo 'no'".format(path=path), quiet=True, echo_off=True)).strip()
|
|
31
|
+
return result == 'yes'
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _docker_compose(compose_paths, env_file):
|
|
35
|
+
"""docker_compose() wrapper: Tilt's builtin rejects env_file=None outright
|
|
36
|
+
(it type-checks the kwarg as path|string, not Optional), so the keyword must be
|
|
37
|
+
omitted entirely rather than passed as None when no .env file exists."""
|
|
38
|
+
if env_file:
|
|
39
|
+
docker_compose(compose_paths, env_file=env_file)
|
|
40
|
+
else:
|
|
41
|
+
docker_compose(compose_paths)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _generate_database_management_compose():
|
|
45
|
+
"""Generate the stack-feature compose for local PostgreSQL."""
|
|
46
|
+
name = PlatformDockerConstants.PROJECT_NAME
|
|
47
|
+
database_network = PlatformDockerConstants.NETWORK_DATABASE
|
|
48
|
+
return """###############################################################################
|
|
49
|
+
# SYSTEM-GENERATED - DO NOT EDIT
|
|
50
|
+
# Stack feature: database-management
|
|
51
|
+
# Source: .tdk/project.json stacks.*.services includes "database-management"
|
|
52
|
+
###############################################################################
|
|
53
|
+
|
|
54
|
+
services:
|
|
55
|
+
postgres:
|
|
56
|
+
image: postgres:16-alpine
|
|
57
|
+
container_name: {name}_postgres
|
|
58
|
+
restart: unless-stopped
|
|
59
|
+
environment:
|
|
60
|
+
POSTGRES_USER: {name}
|
|
61
|
+
POSTGRES_PASSWORD: ${{DB_PASSWORD}}
|
|
62
|
+
POSTGRES_DB: postgres
|
|
63
|
+
ports:
|
|
64
|
+
- "5432:5432"
|
|
65
|
+
volumes:
|
|
66
|
+
- {name}_postgres_data:/var/lib/postgresql/data
|
|
67
|
+
networks:
|
|
68
|
+
- database
|
|
69
|
+
healthcheck:
|
|
70
|
+
test: ["CMD-SHELL", "pg_isready -U {name} -d postgres"]
|
|
71
|
+
interval: 5s
|
|
72
|
+
timeout: 5s
|
|
73
|
+
retries: 20
|
|
74
|
+
|
|
75
|
+
networks:
|
|
76
|
+
database:
|
|
77
|
+
name: {database_network}
|
|
78
|
+
external: true
|
|
79
|
+
|
|
80
|
+
volumes:
|
|
81
|
+
{name}_postgres_data:
|
|
82
|
+
""".format(name=name, database_network=database_network)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _ensure_database_management_compose(root_prefix, write_fn):
|
|
86
|
+
"""Ensure the database-management stack feature has its compose file."""
|
|
87
|
+
compose_rel = "services/platform/database-management/docker-compose.yml"
|
|
88
|
+
compose_file = root_prefix + compose_rel if root_prefix else compose_rel
|
|
89
|
+
if _file_exists(compose_file):
|
|
90
|
+
return compose_file
|
|
91
|
+
if write_fn:
|
|
92
|
+
write_fn(compose_rel, _generate_database_management_compose())
|
|
93
|
+
return compose_file
|
|
94
|
+
|
|
95
|
+
def _load_database_management(should_enable, root_prefix="", env_file=None, write_fn=None):
|
|
96
|
+
"""Load database and messaging infrastructure."""
|
|
97
|
+
if not should_enable('database-management'):
|
|
98
|
+
print("DEBUG INFRA: database-management not enabled")
|
|
99
|
+
return
|
|
100
|
+
|
|
101
|
+
print("🗃️ Loading database management services...")
|
|
102
|
+
|
|
103
|
+
# Load postgres from the database-management stack feature compose.
|
|
104
|
+
postgres_compose = _ensure_database_management_compose(root_prefix, write_fn)
|
|
105
|
+
if _file_exists(postgres_compose):
|
|
106
|
+
print("DEBUG INFRA: Loading postgres compose from {}".format(postgres_compose))
|
|
107
|
+
_docker_compose(postgres_compose, env_file)
|
|
108
|
+
dc_resource('postgres', labels=['infra.tools'], resource_deps=['init-networks'], auto_init=True)
|
|
109
|
+
else:
|
|
110
|
+
print("DEBUG INFRA: Skipping postgres (compose file not found)")
|
|
111
|
+
|
|
112
|
+
# Load messaging if compose file exists
|
|
113
|
+
messaging_compose = root_prefix + 'services/platform/messaging/docker-compose.yml'
|
|
114
|
+
if _file_exists(messaging_compose):
|
|
115
|
+
print("DEBUG INFRA: Loading messaging compose from {}".format(messaging_compose))
|
|
116
|
+
_docker_compose(messaging_compose, env_file)
|
|
117
|
+
dc_resource('redis', labels=['infra.messaging'], auto_init=False)
|
|
118
|
+
dc_resource('nats', labels=['infra.messaging'], auto_init=True)
|
|
119
|
+
else:
|
|
120
|
+
print("DEBUG INFRA: Skipping messaging (compose file not found)")
|
|
121
|
+
|
|
122
|
+
# Only create kafka resources if debezium is enabled AND messaging exists
|
|
123
|
+
cdc_enabled = should_enable('debezium')
|
|
124
|
+
if cdc_enabled and _file_exists(messaging_compose):
|
|
125
|
+
dc_resource('kafka', labels=['cdc'], resource_deps=['zookeeper'], auto_init=True)
|
|
126
|
+
dc_resource('zookeeper', labels=['cdc'], auto_init=True)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
# =============================================================================
|
|
130
|
+
# 📦 VERDACCIO (NPM Registry)
|
|
131
|
+
# =============================================================================
|
|
132
|
+
|
|
133
|
+
def _load_verdaccio(should_enable, root_prefix="", env_file=None):
|
|
134
|
+
"""Load Verdaccio private npm registry."""
|
|
135
|
+
if not should_enable(PlatformDockerConstants.VERDACCIO_RESOURCE_NAME):
|
|
136
|
+
print("DEBUG INFRA: Verdaccio not enabled")
|
|
137
|
+
return
|
|
138
|
+
|
|
139
|
+
# Use absolute path for docker-compose to ensure correct working directory
|
|
140
|
+
if root_prefix:
|
|
141
|
+
compose_file = root_prefix + 'docker-compose.verdaccio.yml'
|
|
142
|
+
else:
|
|
143
|
+
# Use project root from environment or relative path
|
|
144
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '.')
|
|
145
|
+
compose_file = project_root + '/docker-compose.verdaccio.yml'
|
|
146
|
+
if not _file_exists(compose_file):
|
|
147
|
+
print("DEBUG INFRA: Skipping Verdaccio (compose file not found)")
|
|
148
|
+
return
|
|
149
|
+
print("DEBUG INFRA: Loading Verdaccio from {} with env_file={}".format(compose_file, env_file))
|
|
150
|
+
_docker_compose(compose_file, env_file)
|
|
151
|
+
print("DEBUG INFRA: Calling dc_resource for verdaccio")
|
|
152
|
+
dc_resource(PlatformDockerConstants.VERDACCIO_RESOURCE_NAME, labels=['infra.tools', 'registry'], resource_deps=['init-networks'], auto_init=True)
|
|
153
|
+
print("DEBUG INFRA: dc_resource for verdaccio completed")
|
|
154
|
+
local_resource(PlatformDockerConstants.VERDACCIO_CONNECT_NETWORK_RESOURCE,
|
|
155
|
+
cmd='docker network connect ' + PlatformDockerConstants.NETWORK_BACKEND + ' ' + PlatformDockerConstants.VERDACCIO_CONTAINER_NAME + ' 2>/dev/null || true',
|
|
156
|
+
labels=['infra.tools', 'registry'],
|
|
157
|
+
resource_deps=[PlatformDockerConstants.VERDACCIO_RESOURCE_NAME, 'init-networks'],
|
|
158
|
+
auto_init=True
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
# =============================================================================
|
|
163
|
+
# 🔐 INFISICAL (Secrets Management)
|
|
164
|
+
# =============================================================================
|
|
165
|
+
|
|
166
|
+
def _load_infisical(should_enable, root_prefix="", env_file=None):
|
|
167
|
+
"""Load Infisical secrets management."""
|
|
168
|
+
if not should_enable('infisical'):
|
|
169
|
+
return
|
|
170
|
+
|
|
171
|
+
compose_file = root_prefix + 'docker-compose.infisical.yml'
|
|
172
|
+
if not _file_exists(compose_file):
|
|
173
|
+
print("DEBUG INFRA: Skipping Infisical (compose file not found)")
|
|
174
|
+
return
|
|
175
|
+
|
|
176
|
+
print("🔐 Loading Infisical...")
|
|
177
|
+
_docker_compose(compose_file, env_file)
|
|
178
|
+
dc_resource('infisical-db', labels=['infra.tools', 'secrets'], resource_deps=['init-networks'], auto_init=True)
|
|
179
|
+
dc_resource('infisical-redis', labels=['infra.tools', 'secrets'], resource_deps=['init-networks'], auto_init=True)
|
|
180
|
+
dc_resource('infisical', labels=['infra.tools', 'secrets'], resource_deps=['init-networks', 'infisical-db', 'infisical-redis'], auto_init=True)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
# =============================================================================
|
|
184
|
+
# 🌐 PROXY (Traefik)
|
|
185
|
+
# =============================================================================
|
|
186
|
+
|
|
187
|
+
def _load_standalone_traefik(root_prefix, env_file, write_fn):
|
|
188
|
+
"""Generate and load a self-contained Traefik compose for standalone projects."""
|
|
189
|
+
compose_rel = ".tdk/.tdk-out/docker-compose.traefik.yml"
|
|
190
|
+
content = generate_standalone_traefik_compose()
|
|
191
|
+
if write_fn:
|
|
192
|
+
write_fn(compose_rel, content)
|
|
193
|
+
compose_file = root_prefix + compose_rel if root_prefix else compose_rel
|
|
194
|
+
print("🌐 Loading standalone Traefik from {}".format(compose_file))
|
|
195
|
+
_docker_compose(compose_file, env_file)
|
|
196
|
+
dc_resource(
|
|
197
|
+
"traefik",
|
|
198
|
+
labels=["infra.tools"],
|
|
199
|
+
resource_deps=["init-networks"],
|
|
200
|
+
auto_init=True,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _load_proxy(should_enable, root_prefix="", env_file=None, write_fn=None):
|
|
205
|
+
"""Load Traefik reverse proxy with proper health check sequencing."""
|
|
206
|
+
if not should_enable('proxy'):
|
|
207
|
+
print("DEBUG INFRA: proxy not enabled")
|
|
208
|
+
return
|
|
209
|
+
|
|
210
|
+
compose_files = [
|
|
211
|
+
root_prefix + 'shared-product-engineering/introvertic/infra/docker-compose.traefik.yml',
|
|
212
|
+
root_prefix + 'services/platform/proxy/docker-compose.core.yml',
|
|
213
|
+
root_prefix + 'services/platform/proxy/docker-compose.utilities.yml',
|
|
214
|
+
root_prefix + 'services/platform/proxy/docker-compose.redirects.yml',
|
|
215
|
+
root_prefix + 'services/platform/proxy/docker-compose.docs.yml',
|
|
216
|
+
]
|
|
217
|
+
missing = [path for path in compose_files if not _file_exists(path)]
|
|
218
|
+
if missing:
|
|
219
|
+
print("DEBUG INFRA: Platform proxy compose missing ({}), using standalone Traefik".format(missing[0]))
|
|
220
|
+
_load_standalone_traefik(root_prefix, env_file, write_fn)
|
|
221
|
+
return
|
|
222
|
+
|
|
223
|
+
print("🌐 Loading proxy services from Introvertic Infra...")
|
|
224
|
+
print(" → Primary: shared-product-engineering/introvertic/infra/docker-compose.traefik.yml")
|
|
225
|
+
print(" → Override flags: TRAEFIK_LOG_LEVEL, TRAEFIK_ENABLE_DASHBOARD, etc.")
|
|
226
|
+
print(" → Traefik will wait for postgres and nats to be healthy")
|
|
227
|
+
print(" → Services configured with 60s startup grace period")
|
|
228
|
+
|
|
229
|
+
# Use introvertic/infra traefik configuration (primary)
|
|
230
|
+
# Keep legacy core.yml for network definitions during migration
|
|
231
|
+
_docker_compose(compose_files, env_file)
|
|
232
|
+
|
|
233
|
+
# Traefik depends on core infrastructure being healthy (not just started) to prevent 504s
|
|
234
|
+
dc_resource('traefik',
|
|
235
|
+
labels=['infra.tools'],
|
|
236
|
+
resource_deps=['init-networks', 'postgres', 'nats'],
|
|
237
|
+
auto_init=True)
|
|
238
|
+
dc_resource('dashy',
|
|
239
|
+
labels=['infra.tools'],
|
|
240
|
+
resource_deps=['traefik'],
|
|
241
|
+
auto_init=False)
|
|
242
|
+
dc_resource('main-redirect',
|
|
243
|
+
labels=['infra.tools'],
|
|
244
|
+
resource_deps=['traefik'],
|
|
245
|
+
auto_init=False)
|
|
246
|
+
dc_resource('traefik-pages',
|
|
247
|
+
labels=['infra.tools'],
|
|
248
|
+
resource_deps=['traefik'],
|
|
249
|
+
auto_init=False)
|
|
250
|
+
dc_resource('tilt-proxy',
|
|
251
|
+
labels=['infra.tools'],
|
|
252
|
+
resource_deps=['traefik'],
|
|
253
|
+
auto_init=False)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
# =============================================================================
|
|
257
|
+
# 📊 MONITORING (SigNoz, SkyWalking)
|
|
258
|
+
# =============================================================================
|
|
259
|
+
|
|
260
|
+
def _load_monitoring(should_enable, root_prefix="", env_file=None):
|
|
261
|
+
"""Load monitoring and observability stack."""
|
|
262
|
+
if not should_enable('monitoring'):
|
|
263
|
+
return
|
|
264
|
+
|
|
265
|
+
print("📊 Loading monitoring services...")
|
|
266
|
+
_docker_compose(root_prefix + 'services/platform/monitoring/docker-compose.yml', env_file)
|
|
267
|
+
for svc in ['signoz-frontend', 'signoz-otel-collector', 'signoz-query-service']:
|
|
268
|
+
dc_resource(svc, labels=['observability.apm'], auto_init=True)
|
|
269
|
+
dc_resource('clickhouse', labels=['observability.storage'], auto_init=True)
|
|
270
|
+
dc_resource('elasticsearch', labels=['observability.storage'], auto_init=True)
|
|
271
|
+
dc_resource('skywalking-oap', labels=['observability.apm'], resource_deps=['elasticsearch'], auto_init=True)
|
|
272
|
+
dc_resource('skywalking-ui', labels=['observability.apm'], resource_deps=['skywalking-oap'], auto_init=True)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
# =============================================================================
|
|
276
|
+
# 🔄 DEBEZIUM (CDC)
|
|
277
|
+
# =============================================================================
|
|
278
|
+
|
|
279
|
+
def _load_debezium(should_enable, root_prefix="", env_file=None):
|
|
280
|
+
"""Load Debezium Change Data Capture."""
|
|
281
|
+
if not should_enable('debezium'):
|
|
282
|
+
return
|
|
283
|
+
|
|
284
|
+
print("🔄 Loading Enhanced Debezium...")
|
|
285
|
+
_docker_compose(root_prefix + 'services/platform/cdc/docker-compose.enhanced.yml', env_file)
|
|
286
|
+
dc_resource('nats-http-bridge', labels=['cdc'], resource_deps=['nats'], auto_init=True)
|
|
287
|
+
dc_resource('debezium-connect', labels=['cdc'], resource_deps=['kafka', 'postgres', 'nats-http-bridge'], auto_init=True)
|
|
288
|
+
dc_resource('enhanced-connector-setup', labels=['cdc'], resource_deps=['debezium-connect', 'postgres', 'nats-http-bridge'], auto_init=False)
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
# =============================================================================
|
|
292
|
+
# 📊 ELK STACK
|
|
293
|
+
# =============================================================================
|
|
294
|
+
|
|
295
|
+
def _load_elk(should_enable, root_prefix="", env_file=None):
|
|
296
|
+
"""Load ELK logging stack."""
|
|
297
|
+
if not should_enable('elk'):
|
|
298
|
+
return
|
|
299
|
+
|
|
300
|
+
print("📊 Loading ELK stack...")
|
|
301
|
+
_docker_compose(root_prefix + 'docker/elk-compose.yml', env_file)
|
|
302
|
+
dc_resource('elasticsearch', labels=['observability.elk'], auto_init=True)
|
|
303
|
+
dc_resource('logstash', labels=['observability.elk', 'processor', 'logs'], resource_deps=['elasticsearch'], auto_init=True)
|
|
304
|
+
dc_resource('kibana', labels=['observability.elk', 'frontend', 'dashboard'], resource_deps=['elasticsearch'], auto_init=True)
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
# =============================================================================
|
|
308
|
+
# 🌐 NETWORK INITIALIZATION
|
|
309
|
+
# =============================================================================
|
|
310
|
+
|
|
311
|
+
def _init_networks(fix_docker_networks_fn):
|
|
312
|
+
"""Initialize Docker networks."""
|
|
313
|
+
local_resource('init-networks',
|
|
314
|
+
cmd=fix_docker_networks_fn(),
|
|
315
|
+
labels=['infra.setup'],
|
|
316
|
+
auto_init=True,
|
|
317
|
+
resource_deps=[]
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
# =============================================================================
|
|
322
|
+
# 🏗️ GOLDEN IMAGE (Base Docker Image)
|
|
323
|
+
# =============================================================================
|
|
324
|
+
|
|
325
|
+
def _load_golden_image(should_enable, docker_provider, project_root='.'):
|
|
326
|
+
"""Build the golden base image for faster service builds.
|
|
327
|
+
|
|
328
|
+
project_root must be passed through here the same way every other
|
|
329
|
+
infra loader below receives it (as root_prefix) - local_resource cmds
|
|
330
|
+
run relative to the Tiltfile's own directory (.tdk/.tdk-out/), not
|
|
331
|
+
the project root, so an unprefixed project-root-relative path like
|
|
332
|
+
GOLDEN_DOCKERFILE resolves to the wrong file otherwise.
|
|
333
|
+
"""
|
|
334
|
+
if not should_enable('golden-image'):
|
|
335
|
+
return None
|
|
336
|
+
|
|
337
|
+
print("🏗️ Building golden base image...")
|
|
338
|
+
return docker_provider.golden_image.build(project_root=project_root)
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
def _generate_golden_dockerfile(should_enable, docker_provider, write_fn):
|
|
342
|
+
"""Generate the golden-layers.Dockerfile if it doesn't exist.
|
|
343
|
+
|
|
344
|
+
Args:
|
|
345
|
+
should_enable: Function that takes service name and returns bool
|
|
346
|
+
docker_provider: Docker provider struct with golden_image
|
|
347
|
+
write_fn: File writing function for output
|
|
348
|
+
"""
|
|
349
|
+
if not should_enable('golden-image'):
|
|
350
|
+
return
|
|
351
|
+
|
|
352
|
+
dockerfile_path = '.tdk/.tdk-out/golden-layers.Dockerfile'
|
|
353
|
+
content = docker_provider.golden_image.generate_dockerfile()
|
|
354
|
+
write_fn(dockerfile_path, content)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
# =============================================================================
|
|
358
|
+
# 🎯 MAIN LOADER
|
|
359
|
+
# =============================================================================
|
|
360
|
+
|
|
361
|
+
def load_all_infrastructure(should_enable, fix_docker_networks_fn=None, docker_provider=None, write_fn=None, project_root=None, env_file=None):
|
|
362
|
+
"""
|
|
363
|
+
Load all infrastructure services based on configuration.
|
|
364
|
+
|
|
365
|
+
Args:
|
|
366
|
+
should_enable: Function that takes service name and returns bool
|
|
367
|
+
fix_docker_networks_fn: Function to fix Docker networks (optional)
|
|
368
|
+
docker_provider: Docker provider struct (optional, for golden image)
|
|
369
|
+
write_fn: File writing function (optional, for golden image)
|
|
370
|
+
project_root: Path to project root from TDK working directory (optional, e.g., "../../")
|
|
371
|
+
env_file: Path to .env file for docker-compose (optional, defaults to project_root + '.env')
|
|
372
|
+
"""
|
|
373
|
+
# Initialize networks first
|
|
374
|
+
if fix_docker_networks_fn:
|
|
375
|
+
print("DEBUG INFRA: Initializing networks...")
|
|
376
|
+
_init_networks(fix_docker_networks_fn)
|
|
377
|
+
print("DEBUG INFRA: Networks initialized")
|
|
378
|
+
else:
|
|
379
|
+
print("DEBUG INFRA: SKIPPING network initialization (no fix_docker_networks_fn)")
|
|
380
|
+
|
|
381
|
+
# These stacks both define an `elasticsearch` resource (and host port 9200).
|
|
382
|
+
# Running both at once causes compose/resource collisions and unstable startup.
|
|
383
|
+
if should_enable('monitoring') and should_enable('elk'):
|
|
384
|
+
fail("Incompatible flags: 'monitoring' and 'elk' cannot both be enabled at the same time. Disable one of them.")
|
|
385
|
+
|
|
386
|
+
# Build golden image before other infrastructure (if enabled)
|
|
387
|
+
golden_image_resource = None
|
|
388
|
+
if docker_provider and write_fn:
|
|
389
|
+
_generate_golden_dockerfile(should_enable, docker_provider, write_fn)
|
|
390
|
+
golden_image_resource = _load_golden_image(should_enable, docker_provider, project_root=project_root or '.')
|
|
391
|
+
|
|
392
|
+
# Get project root prefix for paths (e.g., "../../" from .tdk/.tdk-out/)
|
|
393
|
+
# Ensure root_prefix ends with / for proper path concatenation
|
|
394
|
+
root_prefix = project_root if project_root else ""
|
|
395
|
+
if root_prefix and not root_prefix.endswith('/'):
|
|
396
|
+
root_prefix = root_prefix + '/'
|
|
397
|
+
|
|
398
|
+
# Load environment file for docker-compose variables
|
|
399
|
+
# Use provided env_file or construct default from root_prefix.
|
|
400
|
+
# `docker compose ... --env-file <path>` hard-fails if that path doesn't exist, and
|
|
401
|
+
# .env is gitignored (with no .env.example shipped) across every TDK example repo, so
|
|
402
|
+
# a fresh clone must fall back to no --env-file flag rather than a dangling path.
|
|
403
|
+
if env_file == None:
|
|
404
|
+
candidate_env_file = root_prefix + '.env' if root_prefix else '.env'
|
|
405
|
+
env_file = candidate_env_file if _file_exists(candidate_env_file) else None
|
|
406
|
+
|
|
407
|
+
# Load infrastructure in order
|
|
408
|
+
_load_database_management(should_enable, root_prefix, env_file, write_fn)
|
|
409
|
+
_load_verdaccio(should_enable, root_prefix, env_file)
|
|
410
|
+
_load_infisical(should_enable, root_prefix, env_file)
|
|
411
|
+
_load_proxy(should_enable, root_prefix, env_file, write_fn)
|
|
412
|
+
_load_monitoring(should_enable, root_prefix, env_file)
|
|
413
|
+
_load_debezium(should_enable, root_prefix, env_file)
|
|
414
|
+
_load_elk(should_enable, root_prefix, env_file)
|
|
415
|
+
|
|
416
|
+
return golden_image_resource
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
# =============================================================================
|
|
420
|
+
# 📦 INFRA STRUCT (Public API)
|
|
421
|
+
# =============================================================================
|
|
422
|
+
|
|
423
|
+
Infra = struct(
|
|
424
|
+
# Main loader
|
|
425
|
+
load_all = load_all_infrastructure,
|
|
426
|
+
init_networks = _init_networks,
|
|
427
|
+
|
|
428
|
+
# Individual loaders (for granular control)
|
|
429
|
+
load_database = _load_database_management,
|
|
430
|
+
load_verdaccio = _load_verdaccio,
|
|
431
|
+
load_infisical = _load_infisical,
|
|
432
|
+
load_proxy = _load_proxy,
|
|
433
|
+
load_monitoring = _load_monitoring,
|
|
434
|
+
load_debezium = _load_debezium,
|
|
435
|
+
load_elk = _load_elk,
|
|
436
|
+
load_golden_image = _load_golden_image,
|
|
437
|
+
)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 📚 TILT SDK - LIBRARIES LIFECYCLE MODULE
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Purpose: Public API facade for library management modules.
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
load('./libs_paths.star', 'LibsPaths')
|
|
8
|
+
load('./libs_discovery.star', 'LibsDiscovery')
|
|
9
|
+
load('./libs_resource_definition.star', 'LibsResourceDefinition')
|
|
10
|
+
load('./libs_setup.star', 'LibsSetup')
|
|
11
|
+
load('./libs_tsconfig.star', 'LibsTSConfig')
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
Libs = struct(
|
|
15
|
+
# Path resolution
|
|
16
|
+
get_path = LibsPaths.get_path,
|
|
17
|
+
|
|
18
|
+
# Dependency discovery
|
|
19
|
+
discover_resource_libs = LibsDiscovery.discover_resource_libs,
|
|
20
|
+
discover_deps_from_json = LibsDiscovery.discover_deps_from_json,
|
|
21
|
+
get_resource_paths = LibsPaths.get_resource_paths,
|
|
22
|
+
get_deps_mapping = LibsPaths.get_deps_mapping,
|
|
23
|
+
|
|
24
|
+
# Resource definition
|
|
25
|
+
define_resource = LibsResourceDefinition.define_resource,
|
|
26
|
+
setup_all = LibsSetup.setup_all,
|
|
27
|
+
|
|
28
|
+
# TSConfig factory
|
|
29
|
+
make_smart_tsconfig = LibsTSConfig.make_smart_tsconfig,
|
|
30
|
+
)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🔍 TILT SDK - LIBRARY DEPENDENCY DISCOVERY
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
load('./libs_paths.star', 'LibsPaths')
|
|
6
|
+
|
|
7
|
+
_get_lib_path_from_package_name = LibsPaths.get_path
|
|
8
|
+
_read_package_json_deps = LibsPaths.read_package_json_deps
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def discover_resource_libraries(ctx, resource_paths, max_depth=10):
|
|
12
|
+
"""
|
|
13
|
+
Recursively discovers all internal library dependencies for given service paths.
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
Dict of {package_name: {'name': str, 'path': str, 'label': str, 'tilt_resource': str}}
|
|
17
|
+
"""
|
|
18
|
+
needed_libs = {}
|
|
19
|
+
visited = {}
|
|
20
|
+
|
|
21
|
+
queue = []
|
|
22
|
+
for resource_path in resource_paths:
|
|
23
|
+
pkg_path = resource_path + '/package.json'
|
|
24
|
+
queue.append((pkg_path, 0))
|
|
25
|
+
|
|
26
|
+
iteration = 0
|
|
27
|
+
max_iterations = 1000
|
|
28
|
+
|
|
29
|
+
while len(queue) > 0 and iteration < max_iterations:
|
|
30
|
+
iteration = iteration + 1
|
|
31
|
+
|
|
32
|
+
current = queue[0]
|
|
33
|
+
queue = queue[1:]
|
|
34
|
+
|
|
35
|
+
pkg_path = current[0]
|
|
36
|
+
depth = current[1]
|
|
37
|
+
|
|
38
|
+
if pkg_path in visited:
|
|
39
|
+
continue
|
|
40
|
+
visited[pkg_path] = True
|
|
41
|
+
|
|
42
|
+
if depth > max_depth:
|
|
43
|
+
continue
|
|
44
|
+
|
|
45
|
+
internal_deps = _read_package_json_deps(ctx, pkg_path)
|
|
46
|
+
|
|
47
|
+
for dep_name in internal_deps:
|
|
48
|
+
if dep_name in needed_libs:
|
|
49
|
+
continue
|
|
50
|
+
|
|
51
|
+
lib_info = _get_lib_path_from_package_name(ctx, dep_name)
|
|
52
|
+
lib_path = lib_info[0]
|
|
53
|
+
lib_label = lib_info[1]
|
|
54
|
+
tilt_resource = lib_info[2]
|
|
55
|
+
|
|
56
|
+
if lib_path == None:
|
|
57
|
+
continue
|
|
58
|
+
|
|
59
|
+
lib_name = lib_path.split('/')[-1]
|
|
60
|
+
lib_internal_deps = _read_package_json_deps(ctx, lib_path + '/package.json')
|
|
61
|
+
|
|
62
|
+
needed_libs[dep_name] = {
|
|
63
|
+
'name': lib_name,
|
|
64
|
+
'path': lib_path,
|
|
65
|
+
'label': lib_label,
|
|
66
|
+
'package_name': dep_name,
|
|
67
|
+
'tilt_resource': tilt_resource,
|
|
68
|
+
'internal_deps': lib_internal_deps,
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
lib_pkg_path = lib_path + '/package.json'
|
|
72
|
+
if lib_pkg_path not in visited:
|
|
73
|
+
queue.append((lib_pkg_path, depth + 1))
|
|
74
|
+
|
|
75
|
+
return needed_libs
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def discover_dependencies_from_json(ctx, resource_path):
|
|
79
|
+
"""
|
|
80
|
+
Discovers library dependencies for a SINGLE service from its package.json.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
List of Tilt resource names: ['lib-platform-...', ...]
|
|
84
|
+
"""
|
|
85
|
+
pkg_path = resource_path + '/package.json'
|
|
86
|
+
internal_deps = _read_package_json_deps(ctx, pkg_path)
|
|
87
|
+
|
|
88
|
+
tilt_resources = []
|
|
89
|
+
for dep_name in internal_deps:
|
|
90
|
+
lib_info = _get_lib_path_from_package_name(ctx, dep_name)
|
|
91
|
+
tilt_resource = lib_info[2]
|
|
92
|
+
|
|
93
|
+
if tilt_resource != None and tilt_resource not in tilt_resources:
|
|
94
|
+
tilt_resources.append(tilt_resource)
|
|
95
|
+
|
|
96
|
+
return tilt_resources
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
LibsDiscovery = struct(
|
|
100
|
+
discover_resource_libs = discover_resource_libraries,
|
|
101
|
+
discover_deps_from_json = discover_dependencies_from_json,
|
|
102
|
+
)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 📚 TILT SDK - LIBRARY PATHS & DEP MAPPINGS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
load('../../../topologies/tilt/common/utils.star', 'Utils')
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_lib_path_from_package_name(ctx, package_name):
|
|
9
|
+
"""
|
|
10
|
+
Converts @tdk/platform-logger -> shared-platform-engineering/platform-logger
|
|
11
|
+
|
|
12
|
+
Returns:
|
|
13
|
+
Tuple of (path, label, tilt_resource_name) or (None, None, None) if not a library
|
|
14
|
+
"""
|
|
15
|
+
lib_info = Utils.resolve_lib_path(package_name)
|
|
16
|
+
lib_path = lib_info[0]
|
|
17
|
+
lib_type = lib_info[1]
|
|
18
|
+
|
|
19
|
+
if not lib_path:
|
|
20
|
+
return (None, None, None)
|
|
21
|
+
|
|
22
|
+
lib_name = package_name[len(Utils.INTERNAL_SCOPE):]
|
|
23
|
+
tilt_resource = 'lib-' + lib_name
|
|
24
|
+
|
|
25
|
+
label_map = {
|
|
26
|
+
'platform': 'lib.platform',
|
|
27
|
+
'product': 'lib.product',
|
|
28
|
+
'ddd': 'lib.ddd',
|
|
29
|
+
}
|
|
30
|
+
label = label_map.get(lib_type, 'lib.platform')
|
|
31
|
+
|
|
32
|
+
return (lib_path, label, tilt_resource)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def read_package_json_deps(ctx, package_json_path):
|
|
36
|
+
"""Reads a package.json and returns all internal dependencies."""
|
|
37
|
+
resource_path = package_json_path.rsplit('/package.json', 1)[0]
|
|
38
|
+
return Utils.get_internal_deps(resource_path)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def get_resource_paths_for_focus(ctx, focus_enabled_all):
|
|
42
|
+
"""Returns list of service paths based on focus mode targets."""
|
|
43
|
+
if focus_enabled_all == None:
|
|
44
|
+
return []
|
|
45
|
+
|
|
46
|
+
resource_path_map = ctx.get('resource_path_map', {})
|
|
47
|
+
resource_paths = []
|
|
48
|
+
|
|
49
|
+
for resource in focus_enabled_all:
|
|
50
|
+
if resource in resource_path_map:
|
|
51
|
+
path = resource_path_map[resource]
|
|
52
|
+
if path not in resource_paths:
|
|
53
|
+
resource_paths.append(path)
|
|
54
|
+
|
|
55
|
+
return resource_paths
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def get_internal_deps_mapping(ctx, resource_path):
|
|
59
|
+
"""Returns a mapping of package_name -> source_path for internal dependencies."""
|
|
60
|
+
pkg_path = resource_path + '/package.json'
|
|
61
|
+
internal_deps = read_package_json_deps(ctx, pkg_path)
|
|
62
|
+
|
|
63
|
+
mapping = {}
|
|
64
|
+
for dep_name in internal_deps:
|
|
65
|
+
lib_info = get_lib_path_from_package_name(ctx, dep_name)
|
|
66
|
+
lib_path = lib_info[0]
|
|
67
|
+
|
|
68
|
+
if lib_path != None:
|
|
69
|
+
mapping[dep_name] = lib_path
|
|
70
|
+
|
|
71
|
+
return mapping
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
LibsPaths = struct(
|
|
75
|
+
get_path = get_lib_path_from_package_name,
|
|
76
|
+
read_package_json_deps = read_package_json_deps,
|
|
77
|
+
get_resource_paths = get_resource_paths_for_focus,
|
|
78
|
+
get_deps_mapping = get_internal_deps_mapping,
|
|
79
|
+
)
|