Merge pull request #1436 from pikasTech/fix/1422-render-service-declaration-env
fix: render runtime service declaration env
This commit is contained in:
+1
-1
@@ -291,7 +291,7 @@ lanes:
|
|||||||
- skills/hwlab-agent-runtime/
|
- skills/hwlab-agent-runtime/
|
||||||
env:
|
env:
|
||||||
HWLAB_METRICS_NAMESPACE: hwlab-v03
|
HWLAB_METRICS_NAMESPACE: hwlab-v03
|
||||||
HWLAB_OBSERVABILITY_CONFIG_REVISION: PJ2026-01060505-20260617
|
HWLAB_OBSERVABILITY_CONFIG_REVISION: PJ2026-01060505-20260617-render-env
|
||||||
observable: true
|
observable: true
|
||||||
hwlab-user-billing:
|
hwlab-user-billing:
|
||||||
runtimeKind: go-service
|
runtimeKind: go-service
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
// SPEC: PJ2026-01060505 Workbench Performance; PJ2026-0106 平台运维
|
||||||
import assert from "node:assert/strict";
|
import assert from "node:assert/strict";
|
||||||
import { execFile } from "node:child_process";
|
import { execFile } from "node:child_process";
|
||||||
import { createHash } from "node:crypto";
|
import { createHash } from "node:crypto";
|
||||||
@@ -911,21 +912,44 @@ function deployServicesForProfile(deploy, profile) {
|
|||||||
const allowed = new Set(serviceIdsForProfile(profile, deploy));
|
const allowed = new Set(serviceIdsForProfile(profile, deploy));
|
||||||
const services = new Map((deploy.services ?? [])
|
const services = new Map((deploy.services ?? [])
|
||||||
.filter((service) => allowed.has(service.serviceId))
|
.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)
|
const laneServices = isRuntimeLane(profile) && Array.isArray(deploy.lanes?.[profile]?.services)
|
||||||
? deploy.lanes[profile].services
|
? deploy.lanes[profile].services
|
||||||
: [];
|
: [];
|
||||||
for (const override of laneServices) {
|
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, {
|
services.set(override.serviceId, {
|
||||||
...existing,
|
...existing,
|
||||||
...cloneJson(override),
|
...cloneJson(override),
|
||||||
env: { ...(existing.env ?? {}), ...(override.env ?? {}) }
|
env: mergeEnvMaps(existing.env, override.env)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return services;
|
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") {
|
function runtimeNodeIdForProfile(deploy, profile, fallback = "node") {
|
||||||
if (!isRuntimeLane(profile)) return fallback;
|
if (!isRuntimeLane(profile)) return fallback;
|
||||||
const nodeId = deploy?.lanes?.[profile]?.node;
|
const nodeId = deploy?.lanes?.[profile]?.node;
|
||||||
|
|||||||
Reference in New Issue
Block a user