feat: update caserun aggregation and v02 deploy config

This commit is contained in:
Codex Agent
2026-06-08 12:20:34 +08:00
parent d07565c6f1
commit 916838bde4
43 changed files with 1836 additions and 395 deletions
+9 -8
View File
@@ -4,6 +4,8 @@ import { readFile } from "node:fs/promises";
import path from "node:path";
import { fileURLToPath, pathToFileURL } from "node:url";
import { readStructuredFile } from "./src/structured-config.mjs";
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const namespace = "hwlab-dev";
const m3EndpointMap = Object.freeze({
@@ -110,8 +112,7 @@ const expectedInstanceServices = Object.freeze([
]);
async function readJson(relativePath) {
const raw = await readFile(path.join(repoRoot, relativePath), "utf8");
return JSON.parse(raw);
return readStructuredFile(repoRoot, relativePath);
}
function listItems(document) {
@@ -216,14 +217,14 @@ function assertDevK8sInstanceServices(services) {
}
function assertDeployManifestCardinality(deploy) {
assert.equal(deploy.environment, "dev", "deploy/deploy.json environment");
assert.equal(deploy.namespace, namespace, "deploy/deploy.json namespace");
assert.equal(deploy.profiles?.prod?.enabled, false, "deploy/deploy.json prod disabled");
assert.equal(deploy.environment, "dev", "deploy/deploy.yaml environment");
assert.equal(deploy.namespace, namespace, "deploy/deploy.yaml namespace");
assert.equal(deploy.profiles?.prod?.enabled, false, "deploy/deploy.yaml prod disabled");
const byId = new Map((deploy.services ?? []).map((service) => [service.serviceId, service]));
for (const [serviceId, requirement] of Object.entries(expected)) {
const service = byId.get(serviceId);
assert.ok(service, `deploy/deploy.json missing ${serviceId}`);
assert.ok(service, `deploy/deploy.yaml missing ${serviceId}`);
assert.equal(service.namespace, namespace, `${serviceId} deploy namespace`);
assert.equal(service.profile, "dev", `${serviceId} deploy profile`);
assert.equal(service.replicas, requirement.replicas, `${serviceId} deploy replicas`);
@@ -250,7 +251,7 @@ function assertDeployManifestInstanceMappings(deploy) {
const byName = new Map(mappings.map((mapping) => [mapping.name, mapping]));
for (const expectedService of expectedInstanceServices) {
const mapping = byName.get(expectedService.name);
assert.ok(mapping, `deploy/deploy.json missing k3s serviceMapping ${expectedService.name}`);
assert.ok(mapping, `deploy/deploy.yaml missing k3s serviceMapping ${expectedService.name}`);
assert.equal(mapping.serviceId, expectedService.serviceId, `${expectedService.name} serviceId`);
assert.equal(mapping.namespace, namespace, `${expectedService.name} namespace`);
assert.equal(mapping.port, expectedService.port, `${expectedService.name} port`);
@@ -303,7 +304,7 @@ function assertM3RouteConfig(value, label) {
export async function readDevM3CardinalityInputs() {
const [deploy, workloads, services, topology] = await Promise.all([
readJson("deploy/deploy.json"),
readJson("deploy/deploy.yaml"),
readJson("deploy/k8s/base/workloads.yaml"),
readJson("deploy/k8s/base/services.yaml"),
readJson("fixtures/mvp/m3-hardware-loop/topology.json")