@tdk-landscape/tdk-cli-core 1.3.15 → 1.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Tiltfile +144 -0
- package/discovery/AGENTS.md +362 -0
- package/discovery/TILT_DISCOVERY.star +424 -0
- package/discovery/Tiltfile +58 -0
- package/discovery/config.star +258 -0
- package/discovery/constants.star +127 -0
- package/discovery/deterministic.star +211 -0
- package/discovery/discovery_daemon.star +191 -0
- package/discovery/discovery_orchestrator.star +460 -0
- package/discovery/filtering.star +5 -0
- package/discovery/identity-management-backend/service.yaml +26 -0
- package/discovery/identity-management-frontend/service.yaml +29 -0
- package/discovery/identity-sdk/service.yaml +9 -0
- package/discovery/incremental_discovery.star +213 -0
- package/discovery/indexing.star +7 -0
- package/discovery/json_manifest_scanner.star +51 -0
- package/discovery/libraries.star +46 -0
- package/discovery/loading.star +23 -0
- package/discovery/manifest/constants.star +104 -0
- package/discovery/manifest/loading.star +386 -0
- package/discovery/manifest/normalize.star +281 -0
- package/discovery/manifest/validation.star +108 -0
- package/discovery/normalization.star +11 -0
- package/discovery/registry.star +544 -0
- package/discovery/resource_snapshot.py +382 -0
- package/discovery/resource_snapshot.star +143 -0
- package/discovery/schemas.star +1 -0
- package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
- package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
- package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
- package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
- package/discovery/test_resource_snapshot.py +251 -0
- package/discovery/validation.star +78 -0
- package/discovery/versioning.star +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +11 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +1 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +36 -41
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/resource.d.ts.map +1 -1
- package/dist/commands/resource.js +51 -55
- package/dist/commands/resource.js.map +1 -1
- package/dist/commands/stack.d.ts.map +1 -1
- package/dist/commands/stack.js +22 -24
- package/dist/commands/stack.js.map +1 -1
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +1 -2
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +1 -2
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +59 -18
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/generator/extension-fetch.d.ts +19 -0
- package/dist/generator/extension-fetch.d.ts.map +1 -1
- package/dist/generator/extension-fetch.js +71 -5
- package/dist/generator/extension-fetch.js.map +1 -1
- package/dist/generator/template-engine.d.ts +1 -0
- package/dist/generator/template-engine.d.ts.map +1 -1
- package/dist/generator/template-engine.js +50 -6
- package/dist/generator/template-engine.js.map +1 -1
- package/dist/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +7 -9
- package/dist/utils/command-helpers.js.map +1 -1
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +1 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/errors.d.ts +2 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +6 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/project-features.d.ts.map +1 -1
- package/dist/utils/project-features.js +1 -1
- package/dist/utils/project-features.js.map +1 -1
- package/dist/utils/resource-features.d.ts.map +1 -1
- package/dist/utils/resource-features.js +2 -2
- package/dist/utils/resource-features.js.map +1 -1
- package/dist/utils/tar.js +4 -4
- package/dist/utils/tar.js.map +1 -1
- package/dist/utils/validation.d.ts +7 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +9 -0
- package/dist/utils/validation.js.map +1 -1
- package/engine/AGENTS.md +705 -0
- package/engine/README.md +29 -0
- package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
- package/engine/Tiltfile +80 -0
- package/engine/assets/docker/golden-layers.Dockerfile +221 -0
- package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
- package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
- package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
- package/engine/config.star +3 -0
- package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
- package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
- package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
- package/engine/docs/C4-ARCHITECTURE.md +17 -0
- package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
- package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
- package/engine/docs/README.md +284 -0
- package/engine/entrypoint.star +97 -0
- package/engine/lifecycle/orchestrator.star +260 -0
- package/engine/paths.star +717 -0
- package/engine/schemas/manifest-schema.json +301 -0
- package/engine/schemas/service-schema.json +301 -0
- package/engine/scripts/README.md +89 -0
- package/engine/scripts/build-and-publish-lib.sh +205 -0
- package/engine/scripts/check-lib-publish.sh +85 -0
- package/engine/scripts/debug-container.sh +258 -0
- package/engine/scripts/generate-manifest.sh +197 -0
- package/engine/spec.master +702 -0
- package/engine/spec.master.example +341 -0
- package/engine/topologies/README.md +34 -0
- package/engine/topologies/platform/docker/AGENTS.md +59 -0
- package/engine/topologies/platform/docker/auth/auth.star +167 -0
- package/engine/topologies/platform/docker/build/golden_image.star +37 -0
- package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
- package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
- package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
- package/engine/topologies/platform/docker/compose/compose.star +636 -0
- package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
- package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
- package/engine/topologies/platform/docker/config/bunignore.star +142 -0
- package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
- package/engine/topologies/platform/docker/constants.star +170 -0
- package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
- package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
- package/engine/topologies/platform/docker/index.star +27 -0
- package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
- package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
- package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
- package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
- package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
- package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
- package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
- package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
- package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
- package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
- package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
- package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
- package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
- package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
- package/engine/topologies/platform/docker/networking/traefik.star +232 -0
- package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
- package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
- package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
- package/engine/topologies/platform/net/proxy.star +4 -0
- package/engine/topologies/platform/registries/local.star +4 -0
- package/engine/topologies/platform/security/secrets.star +239 -0
- package/engine/topologies/platform/state/relational.star +4 -0
- package/engine/topologies/tilt/common/AGENTS.md +59 -0
- package/engine/topologies/tilt/common/utils.star +364 -0
- package/engine/topologies/tilt/common/utils_debug.star +69 -0
- package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
- package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
- package/engine/topologies/tilt/common/utils_env.star +43 -0
- package/engine/topologies/tilt/common/utils_output.star +97 -0
- package/engine/topologies/tilt/config/AGENTS.md +68 -0
- package/engine/topologies/tilt/config/defaults.star +3 -0
- package/engine/topologies/tilt/config/feature_flags.star +10 -0
- package/engine/topologies/tilt/config/global.star +55 -0
- package/engine/topologies/tilt/config/profiles.star +382 -0
- package/engine/topologies/tilt/generators/agents_md.star +62 -0
- package/engine/topologies/tilt/generators/api_gateway.star +145 -0
- package/engine/topologies/tilt/generators/index.star +124 -0
- package/engine/topologies/tilt/generators/infisical/README.md +424 -0
- package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
- package/engine/topologies/tilt/generators/infisical/index.star +57 -0
- package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
- package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
- package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
- package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
- package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
- package/engine/topologies/tilt/generators/npmrc.star +111 -0
- package/engine/topologies/tilt/generators/tsconfig.star +23 -0
- package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
- package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
- package/engine/topologies/tilt/generators/typescript/common.star +7 -0
- package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
- package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
- package/engine/topologies/tilt/generators/typescript/include.star +23 -0
- package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
- package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
- package/engine/topologies/tilt/generators/validators.star +853 -0
- package/engine/topologies/tilt/generators/vite/backend.star +78 -0
- package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
- package/engine/topologies/tilt/generators/vite/generators.star +43 -0
- package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
- package/engine/topologies/tilt/generators/vite/library.star +65 -0
- package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
- package/engine/topologies/tilt/generators/vite/templates.star +737 -0
- package/engine/topologies/tilt/generators/vite_config.star +22 -0
- package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
- package/engine/topologies/tilt/manifest/README.md +693 -0
- package/engine/topologies/tilt/manifest/__init__.star +218 -0
- package/engine/topologies/tilt/manifest/constants.star +252 -0
- package/engine/topologies/tilt/manifest/errors.star +266 -0
- package/engine/topologies/tilt/manifest/integration.star +339 -0
- package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
- package/engine/topologies/tilt/manifest/loader.star +214 -0
- package/engine/topologies/tilt/manifest/mapper.star +227 -0
- package/engine/topologies/tilt/manifest/parser.star +400 -0
- package/engine/topologies/tilt/manifest/schema.star +462 -0
- package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
- package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
- package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
- package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
- package/engine/topologies/tilt/manifest/validator.star +717 -0
- package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
- package/engine/topologies/tilt/resources/AGENTS.md +71 -0
- package/engine/topologies/tilt/resources/conditions.star +3 -0
- package/engine/topologies/tilt/resources/databases.star +244 -0
- package/engine/topologies/tilt/resources/declaration.star +3 -0
- package/engine/topologies/tilt/resources/deps.star +3 -0
- package/engine/topologies/tilt/resources/infra-loader.star +437 -0
- package/engine/topologies/tilt/resources/libs.star +30 -0
- package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
- package/engine/topologies/tilt/resources/libs_paths.star +79 -0
- package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
- package/engine/topologies/tilt/resources/libs_setup.star +164 -0
- package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
- package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
- package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
- package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
- package/engine/topologies/tilt/resources/orchestrator.star +54 -0
- package/engine/topologies/tilt/resources/ordering.star +3 -0
- package/engine/topologies/tilt/resources/triggers.star +3 -0
- package/engine/topologies/tilt/resources/watchers.star +299 -0
- package/engine/where-things-live.star +717 -0
- package/ext/Tiltfile +66 -0
- package/ext/ide-components/README.md +219 -0
- package/ext/ide-components/code_executor/server.py +268 -0
- package/ext/ide-components/code_viewer/server.py +206 -0
- package/ext/ide-components/config_inspector/server.py +1050 -0
- package/ext/ide-components/file_browser/server.py +285 -0
- package/ext/ide-components/shared/config_service.py +469 -0
- package/ext/ide-components/shared/file_utils.py +298 -0
- package/ext/ide-components/shared/http_utils.py +232 -0
- package/ext/ide-components/shared/static/styles.css +1334 -0
- package/ext/ide-components/shared/syntax_highlighter.py +140 -0
- package/ext/ide-components/shared/template_engine.py +123 -0
- package/ext/ide-components/shared/templates/base.html +121 -0
- package/ext/ide-components/shared/test_config_service.py +326 -0
- package/ext/ide-components/shared/tilt_integration.py +158 -0
- package/ext/ui-enhancements/cron-status-server.sh +49 -0
- package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
- package/ext/ui-enhancements/extension.yaml +36 -0
- package/ext/ui-enhancements/tiltfile.py +99 -0
- package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
- package/ext/ui-enhancements/ui/help-panel.css +279 -0
- package/ext/ui-enhancements/ui/icons.css +125 -0
- package/ext/ui-enhancements/ui/tooltips.css +114 -0
- package/package.json +13 -9
- package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
- package/specs/specs/TILT_TECH_STACK.star +159 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
appName: identity-management-frontend
|
|
2
|
+
appType: frontend
|
|
3
|
+
stack: identity
|
|
4
|
+
port: 4000
|
|
5
|
+
backendName: identity-management-backend
|
|
6
|
+
basePath: /
|
|
7
|
+
federation:
|
|
8
|
+
appName: identity-service
|
|
9
|
+
appType: remote
|
|
10
|
+
port: 4001
|
|
11
|
+
framework: vite
|
|
12
|
+
vite:
|
|
13
|
+
exposes:
|
|
14
|
+
./PasswordReset: ./src/remote-entry.ts
|
|
15
|
+
./SignIn: ./src/remote-entry.ts
|
|
16
|
+
./SignUp: ./src/remote-entry.ts
|
|
17
|
+
name: identity_service
|
|
18
|
+
shared:
|
|
19
|
+
- react
|
|
20
|
+
- react-dom
|
|
21
|
+
- @beauty-crm/introvertic-ui
|
|
22
|
+
healthCheck: True
|
|
23
|
+
path: identity-management-frontend
|
|
24
|
+
playwright: True
|
|
25
|
+
target_path: /app/dist
|
|
26
|
+
traefik:
|
|
27
|
+
host: identity-management-frontend.localhost
|
|
28
|
+
rootPath: True
|
|
29
|
+
rootPriority: 101
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 📈 INCREMENTAL DISCOVERY - Register New Services Dynamically
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Handles registration of newly detected services without full Tilt restart
|
|
5
|
+
# =============================================================================
|
|
6
|
+
|
|
7
|
+
load("./resource_registry.star", "CacheOps", "get_app_resources", "_DISCOVERY_CACHE")
|
|
8
|
+
load("./discovery_orchestrator.star", "_normalize_manifest")
|
|
9
|
+
load("../resources/orchestrator/generators/manifest_resource.star", "ManifestResource")
|
|
10
|
+
load("../../engine/topologies/tilt/manifest/loader.star", "ManifestLoader")
|
|
11
|
+
load("../../specs/specs/TILT_RESOURCE_DEFAULTS.star", "BASE_PORT_BACKEND")
|
|
12
|
+
|
|
13
|
+
def register_new_resource(resource_path, manifest, ctx, auto_init=True, verbose=False):
|
|
14
|
+
"""
|
|
15
|
+
Register a newly discovered resource and create its Tilt resources.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
resource_path: Path to resource directory
|
|
19
|
+
manifest: Loaded manifest dict
|
|
20
|
+
ctx: Tilt context with generators and config
|
|
21
|
+
auto_init: Whether to auto-init resources
|
|
22
|
+
verbose: Enable verbose logging
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Struct with success status and created resources
|
|
26
|
+
"""
|
|
27
|
+
resource_name = manifest.get("appName", "")
|
|
28
|
+
app_type = manifest.get("appType", "backend")
|
|
29
|
+
stack = manifest.get("stack", "")
|
|
30
|
+
|
|
31
|
+
if verbose:
|
|
32
|
+
print("🚀 Registering new resource: {}".format(resource_name))
|
|
33
|
+
|
|
34
|
+
# Normalize manifest to discovery format
|
|
35
|
+
resource = _normalize_manifest(manifest, resource_path)
|
|
36
|
+
|
|
37
|
+
# Build app resource structure
|
|
38
|
+
app_resource_dict = {
|
|
39
|
+
"name": resource_name,
|
|
40
|
+
"path": resource_path,
|
|
41
|
+
"labels": ["app." + resource_name],
|
|
42
|
+
"resources": [resource],
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# Add to cache
|
|
46
|
+
if not CacheOps.add(app_resource_dict):
|
|
47
|
+
print("⚠️ Failed to add {} to cache (may already exist)".format(resource_name))
|
|
48
|
+
return struct(success=False, error="cache_add_failed")
|
|
49
|
+
|
|
50
|
+
# Create Tilt resources
|
|
51
|
+
created_resources = []
|
|
52
|
+
|
|
53
|
+
# Create config-gen resource
|
|
54
|
+
config_gen_name = _create_config_gen_resource(
|
|
55
|
+
resource_name,
|
|
56
|
+
resource,
|
|
57
|
+
resource_path,
|
|
58
|
+
manifest,
|
|
59
|
+
ctx,
|
|
60
|
+
auto_init
|
|
61
|
+
)
|
|
62
|
+
created_resources.append(config_gen_name)
|
|
63
|
+
|
|
64
|
+
# Create Docker build resource
|
|
65
|
+
docker_resource = _create_docker_resource(
|
|
66
|
+
resource_name,
|
|
67
|
+
resource,
|
|
68
|
+
resource_path,
|
|
69
|
+
manifest,
|
|
70
|
+
ctx
|
|
71
|
+
)
|
|
72
|
+
if docker_resource:
|
|
73
|
+
created_resources.append(docker_resource)
|
|
74
|
+
|
|
75
|
+
# Create additional resources based on app type
|
|
76
|
+
if app_type == "frontend":
|
|
77
|
+
frontend_resources = _create_frontend_resources(
|
|
78
|
+
resource_name,
|
|
79
|
+
resource,
|
|
80
|
+
resource_path,
|
|
81
|
+
manifest,
|
|
82
|
+
ctx,
|
|
83
|
+
auto_init
|
|
84
|
+
)
|
|
85
|
+
created_resources.extend(frontend_resources)
|
|
86
|
+
|
|
87
|
+
# Log success
|
|
88
|
+
print("✅ Auto-registered: {}".format(resource_name))
|
|
89
|
+
print(" └─ Stack: {}".format(stack))
|
|
90
|
+
print(" └─ Type: {}".format(app_type))
|
|
91
|
+
print(" └─ Resources: {} created".format(len(created_resources)))
|
|
92
|
+
|
|
93
|
+
return struct(
|
|
94
|
+
success=True,
|
|
95
|
+
resource_name=resource_name,
|
|
96
|
+
resources=created_resources,
|
|
97
|
+
count=len(created_resources)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def _create_config_gen_resource(resource_name, resource, resource_path, manifest, ctx, auto_init):
|
|
101
|
+
"""Create config-gen resource for a resource."""
|
|
102
|
+
# Get backend manifest if frontend
|
|
103
|
+
backend_manifest = None
|
|
104
|
+
if resource.get("frontend", False):
|
|
105
|
+
backend_name = resource.get("backendName", resource_name.replace("-frontend", "-backend"))
|
|
106
|
+
backend_manifest = _get_backend_manifest(backend_name)
|
|
107
|
+
|
|
108
|
+
# Use ManifestResource to create config-gen
|
|
109
|
+
resource_config = {
|
|
110
|
+
"name": resource.get("name", resource_name),
|
|
111
|
+
"port": resource.get("port", BASE_PORT_BACKEND),
|
|
112
|
+
"_manifest": manifest,
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
config_gen_name = ManifestResource.create_config_resource(
|
|
116
|
+
resource_name,
|
|
117
|
+
resource_config,
|
|
118
|
+
resource_path,
|
|
119
|
+
manifest,
|
|
120
|
+
backend_manifest,
|
|
121
|
+
ctx
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
return config_gen_name
|
|
125
|
+
|
|
126
|
+
def _create_docker_resource(resource_name, resource, resource_path, manifest, ctx):
|
|
127
|
+
"""Create Docker build resource for a resource."""
|
|
128
|
+
# Docker resource is created through the orchestrator
|
|
129
|
+
# This is handled when the config-gen resource runs
|
|
130
|
+
# Return the expected resource name for tracking
|
|
131
|
+
return resource_name
|
|
132
|
+
|
|
133
|
+
def _create_frontend_resources(resource_name, resource, resource_path, manifest, ctx, auto_init):
|
|
134
|
+
"""Create additional resources for frontend app resources."""
|
|
135
|
+
resources = []
|
|
136
|
+
|
|
137
|
+
# Frontend dev server resource is auto-created by the orchestrator
|
|
138
|
+
# when processing the manifest
|
|
139
|
+
|
|
140
|
+
return resources
|
|
141
|
+
|
|
142
|
+
def _get_backend_manifest(backend_name):
|
|
143
|
+
"""Look up backend manifest for a frontend app resource."""
|
|
144
|
+
# Search in current cache
|
|
145
|
+
for app_resource in get_app_resources():
|
|
146
|
+
if app_resource.get("name") == backend_name:
|
|
147
|
+
resources = app_resource.get("resources", [])
|
|
148
|
+
for res in resources:
|
|
149
|
+
if res.get("_manifest"):
|
|
150
|
+
return res.get("_manifest")
|
|
151
|
+
return None
|
|
152
|
+
|
|
153
|
+
def validate_resource_structure(resource_path):
|
|
154
|
+
"""
|
|
155
|
+
Validate that an app resource has complete structure before registration.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
resource_path: Path to app resource directory
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
Struct with valid status and missing files
|
|
162
|
+
"""
|
|
163
|
+
required_files = ["service.json", "package.json"]
|
|
164
|
+
missing = []
|
|
165
|
+
|
|
166
|
+
for filename in required_files:
|
|
167
|
+
filepath = resource_path + "/" + filename
|
|
168
|
+
result = local(
|
|
169
|
+
"test -f {} && echo 'yes' || echo 'no'".format(filepath),
|
|
170
|
+
quiet=True,
|
|
171
|
+
echo_off=True
|
|
172
|
+
)
|
|
173
|
+
if str(result).strip() != "yes":
|
|
174
|
+
missing.append(filename)
|
|
175
|
+
|
|
176
|
+
return struct(
|
|
177
|
+
valid=len(missing) == 0,
|
|
178
|
+
missing=missing,
|
|
179
|
+
has_resource_json="service.json" not in missing,
|
|
180
|
+
has_package_json="package.json" not in missing
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
def check_duplicate_resource(resource_name):
|
|
184
|
+
"""
|
|
185
|
+
Check if a resource name already exists.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
resource_name: Name to check
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
Struct with duplicate status and existing info
|
|
192
|
+
"""
|
|
193
|
+
if CacheOps.has(resource_name):
|
|
194
|
+
# Find existing resource path
|
|
195
|
+
for app_resource in get_app_resources():
|
|
196
|
+
if app_resource.get("name") == resource_name:
|
|
197
|
+
return struct(
|
|
198
|
+
duplicate=True,
|
|
199
|
+
existing_path=app_resource.get("path", "unknown"),
|
|
200
|
+
message="Resource '{}' already exists at {}".format(
|
|
201
|
+
resource_name,
|
|
202
|
+
app_resource.get("path", "unknown")
|
|
203
|
+
)
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
return struct(duplicate=False)
|
|
207
|
+
|
|
208
|
+
# Export public API
|
|
209
|
+
IncrementalDiscovery = struct(
|
|
210
|
+
register=register_new_resource,
|
|
211
|
+
validate_structure=validate_resource_structure,
|
|
212
|
+
check_duplicate=check_duplicate_resource,
|
|
213
|
+
)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# json_manifest_scanner.star
|
|
2
|
+
#
|
|
3
|
+
# Purpose: Low-level JSON manifest file discovery using shell `find` command
|
|
4
|
+
# Use: discover_json_manifests(root_path) returns list of manifest file paths
|
|
5
|
+
#
|
|
6
|
+
# NOTE: This is the "manual" scanner - it finds files in a specific folder.
|
|
7
|
+
# For auto-discovery from Tilt's discovery system, use discovery.star instead.
|
|
8
|
+
|
|
9
|
+
load("./manifest/constants.star", "MANIFEST_FILENAME")
|
|
10
|
+
|
|
11
|
+
def discover_json_manifests(root_path):
|
|
12
|
+
"""
|
|
13
|
+
Discover all JSON manifest files in a given root path.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
root_path: Path relative to project root (e.g., "services/product")
|
|
17
|
+
or absolute path. Uses TDK_PROJECT_ROOT env var if set.
|
|
18
|
+
Supports glob patterns like "identity-*" for flat structures.
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
List of manifest file paths (strings)
|
|
22
|
+
"""
|
|
23
|
+
# Get project root from environment variable set by main Tiltfile
|
|
24
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '.')
|
|
25
|
+
|
|
26
|
+
# Check if root_path contains glob patterns
|
|
27
|
+
if '*' in root_path or '?' in root_path:
|
|
28
|
+
# Use bash to expand glob and find files
|
|
29
|
+
# The pattern like identity-* needs shell expansion
|
|
30
|
+
cmd = "cd " + project_root + " && bash -c 'for dir in " + root_path + "; do if [ -d \"$dir\" ]; then find \"$dir\" -maxdepth 3 -type f -name \"" + MANIFEST_FILENAME + "\" 2>/dev/null; fi; done'"
|
|
31
|
+
result = str(local(cmd, quiet=True, echo_off=True))
|
|
32
|
+
else:
|
|
33
|
+
# Construct absolute path from project root
|
|
34
|
+
if root_path.startswith('/'):
|
|
35
|
+
full_path = root_path
|
|
36
|
+
else:
|
|
37
|
+
full_path = project_root + "/" + root_path
|
|
38
|
+
|
|
39
|
+
# Search for service.json files (silent)
|
|
40
|
+
cmd = "find " + full_path + " -type f -name '" + MANIFEST_FILENAME + "' 2>/dev/null | sort"
|
|
41
|
+
result = str(local(cmd, quiet=True, echo_off=True))
|
|
42
|
+
|
|
43
|
+
manifests = []
|
|
44
|
+
if result:
|
|
45
|
+
lines = result.strip().split("\n")
|
|
46
|
+
for line in lines:
|
|
47
|
+
line = line.strip()
|
|
48
|
+
if line and MANIFEST_FILENAME in line:
|
|
49
|
+
manifests.append(line)
|
|
50
|
+
|
|
51
|
+
return manifests
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 📚 TOPOLOGIES - DISCOVERY LIBRARIES
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Libraries are always auto-discovered from the filesystem by scanning
|
|
5
|
+
# shared library directories for matching prefix patterns.
|
|
6
|
+
# This eliminates stale hardcoded lists that required manual updates.
|
|
7
|
+
# =============================================================================
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def autodiscover_libraries(root_path, prefix):
|
|
11
|
+
libs = []
|
|
12
|
+
result = str(local("ls -d " + root_path + "/" + prefix + "*/ 2>/dev/null || true", quiet=True, echo_off=True))
|
|
13
|
+
|
|
14
|
+
if result:
|
|
15
|
+
for line in result.strip().split("\n"):
|
|
16
|
+
if line:
|
|
17
|
+
lib_path = line.rstrip("/")
|
|
18
|
+
lib_name = lib_path.split("/")[-1]
|
|
19
|
+
if lib_name:
|
|
20
|
+
libs.append(lib_name)
|
|
21
|
+
|
|
22
|
+
return libs
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_platform_libs():
|
|
26
|
+
discovered = autodiscover_libraries("shared-platform-engineering", "platform-")
|
|
27
|
+
if len(discovered) > 0:
|
|
28
|
+
is_verbose = os.environ.get('TILT_LOG_LEVEL') == 'verbose'
|
|
29
|
+
if is_verbose or len(discovered) <= 5:
|
|
30
|
+
lib_list = ", ".join(discovered)
|
|
31
|
+
else:
|
|
32
|
+
lib_list = ", ".join(discovered[:5]) + ", ... and {} more".format(len(discovered) - 5)
|
|
33
|
+
print(" 📚 Autodiscovered platform libraries: {}".format(lib_list))
|
|
34
|
+
return discovered
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_product_libs():
|
|
38
|
+
discovered = autodiscover_libraries("shared-product-engineering", "product-")
|
|
39
|
+
if len(discovered) > 0:
|
|
40
|
+
is_verbose = os.environ.get('TILT_LOG_LEVEL') == 'verbose'
|
|
41
|
+
if is_verbose or len(discovered) <= 5:
|
|
42
|
+
lib_list = ", ".join(discovered)
|
|
43
|
+
else:
|
|
44
|
+
lib_list = ", ".join(discovered[:5]) + ", ... and {} more".format(len(discovered) - 5)
|
|
45
|
+
print(" 📚 Autodiscovered product libraries: {}".format(lib_list))
|
|
46
|
+
return discovered
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
load("./manifest/constants.star", "MANIFEST_FILENAME", "MANIFEST_DEFAULTS", "VALID_APP_TYPES", "DEFAULT_SYNCS")
|
|
2
|
+
load("./manifest/loading.star", "load_manifest", "load_related_manifest", "get_default_syncs_for_type")
|
|
3
|
+
load("./validation.star", _validate = "validate")
|
|
4
|
+
load("./manifest/normalize.star", "load_and_normalize", "discover_manifests_in_path", "load_all_manifests", "get_port", "get_database_url", "print_summary", "generate_manifest_template")
|
|
5
|
+
|
|
6
|
+
Manifest = struct(
|
|
7
|
+
load_manifest = load_manifest,
|
|
8
|
+
load_related = load_related_manifest,
|
|
9
|
+
load_and_normalize = load_and_normalize,
|
|
10
|
+
discover_manifests = discover_manifests_in_path,
|
|
11
|
+
load_all_manifests = load_all_manifests,
|
|
12
|
+
load_all = load_all_manifests,
|
|
13
|
+
validate = _validate,
|
|
14
|
+
get_port = get_port,
|
|
15
|
+
get_database_url = get_database_url,
|
|
16
|
+
get_default_syncs = get_default_syncs_for_type,
|
|
17
|
+
print_summary = print_summary,
|
|
18
|
+
generate_template = generate_manifest_template,
|
|
19
|
+
FILENAME = MANIFEST_FILENAME,
|
|
20
|
+
DEFAULTS = MANIFEST_DEFAULTS,
|
|
21
|
+
VALID_APP_TYPES = VALID_APP_TYPES,
|
|
22
|
+
DEFAULT_SYNCS = DEFAULT_SYNCS,
|
|
23
|
+
)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 📋 MANIFEST CONSTANTS (Self-Contained)
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: manifest/constants.star
|
|
5
|
+
# Purpose: Define manifest filename patterns and constants
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
# Manifest filenames
|
|
9
|
+
MANIFEST_FILENAME = "service.json"
|
|
10
|
+
MANIFEST_FILENAME_YAML = "service.yaml"
|
|
11
|
+
|
|
12
|
+
# File patterns
|
|
13
|
+
MANIFEST_PATTERN = "*.json"
|
|
14
|
+
|
|
15
|
+
# Config filenames
|
|
16
|
+
PACKAGE_CONFIG_FILENAMES = ["package.json", "bun.lock"]
|
|
17
|
+
GENERATED_CONFIG_FILENAMES = ["tsconfig.json", "vite.config.ts"]
|
|
18
|
+
|
|
19
|
+
# Autogenerated paths
|
|
20
|
+
AUTOGENERATED_CONFIG_PATHS = ["autogenerated/"]
|
|
21
|
+
|
|
22
|
+
# Manifest defaults
|
|
23
|
+
MANIFEST_DEFAULTS = {
|
|
24
|
+
"appType": "backend",
|
|
25
|
+
"runtime": "bun",
|
|
26
|
+
"port": 4000,
|
|
27
|
+
"replicas": 1,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# Valid app types
|
|
31
|
+
VALID_APP_TYPES = ["backend", "frontend", "library", "migrator", "sdk", "worker"]
|
|
32
|
+
|
|
33
|
+
# Default syncs
|
|
34
|
+
DEFAULT_SYNCS = ["src", "prisma"]
|
|
35
|
+
|
|
36
|
+
# Runtime configs
|
|
37
|
+
RUNTIME_CONFIGS = {
|
|
38
|
+
"bun": {"port_env": "PORT", "command": "bun run start"},
|
|
39
|
+
"node": {"port_env": "PORT", "command": "node dist/index.js"},
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Traefik defaults
|
|
43
|
+
TRAEFIK_DEFAULTS = {
|
|
44
|
+
"entrypoint": "web",
|
|
45
|
+
"scheme": "http",
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Service name patterns
|
|
49
|
+
RESOURCE_NAME_PATTERNS = {
|
|
50
|
+
"backend": "{domain}-management-backend",
|
|
51
|
+
"frontend": "{domain}-management-frontend",
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# Validation thresholds
|
|
55
|
+
VALIDATION_THRESHOLDS = {
|
|
56
|
+
"min_port": 3000,
|
|
57
|
+
"max_port": 9999,
|
|
58
|
+
"min_replicas": 1,
|
|
59
|
+
"max_replicas": 10,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Valid stacks - loaded dynamically from project config
|
|
63
|
+
# Projects define their own stacks in .tdk/project.json
|
|
64
|
+
VALID_STACKS = []
|
|
65
|
+
|
|
66
|
+
# Valid features
|
|
67
|
+
VALID_FEATURES = ["api-client", "env-config", "api-index", "prisma", "nats", "redis", "infisical", "vitest", "traefik", "websocket", "graphql", "grpc", "vite-node", "maintenance", "cron"]
|
|
68
|
+
|
|
69
|
+
# Port ranges
|
|
70
|
+
PORT_RANGES = {
|
|
71
|
+
"frontend_start": 3000,
|
|
72
|
+
"frontend_end": 3999,
|
|
73
|
+
"backend_start": 4000,
|
|
74
|
+
"backend_end": 4999,
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Struct for grouped exports
|
|
78
|
+
ManifestConstants = struct(
|
|
79
|
+
MANIFEST_FILENAME = MANIFEST_FILENAME,
|
|
80
|
+
MANIFEST_FILENAME_YAML = MANIFEST_FILENAME_YAML,
|
|
81
|
+
MANIFEST_PATTERN = MANIFEST_PATTERN,
|
|
82
|
+
PACKAGE_CONFIG_FILENAMES = PACKAGE_CONFIG_FILENAMES,
|
|
83
|
+
GENERATED_CONFIG_FILENAMES = GENERATED_CONFIG_FILENAMES,
|
|
84
|
+
AUTOGENERATED_CONFIG_PATHS = AUTOGENERATED_CONFIG_PATHS,
|
|
85
|
+
MANIFEST_DEFAULTS = MANIFEST_DEFAULTS,
|
|
86
|
+
VALID_APP_TYPES = VALID_APP_TYPES,
|
|
87
|
+
DEFAULT_SYNCS = DEFAULT_SYNCS,
|
|
88
|
+
RUNTIME_CONFIGS = RUNTIME_CONFIGS,
|
|
89
|
+
TRAEFIK_DEFAULTS = TRAEFIK_DEFAULTS,
|
|
90
|
+
RESOURCE_NAME_PATTERNS = RESOURCE_NAME_PATTERNS,
|
|
91
|
+
VALIDATION_THRESHOLDS = VALIDATION_THRESHOLDS,
|
|
92
|
+
VALID_STACKS = VALID_STACKS,
|
|
93
|
+
VALID_FEATURES = VALID_FEATURES,
|
|
94
|
+
PORT_RANGES = PORT_RANGES,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# =============================================================================
|
|
98
|
+
# INDIVIDUAL EXPORTS for load() compatibility
|
|
99
|
+
# =============================================================================
|
|
100
|
+
# These enable: load("./manifest/constants.star", "MANIFEST_FILENAME_YAML")
|
|
101
|
+
# =============================================================================
|
|
102
|
+
|
|
103
|
+
MANIFEST_FILENAME = MANIFEST_FILENAME
|
|
104
|
+
MANIFEST_FILENAME_YAML = MANIFEST_FILENAME_YAML
|