From 1912c321606a63fbabb8ee019f2e9a3a16222f23 Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Tue, 9 Jun 2026 00:00:30 +0800 Subject: [PATCH] fix: render lane-scoped metrics sidecar --- scripts/gitops-render.mjs | 10 +++++----- scripts/gitops-render.test.ts | 10 ++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/scripts/gitops-render.mjs b/scripts/gitops-render.mjs index bc2cb958..d0f144e4 100644 --- a/scripts/gitops-render.mjs +++ b/scripts/gitops-render.mjs @@ -922,8 +922,8 @@ function v02MetricsLabels(serviceId) { }; } -function v02MetricsSidecarVolume() { - return { name: "hwlab-metrics-sidecar", configMap: { name: "hwlab-v02-metrics-sidecar" } }; +function v02MetricsSidecarVolume(profile = "v02") { + return { name: "hwlab-metrics-sidecar", configMap: { name: `hwlab-${profile}-metrics-sidecar` } }; } function v02MetricsSidecarAnnotations(metricsSidecarSha256) { @@ -966,7 +966,7 @@ function upsertV02MetricsSidecar(podSpec, options) { podSpec.containers.push(v02MetricsSidecarContainer(options)); podSpec.volumes ??= []; podSpec.volumes = podSpec.volumes.filter((volume) => volume?.name !== "hwlab-metrics-sidecar"); - podSpec.volumes.push(v02MetricsSidecarVolume()); + podSpec.volumes.push(v02MetricsSidecarVolume(options.profile)); } function upsertV02MetricsPort(service) { @@ -1030,7 +1030,7 @@ function transformWorkloads({ workloads, deploy, catalog, source, sourceBranch = label(item.metadata, v02MetricsLabels(templateServiceId)); label(podTemplate.metadata, v02MetricsLabels(templateServiceId)); annotate(podTemplate.metadata, v02MetricsSidecarAnnotations(metricsSidecarSha256)); - upsertV02MetricsSidecar(podTemplate.spec, { deploy, serviceId: templateServiceId, namespace, gitopsTarget }); + upsertV02MetricsSidecar(podTemplate.spec, { deploy, serviceId: templateServiceId, namespace, gitopsTarget, profile }); } if ((item.kind === "Deployment" || item.kind === "StatefulSet") && item.spec?.selector?.matchLabels) { item.spec.selector.matchLabels = { @@ -4368,7 +4368,7 @@ function deepSeekProxyManifest({ profile = "dev", source, sourceBranch = default { name: "moonbridge-scripts", configMap: { name: "hwlab-deepseek-proxy-config" } }, { name: "moonbridge-config", emptyDir: {} }, { name: "moonbridge-data", emptyDir: {} }, - ...(runtimeLane ? [v02MetricsSidecarVolume()] : []) + ...(runtimeLane ? [v02MetricsSidecarVolume(profile)] : []) ] } } diff --git a/scripts/gitops-render.test.ts b/scripts/gitops-render.test.ts index 2c4138c5..23d64687 100644 --- a/scripts/gitops-render.test.ts +++ b/scripts/gitops-render.test.ts @@ -536,6 +536,16 @@ test("v03 render keeps node identity as data instead of generated structure", as const workloads = await readFile(path.join(outDir, "runtime-v03", "workloads.yaml"), "utf8"); const workloadsJson = JSON.parse(workloads); + const deepseekProxy = await readFile(path.join(outDir, "runtime-v03", "deepseek-proxy.yaml"), "utf8"); + const deepseekProxyJson = JSON.parse(deepseekProxy); + const metricsSidecarConfigMaps = [...(workloadsJson.items ?? []), ...(deepseekProxyJson.items ?? [])] + .filter((item) => item.kind === "Deployment") + .flatMap((item) => item.spec?.template?.spec?.volumes ?? []) + .filter((volume) => volume.name === "hwlab-metrics-sidecar") + .map((volume) => volume.configMap?.name); + assert.ok(metricsSidecarConfigMaps.length >= 5, "expected v03 observable workloads to mount metrics sidecar config"); + assert.deepEqual([...new Set(metricsSidecarConfigMaps)], ["hwlab-v03-metrics-sidecar"]); + assert.doesNotMatch(`${workloads}\n${deepseekProxy}`, /hwlab-v02-metrics-sidecar/u); const agentRunNodeEnv = (workloadsJson.items ?? []) .flatMap((item) => collectContainersFromItem(item)) .flatMap((container) => container.env ?? [])