fix: parameterize AgentRun base image

This commit is contained in:
Codex
2026-06-13 06:29:13 +00:00
parent 5727fe275c
commit a9c8f4cff2
3 changed files with 33 additions and 1 deletions
+13
View File
@@ -140,6 +140,7 @@ export interface AgentRunImageBuildSpec {
readonly containerfile: string;
readonly repository: string;
readonly network: string;
readonly buildArgs: Readonly<Record<string, string>>;
readonly httpProxy: string | null;
readonly httpsProxy: string | null;
readonly noProxy: readonly string[];
@@ -247,6 +248,7 @@ export function agentRunLaneSummary(spec: AgentRunLaneSpec): Record<string, unkn
containerfile: spec.deployment.manager.imageBuild.containerfile,
repository: spec.deployment.manager.imageBuild.repository,
network: spec.deployment.manager.imageBuild.network,
buildArgNames: Object.keys(spec.deployment.manager.imageBuild.buildArgs).sort(),
proxyConfigured: spec.deployment.manager.imageBuild.httpProxy !== null || spec.deployment.manager.imageBuild.httpsProxy !== null,
noProxyCount: spec.deployment.manager.imageBuild.noProxy.length,
envIdentityFileCount: spec.deployment.manager.imageBuild.envIdentityFiles.length,
@@ -495,6 +497,7 @@ function parseImageBuild(input: Record<string, unknown>, path: string): AgentRun
containerfile: relativePathField(input, "containerfile", path),
repository: stringField(input, "repository", path),
network: stringField(input, "network", path),
buildArgs: stringRecordField(recordField(input, "buildArgs", path), `${path}.buildArgs`),
httpProxy: optionalStringField(input, "httpProxy", path) ?? null,
httpsProxy: optionalStringField(input, "httpsProxy", path) ?? null,
noProxy: stringArrayField(input, "noProxy", path),
@@ -631,6 +634,16 @@ function stringArrayField(obj: Record<string, unknown>, key: string, path: strin
});
}
function stringRecordField(obj: Record<string, unknown>, path: string): Readonly<Record<string, string>> {
const result: Record<string, string> = {};
for (const [key, value] of Object.entries(obj)) {
if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(key)) throw new Error(`${path}.${key} must be a valid build arg name`);
if (typeof value !== "string" || value.trim().length === 0) throw new Error(`${path}.${key} must be a non-empty string`);
result[key] = value.trim();
}
return result;
}
function enumField<T extends string>(obj: Record<string, unknown>, key: string, path: string, values: readonly T[]): T {
const value = stringField(obj, key, path);
if (!values.includes(value as T)) throw new Error(`${path}.${key} must be one of ${values.join(", ")}`);