fix: render runtime service declaration env

This commit is contained in:
lyon
2026-06-17 22:30:55 +08:00
parent 854241e117
commit e22b0171eb
2 changed files with 28 additions and 4 deletions
+27 -3
View File
@@ -1,4 +1,5 @@
#!/usr/bin/env node
// SPEC: PJ2026-01060505 Workbench Performance; PJ2026-0106 平台运维
import assert from "node:assert/strict";
import { execFile } from "node:child_process";
import { createHash } from "node:crypto";
@@ -911,21 +912,44 @@ function deployServicesForProfile(deploy, profile) {
const allowed = new Set(serviceIdsForProfile(profile, deploy));
const services = new Map((deploy.services ?? [])
.filter((service) => allowed.has(service.serviceId))
.map((service) => [service.serviceId, cloneJson(service)]));
.map((service) => {
const copy = cloneJson(service);
copy.env = mergeEnvMaps(copy.env, serviceDeclarationEnvForProfile(deploy, profile, service.serviceId));
return [service.serviceId, copy];
}));
const laneServices = isRuntimeLane(profile) && Array.isArray(deploy.lanes?.[profile]?.services)
? deploy.lanes[profile].services
: [];
for (const override of laneServices) {
const existing = services.get(override.serviceId) ?? { serviceId: override.serviceId };
const existing = services.get(override.serviceId) ?? {
serviceId: override.serviceId,
env: serviceDeclarationEnvForProfile(deploy, profile, override.serviceId)
};
services.set(override.serviceId, {
...existing,
...cloneJson(override),
env: { ...(existing.env ?? {}), ...(override.env ?? {}) }
env: mergeEnvMaps(existing.env, override.env)
});
}
return services;
}
function serviceDeclarationEnvForProfile(deploy, profile, serviceId) {
if (!isRuntimeLane(profile)) return {};
const env = deploy?.lanes?.[profile]?.serviceDeclarations?.[serviceId]?.env;
if (!env || typeof env !== "object" || Array.isArray(env)) return {};
return cloneJson(env);
}
function mergeEnvMaps(...values) {
const result = {};
for (const value of values) {
if (!value || typeof value !== "object" || Array.isArray(value)) continue;
Object.assign(result, value);
}
return result;
}
function runtimeNodeIdForProfile(deploy, profile, fallback = "node") {
if (!isRuntimeLane(profile)) return fallback;
const nodeId = deploy?.lanes?.[profile]?.node;