fix: persist code agent workspace
This commit is contained in:
@@ -179,6 +179,9 @@ const cloudApiWorkloadEnv = getWorkloadEnv(k8sWorkloads, "hwlab-cloud-api");
|
||||
cloudApiWorkloadEnv.__volumeMounts = cloudApiContainer?.volumeMounts ?? [];
|
||||
cloudApiWorkloadEnv.__volumes = cloudApiWorkload?.spec?.template?.spec?.volumes ?? [];
|
||||
cloudApiWorkloadEnv.__podContainers = cloudApiWorkload?.spec?.template?.spec?.containers ?? [];
|
||||
cloudApiWorkloadEnv.__initContainers = cloudApiWorkload?.spec?.template?.spec?.initContainers ?? [];
|
||||
cloudApiWorkloadEnv.__deploymentStrategy = cloudApiWorkload?.spec?.strategy ?? null;
|
||||
cloudApiWorkloadEnv.__workspacePvc = getWorkload(k8sWorkloads, DEV_CODE_AGENT_PROVIDER_CONTRACT.workspace.claimName);
|
||||
const patchPanelWorkloadEnv = getWorkloadEnv(k8sWorkloads, "hwlab-patch-panel");
|
||||
assert.equal(deployManifest.health.path, "/health/live", "deploy health source path");
|
||||
assert.equal(deployManifest.publicEndpoints.frontend.url, "http://74.48.78.17:16666", "deploy frontend endpoint");
|
||||
@@ -324,6 +327,7 @@ function assertCodeAgentProviderWorkloadContract(env) {
|
||||
assertNoProxyIncludes(env.NO_PROXY?.value, contract.noProxyRequired, "cloud-api workload NO_PROXY contract");
|
||||
assertNoProxyIncludes(env.no_proxy?.value, contract.noProxyRequired, "cloud-api workload no_proxy contract");
|
||||
assertCodexHomeMountContract(env, contract);
|
||||
assertCodeAgentWorkspaceContract(env, contract);
|
||||
assertCodexApiForwarderContract(env, contract);
|
||||
assert.notEqual(
|
||||
env.HWLAB_CODE_AGENT_OPENAI_BASE_URL?.value,
|
||||
@@ -403,6 +407,38 @@ function assertCodexHomeMountContract(env, contract) {
|
||||
);
|
||||
}
|
||||
|
||||
function assertCodeAgentWorkspaceContract(env, contract) {
|
||||
const workspace = contract.workspace;
|
||||
const volumeMounts = env.__volumeMounts ?? [];
|
||||
const volumes = env.__volumes ?? [];
|
||||
const initContainers = env.__initContainers ?? [];
|
||||
const pvc = env.__workspacePvc;
|
||||
assert.ok(
|
||||
volumeMounts.some((entry) => entry.name === workspace.volumeName && entry.mountPath === workspace.mountPath && entry.readOnly !== true),
|
||||
"cloud-api workload Code Agent workspace writable mount"
|
||||
);
|
||||
assert.ok(
|
||||
volumes.some((entry) => entry.name === workspace.volumeName && entry.persistentVolumeClaim?.claimName === workspace.claimName),
|
||||
"cloud-api workload Code Agent workspace PVC volume"
|
||||
);
|
||||
assert.equal(pvc?.kind, "PersistentVolumeClaim", "Code Agent workspace PVC resource");
|
||||
assert.equal(pvc?.metadata?.name, workspace.claimName, "Code Agent workspace PVC name");
|
||||
assert.ok((pvc?.spec?.accessModes ?? []).includes(workspace.accessMode), "Code Agent workspace PVC uses ReadWriteOnce");
|
||||
assert.equal(pvc?.spec?.resources?.requests?.storage, workspace.storage, "Code Agent workspace PVC requested storage");
|
||||
const initContainer = initContainers.find((entry) => entry.name === workspace.initContainerName);
|
||||
assert.ok(initContainer, "cloud-api workload initializes persistent Code Agent workspace");
|
||||
assert.ok(
|
||||
(initContainer?.volumeMounts ?? []).some((entry) => entry.name === workspace.volumeName && entry.mountPath === workspace.mountPath),
|
||||
"Code Agent workspace init container mounts the persistent workspace"
|
||||
);
|
||||
const initCommand = [...(initContainer?.command ?? []), ...(initContainer?.args ?? [])].join("\n");
|
||||
assert.ok(
|
||||
initCommand.includes(workspace.sourcePath) && initCommand.includes(workspace.path) && initCommand.includes(workspace.initMarker),
|
||||
"Code Agent workspace init container uses copy-once /app bootstrap"
|
||||
);
|
||||
assert.equal(env.__deploymentStrategy?.type, workspace.rolloutStrategy, "cloud-api uses Recreate rollout for single-writer workspace PVC");
|
||||
}
|
||||
|
||||
function assertM3PatchPanelDeployContract(manifestService, workloadEnv) {
|
||||
const route = {
|
||||
fromResourceId: "res_boxsimu_1",
|
||||
|
||||
Reference in New Issue
Block a user