@tdk-landscape/tdk-cli-core 1.3.136 → 1.3.137
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/CHANGELOG.md +4 -0
- package/cli/dist/commands/doctor.js +11 -11
- package/cli/dist/commands/resource.js +15 -14
- package/cli/dist/generator/template-engine.js +10 -7
- package/cli/dist/utils/constants.js +22 -3
- package/cli/dist/utils/doctor-report.js +2 -1
- package/cli/dist/utils/doctor-runtime.js +6 -1
- package/cli/dist/utils/doctor-wiring.js +5 -4
- package/cli/dist/utils/generated-paths.js +3 -2
- package/cli/dist/utils/project-config-defaults.js +2 -1
- package/cli/dist/utils/project-features.js +5 -13
- package/cli/dist/utils/resource-features.js +2 -1
- package/cli/dist/utils/services.js +2 -2
- package/cli/dist/utils/shared-platform-postgres.js +6 -5
- package/cli/dist/utils/smoke.js +3 -2
- package/cli/dist/utils/stack-features.js +5 -2
- package/cli/dist-bundle/chunk-DUOGIS2Y.js +315 -0
- package/cli/dist-bundle/cli.js +207 -207
- package/cli/dist-bundle/{cold-preflight-NXFER2W6.js → cold-preflight-UATSRM67.js} +1 -1
- package/cli/package.json +1 -1
- package/engine/assets/docker/wake-gateway/server.ts +3 -3
- package/engine/topologies/platform/docker/compose/compose.star +4 -4
- package/engine/topologies/platform/docker/constants.star +25 -0
- package/engine/topologies/platform/docker/networking/traefik_static_routes.star +3 -1
- package/engine/topologies/tilt/generators/vite/templates.star +13 -9
- package/engine/topologies/tilt/resources/infra-loader.star +20 -14
- package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +4 -4
- package/engine/topologies/tilt/resources/orchestrator/generators/env.star +3 -2
- package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +2 -1
- package/package.json +1 -1
- package/cli/dist-bundle/chunk-I63IBPUZ.js +0 -315
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{createRequire as __tdkRequire}from'node:module';const require=__tdkRequire(import.meta.url);
|
|
2
|
-
import{
|
|
2
|
+
import{mb as a,nb as b,ob as c,pb as d,qb as e}from"./chunk-DUOGIS2Y.js";import"./chunk-OBQS5CYC.js";import"./chunk-6EA4DGCY.js";export{e as assertMachineReadyOrExit,d as formatColdPreflight,a as nodeTooOld,b as requireVerifiedDockerVersions,c as runColdPreflight};
|
package/cli/package.json
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
* the resource name; Compose derives it as
|
|
20
20
|
* <project>-<service>-<replica>, confirmed empirically
|
|
21
21
|
* against a live TDK container, e.g.
|
|
22
|
-
* "analytics-autogenerated-data-governance-api-1"
|
|
22
|
+
* "tdk-erp-system-analytics-autogenerated-data-governance-api-1"
|
|
23
23
|
* for the "data-governance-api" resource).
|
|
24
24
|
* X-Wake-Deps Comma-separated "resourceName=containerName" pairs
|
|
25
25
|
* for required dependencies (task 1.5: Tilt never
|
|
26
26
|
* cascades a trigger to these on its own).
|
|
27
|
-
* X-Wake-Compose-Project The resource's Compose project (e.g. "analytics-autogenerated").
|
|
27
|
+
* X-Wake-Compose-Project The resource's Compose project (e.g. "tdk-erp-system-analytics-autogenerated").
|
|
28
28
|
* X-Wake-Compose-Files Comma-separated absolute compose file paths, the
|
|
29
29
|
* same ones Tilt's `<resource>-run-only` resource
|
|
30
30
|
* passes. The project root is mounted into this
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* paths inside those files resolve exactly as for Tilt.
|
|
33
33
|
* X-Wake-Env-File Absolute path of the project's .env (optional).
|
|
34
34
|
* X-Wake-Image The image the compose service declares
|
|
35
|
-
* (<
|
|
35
|
+
* (<project>_<stack>_<resource>:dev).
|
|
36
36
|
* X-Wake-Timeout-Ms, X-Wake-Proxy-Port, X-Wake-Session-Duration
|
|
37
37
|
* X-Wake-Respond-Within-Ms How long to hold the request before answering
|
|
38
38
|
* 503 + Retry-After while the start continues in the
|
|
@@ -18,7 +18,7 @@ OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
|
|
|
18
18
|
# === END INLINED CONSTANTS ===
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
load("./compose_helpers.star", "
|
|
21
|
+
load("./compose_helpers.star", "compose_build_config")
|
|
22
22
|
load("../networking/traefik.star", "get_frontend_traefik_labels", "get_backend_traefik_labels")
|
|
23
23
|
load("../networking/api_path_constants.star", "get_api_path_for_domain", "get_frontend_base_path")
|
|
24
24
|
load("../secrets/infisical.star", "get_infisical_environment_vars")
|
|
@@ -78,7 +78,7 @@ def _compute_env_file_rel_path(resource_path, full_resource_path, env_filename):
|
|
|
78
78
|
def generate_frontend_compose(resource_path, resource_name, res, manifest=None):
|
|
79
79
|
"""Generate frontend docker-compose entry with Traefik routing."""
|
|
80
80
|
res_name = res['name']
|
|
81
|
-
image_name =
|
|
81
|
+
image_name = PlatformDockerConstants.app_image_name(resource_name, res_name)
|
|
82
82
|
stack = manifest.get('stack', resource_name) if manifest else resource_name
|
|
83
83
|
|
|
84
84
|
target_path = res.get('target_path', manifest.get('target_path', '/usr/share/nginx/html'))
|
|
@@ -338,7 +338,7 @@ def _generate_single_backend_entry(resource_path, resource_name, res, manifest,
|
|
|
338
338
|
image_name=(
|
|
339
339
|
manifest.get('image')
|
|
340
340
|
if manifest and manifest.get('appType') == 'bring-your-own' and manifest.get('image')
|
|
341
|
-
else
|
|
341
|
+
else PlatformDockerConstants.app_image_name(resource_name, res_name)
|
|
342
342
|
),
|
|
343
343
|
build_config=build_config,
|
|
344
344
|
ports_section=ports_section,
|
|
@@ -541,7 +541,7 @@ def generate_migrator_compose(resource_path, resource_name, dockerfile_path=None
|
|
|
541
541
|
str: Generated docker-compose YAML content
|
|
542
542
|
"""
|
|
543
543
|
migrator_name = resource_name + '-db-migrator'
|
|
544
|
-
image_name =
|
|
544
|
+
image_name = PlatformDockerConstants.migrator_image_name(resource_name)
|
|
545
545
|
|
|
546
546
|
# Use PROJECT_NAME from PlatformDockerConstants for portable database naming
|
|
547
547
|
db_name = PlatformDockerConstants.PROJECT_NAME + '_' + resource_name
|
|
@@ -91,6 +91,27 @@ VERDACCIO_CONNECT_NETWORK_RESOURCE = "verdaccio-connect-network"
|
|
|
91
91
|
VERDACCIO_DOMAIN = "verdaccio"
|
|
92
92
|
VERDACCIO_TRAEFIK_HOST = "verdaccio.localhost"
|
|
93
93
|
|
|
94
|
+
# Docker names for one stack's generated services. Every name carries the TDK
|
|
95
|
+
# project, so two projects that both have a stack called `people` (two Tilt
|
|
96
|
+
# instances on one Docker daemon) never share a Compose project, container or
|
|
97
|
+
# image. Without it, the second `tdk up` runs `--remove-orphans` against the
|
|
98
|
+
# first project's containers and overwrites its images.
|
|
99
|
+
def compose_project_name(stack):
|
|
100
|
+
"""Compose project for a stack: <project>-<stack>-autogenerated (e.g. tdk-erp-system-analytics-autogenerated)."""
|
|
101
|
+
return PROJECT_NAME_HYPHEN + "-" + stack + "-autogenerated"
|
|
102
|
+
|
|
103
|
+
def app_image_name(stack, res_name):
|
|
104
|
+
"""Image tag (:dev) of one service: <project>_<stack>_<resource>:dev."""
|
|
105
|
+
return PROJECT_NAME + "_" + stack + "_" + res_name + ":dev"
|
|
106
|
+
|
|
107
|
+
def infra_compose_project_name(infra):
|
|
108
|
+
"""Compose project for a shared platform stack: <project>-<infra> (e.g. tdk-erp-system-database-management)."""
|
|
109
|
+
return PROJECT_NAME_HYPHEN + "-" + infra
|
|
110
|
+
|
|
111
|
+
def migrator_image_name(stack):
|
|
112
|
+
"""Image tag (:dev) of a stack's migrator: <project>_<stack>-db-migrator:dev."""
|
|
113
|
+
return PROJECT_NAME + "_" + stack + "-db-migrator:dev"
|
|
114
|
+
|
|
94
115
|
# Helper function to generate database name
|
|
95
116
|
def get_db_name(domain_or_service):
|
|
96
117
|
"""Returns standardized database name for a domain or service."""
|
|
@@ -176,6 +197,10 @@ PlatformDockerConstants = struct(
|
|
|
176
197
|
VERDACCIO_TRAEFIK_HOST = VERDACCIO_TRAEFIK_HOST,
|
|
177
198
|
DB_CONFIG = DB_CONFIG,
|
|
178
199
|
get_db_name = get_db_name,
|
|
200
|
+
compose_project_name = compose_project_name,
|
|
201
|
+
infra_compose_project_name = infra_compose_project_name,
|
|
202
|
+
app_image_name = app_image_name,
|
|
203
|
+
migrator_image_name = migrator_image_name,
|
|
179
204
|
get_database_url_base = get_database_url_base,
|
|
180
205
|
get_database_url_for_env = get_database_url_for_env,
|
|
181
206
|
get_database_url_for_shell = get_database_url_for_shell,
|
|
@@ -59,7 +59,9 @@ def _container_name(compose_project_name, res_name):
|
|
|
59
59
|
"""Docker Compose's own naming convention: <project>-<service>-<replica>.
|
|
60
60
|
|
|
61
61
|
Confirmed empirically against a live TDK container (analytics-autogenerated
|
|
62
|
-
-data-governance-api-1) -- see design.md D2 Context.
|
|
62
|
+
-data-governance-api-1) -- see design.md D2 Context. Compose projects are now
|
|
63
|
+
<project>-<stack>-autogenerated, so the name starts with the TDK project too
|
|
64
|
+
(tdk-erp-system-analytics-autogenerated-data-governance-api-1). Always replica 1: a
|
|
63
65
|
deferred resource's replica count is unrelated to which single instance
|
|
64
66
|
the wake gateway needs to address."""
|
|
65
67
|
return compose_project_name + "-" + res_name + "-1"
|
|
@@ -22,6 +22,10 @@ def _load_npm_scope():
|
|
|
22
22
|
|
|
23
23
|
_NPM_SCOPE = _load_npm_scope()
|
|
24
24
|
|
|
25
|
+
def _with_npm_scope(template):
|
|
26
|
+
# Fill in the scope here so callers' .format() calls need no extra argument; '{npm_scope}' is not a .format() field afterwards.
|
|
27
|
+
return template.replace('{npm_scope}', _NPM_SCOPE)
|
|
28
|
+
|
|
25
29
|
TEMPLATE_VITE_BACKEND_WITH_NODE = """{header}
|
|
26
30
|
import path from 'node:path';
|
|
27
31
|
import {{ VitePluginNode }} from 'vite-plugin-node';
|
|
@@ -135,7 +139,7 @@ export default defineConfig({{
|
|
|
135
139
|
}});
|
|
136
140
|
"""
|
|
137
141
|
|
|
138
|
-
TEMPLATE_VITE_LIBRARY = """{header}
|
|
142
|
+
TEMPLATE_VITE_LIBRARY = _with_npm_scope("""{header}
|
|
139
143
|
import {{ resolve }} from 'node:path';
|
|
140
144
|
{plugin_imports}
|
|
141
145
|
import {{ defineConfig }} from 'vitest/config';
|
|
@@ -164,7 +168,7 @@ export default defineConfig({{
|
|
|
164
168
|
rollupOptions: {{
|
|
165
169
|
external: [
|
|
166
170
|
/^node:.*/,
|
|
167
|
-
/^@
|
|
171
|
+
/^@{npm_scope}\\/.*$/,
|
|
168
172
|
'react',
|
|
169
173
|
'react-dom',
|
|
170
174
|
'react/jsx-runtime',
|
|
@@ -223,7 +227,7 @@ export default defineConfig({{
|
|
|
223
227
|
include: ['src/**/*.{{test,spec}}.{{ts,tsx}}'],
|
|
224
228
|
}},
|
|
225
229
|
}});
|
|
226
|
-
"""
|
|
230
|
+
""")
|
|
227
231
|
|
|
228
232
|
TEMPLATE_VITE_SDK = """{header}
|
|
229
233
|
import {{ federation }} from '@module-federation/vite';
|
|
@@ -261,7 +265,7 @@ export default defineConfig({{
|
|
|
261
265
|
# Environment-Specific Library Templates
|
|
262
266
|
# =============================================================================
|
|
263
267
|
|
|
264
|
-
TEMPLATE_VITE_LIBRARY_DEV = """{header}
|
|
268
|
+
TEMPLATE_VITE_LIBRARY_DEV = _with_npm_scope("""{header}
|
|
265
269
|
import {{ resolve }} from 'node:path';
|
|
266
270
|
{plugin_imports}
|
|
267
271
|
import {{ defineConfig }} from 'vitest/config';
|
|
@@ -284,7 +288,7 @@ export default defineConfig({{
|
|
|
284
288
|
rollupOptions: {{
|
|
285
289
|
external: [
|
|
286
290
|
/^node:.*/,
|
|
287
|
-
/^@
|
|
291
|
+
/^@{npm_scope}\\/.*$/,
|
|
288
292
|
'react',
|
|
289
293
|
'react-dom',
|
|
290
294
|
'react/jsx-runtime',
|
|
@@ -341,9 +345,9 @@ export default defineConfig({{
|
|
|
341
345
|
include: ['src/**/*.{{test,spec}}.{{ts,tsx}}'],
|
|
342
346
|
}},
|
|
343
347
|
}});
|
|
344
|
-
"""
|
|
348
|
+
""")
|
|
345
349
|
|
|
346
|
-
TEMPLATE_VITE_LIBRARY_PROD = """{header}
|
|
350
|
+
TEMPLATE_VITE_LIBRARY_PROD = _with_npm_scope("""{header}
|
|
347
351
|
import {{ resolve }} from 'node:path';
|
|
348
352
|
{plugin_imports}
|
|
349
353
|
import {{ defineConfig }} from 'vitest/config';
|
|
@@ -372,7 +376,7 @@ export default defineConfig({{
|
|
|
372
376
|
rollupOptions: {{
|
|
373
377
|
external: [
|
|
374
378
|
/^node:.*/,
|
|
375
|
-
/^@
|
|
379
|
+
/^@{npm_scope}\\/.*$/,
|
|
376
380
|
'react',
|
|
377
381
|
'react-dom',
|
|
378
382
|
'react/jsx-runtime',
|
|
@@ -430,7 +434,7 @@ export default defineConfig({{
|
|
|
430
434
|
include: ['src/**/*.{{test,spec}}.{{ts,tsx}}'],
|
|
431
435
|
}},
|
|
432
436
|
}});
|
|
433
|
-
"""
|
|
437
|
+
""")
|
|
434
438
|
|
|
435
439
|
# =============================================================================
|
|
436
440
|
# Template Generation Functions
|
|
@@ -43,14 +43,20 @@ def _compose_has_service(compose_path, service_name):
|
|
|
43
43
|
return service_name in services
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
def _docker_compose(compose_paths, env_file):
|
|
47
|
-
"""docker_compose() wrapper
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
def _docker_compose(compose_paths, env_file, infra):
|
|
47
|
+
"""docker_compose() wrapper for a shared platform stack, in its own Compose project.
|
|
48
|
+
|
|
49
|
+
Without project_name, Compose names the project after the file's directory, so every
|
|
50
|
+
TDK project on one Docker daemon shares `database-management`, `traefik` and so on.
|
|
51
|
+
Then one project's `up` can recreate or remove another project's services.
|
|
52
|
+
Tilt's builtin rejects env_file=None outright (it type-checks the kwarg as path|string,
|
|
53
|
+
not Optional), so the keyword must be omitted entirely rather than passed as None.
|
|
54
|
+
"""
|
|
55
|
+
project_name = PlatformDockerConstants.infra_compose_project_name(infra)
|
|
50
56
|
if env_file:
|
|
51
|
-
docker_compose(compose_paths, env_file=env_file)
|
|
57
|
+
docker_compose(compose_paths, project_name=project_name, env_file=env_file)
|
|
52
58
|
else:
|
|
53
|
-
docker_compose(compose_paths)
|
|
59
|
+
docker_compose(compose_paths, project_name=project_name)
|
|
54
60
|
|
|
55
61
|
|
|
56
62
|
def _generate_database_management_compose():
|
|
@@ -134,7 +140,7 @@ def _register_platform_postgres(should_enable, root_prefix="", env_file=None, wr
|
|
|
134
140
|
postgres_compose = _ensure_database_management_compose(root_prefix, write_fn)
|
|
135
141
|
if _file_exists(postgres_compose):
|
|
136
142
|
debug_log("INFRA: Loading postgres compose from {}".format(postgres_compose))
|
|
137
|
-
_docker_compose(postgres_compose, env_file)
|
|
143
|
+
_docker_compose(postgres_compose, env_file, 'database-management')
|
|
138
144
|
dc_resource('postgres', labels=['infra.tools'], resource_deps=['init-networks'], auto_init=True)
|
|
139
145
|
return
|
|
140
146
|
message = "Shared platform Postgres compose was not materialized at {}".format(postgres_compose)
|
|
@@ -176,7 +182,7 @@ def _load_database_management(should_enable, root_prefix="", env_file=None, writ
|
|
|
176
182
|
messaging_compose = root_prefix + 'services/platform/messaging/docker-compose.yml'
|
|
177
183
|
if _file_exists(messaging_compose):
|
|
178
184
|
debug_log("INFRA: Loading messaging compose from {}".format(messaging_compose))
|
|
179
|
-
_docker_compose(messaging_compose, env_file)
|
|
185
|
+
_docker_compose(messaging_compose, env_file, 'messaging')
|
|
180
186
|
# Register only services present in the project compose file. Minimal
|
|
181
187
|
# NATS-only examples should not need to add an unrelated Redis broker.
|
|
182
188
|
if _compose_has_service(messaging_compose, 'redis'):
|
|
@@ -218,7 +224,7 @@ def _load_infisical(should_enable, root_prefix="", env_file=None):
|
|
|
218
224
|
return
|
|
219
225
|
|
|
220
226
|
print("🔐 Loading Infisical...")
|
|
221
|
-
_docker_compose(compose_file, env_file)
|
|
227
|
+
_docker_compose(compose_file, env_file, 'infisical')
|
|
222
228
|
dc_resource('infisical-db', labels=['infra.tools', 'secrets'], resource_deps=['init-networks'], auto_init=True)
|
|
223
229
|
dc_resource('infisical-redis', labels=['infra.tools', 'secrets'], resource_deps=['init-networks'], auto_init=True)
|
|
224
230
|
dc_resource('infisical', labels=['infra.tools', 'secrets'], resource_deps=['init-networks', 'infisical-db', 'infisical-redis'], auto_init=True)
|
|
@@ -245,7 +251,7 @@ def _load_standalone_traefik(root_prefix, env_file, write_fn):
|
|
|
245
251
|
write_fn(compose_rel, content)
|
|
246
252
|
compose_file = root_prefix + compose_rel if root_prefix else compose_rel
|
|
247
253
|
print("🌐 Loading standalone Traefik from {}".format(compose_file))
|
|
248
|
-
_docker_compose(compose_file, env_file)
|
|
254
|
+
_docker_compose(compose_file, env_file, 'traefik')
|
|
249
255
|
dc_resource(
|
|
250
256
|
"traefik",
|
|
251
257
|
labels=["infra.tools"],
|
|
@@ -281,7 +287,7 @@ def _load_proxy(should_enable, root_prefix="", env_file=None, write_fn=None):
|
|
|
281
287
|
|
|
282
288
|
# Use introvertic/infra traefik configuration (primary)
|
|
283
289
|
# Keep legacy core.yml for network definitions during migration
|
|
284
|
-
_docker_compose(compose_files, env_file)
|
|
290
|
+
_docker_compose(compose_files, env_file, 'proxy')
|
|
285
291
|
|
|
286
292
|
# Traefik depends on core infrastructure being healthy (not just started) to prevent 504s
|
|
287
293
|
dc_resource('traefik',
|
|
@@ -316,7 +322,7 @@ def _load_monitoring(should_enable, root_prefix="", env_file=None):
|
|
|
316
322
|
return
|
|
317
323
|
|
|
318
324
|
print("📊 Loading monitoring services...")
|
|
319
|
-
_docker_compose(root_prefix + 'services/platform/monitoring/docker-compose.yml', env_file)
|
|
325
|
+
_docker_compose(root_prefix + 'services/platform/monitoring/docker-compose.yml', env_file, 'monitoring')
|
|
320
326
|
for svc in ['signoz-frontend', 'signoz-otel-collector', 'signoz-query-service']:
|
|
321
327
|
dc_resource(svc, labels=['observability.apm'], auto_init=True)
|
|
322
328
|
dc_resource('clickhouse', labels=['observability.storage'], auto_init=True)
|
|
@@ -335,7 +341,7 @@ def _load_debezium(should_enable, root_prefix="", env_file=None):
|
|
|
335
341
|
return
|
|
336
342
|
|
|
337
343
|
print("🔄 Loading Enhanced Debezium...")
|
|
338
|
-
_docker_compose(root_prefix + 'services/platform/cdc/docker-compose.enhanced.yml', env_file)
|
|
344
|
+
_docker_compose(root_prefix + 'services/platform/cdc/docker-compose.enhanced.yml', env_file, 'cdc')
|
|
339
345
|
dc_resource('nats-http-bridge', labels=['cdc'], resource_deps=['nats'], auto_init=True)
|
|
340
346
|
dc_resource('debezium-connect', labels=['cdc'], resource_deps=['kafka', 'postgres', 'nats-http-bridge'], auto_init=True)
|
|
341
347
|
dc_resource('enhanced-connector-setup', labels=['cdc'], resource_deps=['debezium-connect', 'postgres', 'nats-http-bridge'], auto_init=False)
|
|
@@ -351,7 +357,7 @@ def _load_elk(should_enable, root_prefix="", env_file=None):
|
|
|
351
357
|
return
|
|
352
358
|
|
|
353
359
|
print("📊 Loading ELK stack...")
|
|
354
|
-
_docker_compose(root_prefix + 'docker/elk-compose.yml', env_file)
|
|
360
|
+
_docker_compose(root_prefix + 'docker/elk-compose.yml', env_file, 'elk')
|
|
355
361
|
dc_resource('elasticsearch', labels=['observability.elk'], auto_init=True)
|
|
356
362
|
dc_resource('logstash', labels=['observability.elk', 'processor', 'logs'], resource_deps=['elasticsearch'], auto_init=True)
|
|
357
363
|
dc_resource('kibana', labels=['observability.elk', 'frontend', 'dashboard'], resource_deps=['elasticsearch'], auto_init=True)
|
package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star
CHANGED
|
@@ -284,7 +284,7 @@ def resolve_defer_start_dependencies(manifest, resource_manifests, all_services_
|
|
|
284
284
|
dep_service_name = all_services_map.get(resolved_dep, {}).get('name', '')
|
|
285
285
|
if not dep_service_name:
|
|
286
286
|
continue
|
|
287
|
-
dependencies.append((resolved_dep, dep_service_name
|
|
287
|
+
dependencies.append((resolved_dep, PlatformDockerConstants.compose_project_name(dep_service_name)))
|
|
288
288
|
return dependencies
|
|
289
289
|
|
|
290
290
|
|
|
@@ -366,8 +366,8 @@ def _build_live_update_rules(res_path, full_res_path, syncs, project_root='', la
|
|
|
366
366
|
|
|
367
367
|
|
|
368
368
|
def _app_image_name(resource_name, res_name):
|
|
369
|
-
"""The image ref docker_build builds and the app compose service declares."""
|
|
370
|
-
return resource_name
|
|
369
|
+
"""The image ref docker_build builds and the app compose service declares (project-scoped; see constants.star)."""
|
|
370
|
+
return PlatformDockerConstants.app_image_name(resource_name, res_name)
|
|
371
371
|
|
|
372
372
|
|
|
373
373
|
def _wake_compose_invocation(project_root, resource_path, res_name, resource_name):
|
|
@@ -670,7 +670,7 @@ def register_compose_resources(resource_config, ctx, runtime_flags, manifest_sta
|
|
|
670
670
|
debug_log("COMPOSE: Proceeding with '{}' - creating compose resources".format(resource_name))
|
|
671
671
|
should_enable = ctx['should_enable']
|
|
672
672
|
write_file = ctx['write_file']
|
|
673
|
-
compose_project_name = resource_name
|
|
673
|
+
compose_project_name = PlatformDockerConstants.compose_project_name(resource_name)
|
|
674
674
|
|
|
675
675
|
resource_manifests = manifest_state['resource_manifests']
|
|
676
676
|
config_gen_resources = manifest_state['config_gen_resources']
|
|
@@ -77,7 +77,7 @@ def _build_dependency_env_lines(manifest):
|
|
|
77
77
|
lines += 'VITE_{dep_key}_API_URL=http://{local_domain}{dep_api_path}\n'.format(
|
|
78
78
|
dep_key=dep_key,
|
|
79
79
|
dep_api_path=dep_api_path,
|
|
80
|
-
local_domain=PlatformDockerConstants.
|
|
80
|
+
local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
|
|
81
81
|
)
|
|
82
82
|
return lines
|
|
83
83
|
|
|
@@ -136,7 +136,8 @@ def _generate_params_env(manifest, backend_manifest=None, write_fn=None):
|
|
|
136
136
|
port = manifest.get('port', BASE_PORT_FRONTEND)
|
|
137
137
|
# Use standardized API path from traefik helpers
|
|
138
138
|
api_path = get_api_path(stack)
|
|
139
|
-
|
|
139
|
+
# Traefik routes /api/<stack>-management only on api.<project>.localhost (see traefik.star), so the URL uses that host.
|
|
140
|
+
api_url = 'http://' + PlatformDockerConstants.API_LOCAL_DOMAIN + api_path
|
|
140
141
|
target_filename = '/' + OUTPUT.AUTOGENERATED_FOLDER + '/.env.backend.autogenerated'
|
|
141
142
|
|
|
142
143
|
# Auth configuration: the same builder Compose uses, so the two outputs cannot disagree. A missing value is None and AuthConfig
|
|
@@ -49,7 +49,7 @@ def generate_frontend_api_client(manifest, write_fn=None):
|
|
|
49
49
|
// Source: engine/topologies/tilt/resources/orchestrator/generators/frontend.star
|
|
50
50
|
// Purpose: Pre-configured API client for {stack} resource
|
|
51
51
|
|
|
52
|
-
import {{ createApiClient }} from '@
|
|
52
|
+
import {{ createApiClient }} from '@{npm_scope}/platform-api-client';
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
55
|
* Pre-configured API client for {stack} resource
|
|
@@ -68,6 +68,7 @@ export const apiClient = createApiClient({{
|
|
|
68
68
|
export default apiClient;
|
|
69
69
|
'''.format(
|
|
70
70
|
stack=stack,
|
|
71
|
+
npm_scope=_NPM_SCOPE,
|
|
71
72
|
api_path=api_path,
|
|
72
73
|
local_domain=PlatformDockerConstants.API_LOCAL_DOMAIN,
|
|
73
74
|
)
|