diff --git a/config/agentrun.yaml b/config/agentrun.yaml index 0d26fa24..6429afba 100644 --- a/config/agentrun.yaml +++ b/config/agentrun.yaml @@ -150,6 +150,7 @@ controlPlane: runner: serviceAccount: agentrun-v01-runner jobNamePrefix: agentrun-v01-runner + idleTimeoutMs: 600000 apiKeySecretRef: name: agentrun-v01-api-key key: HWLAB_API_KEY @@ -300,6 +301,7 @@ controlPlane: runner: serviceAccount: agentrun-v02-runner jobNamePrefix: agentrun-v02-runner + idleTimeoutMs: 172800000 apiKeySecretRef: name: agentrun-v02-api-key key: HWLAB_API_KEY diff --git a/scripts/src/agentrun-lanes.ts b/scripts/src/agentrun-lanes.ts index 2235c31c..b96a2076 100644 --- a/scripts/src/agentrun-lanes.ts +++ b/scripts/src/agentrun-lanes.ts @@ -102,6 +102,7 @@ export interface AgentRunLaneSpec { readonly runner: { readonly serviceAccount: string; readonly jobNamePrefix: string; + readonly idleTimeoutMs: number; readonly apiKeySecretRef: { readonly name: string; readonly key: string }; readonly egressProxyUrl: string | null; readonly noProxyExtra: readonly string[]; @@ -284,6 +285,7 @@ export function agentRunLaneSummary(spec: AgentRunLaneSpec): Record, path: string): AgentRun runner: { serviceAccount: stringField(runner, "serviceAccount", `${path}.runner`), jobNamePrefix: stringField(runner, "jobNamePrefix", `${path}.runner`), + idleTimeoutMs: positiveIntegerField(runner, "idleTimeoutMs", `${path}.runner`), apiKeySecretRef: parseSecretRef(recordField(runner, "apiKeySecretRef", `${path}.runner`), `${path}.runner.apiKeySecretRef`), egressProxyUrl: optionalStringField(runner, "egressProxyUrl", `${path}.runner`) ?? null, noProxyExtra: optionalStringArrayField(runner, "noProxyExtra", `${path}.runner`), @@ -527,6 +530,12 @@ function parseDeployment(input: Record, path: string): AgentRun }; } +function positiveIntegerField(input: Record, key: string, path: string): number { + const value = integerField(input, key, path); + if (value <= 0) throw new Error(`${path}.${key} must be a positive integer`); + return value; +} + function parseLocalPostgres(input: Record, path: string): AgentRunLaneSpec["deployment"]["localPostgres"] { const enabled = booleanField(input, "enabled", path); if (!enabled) { diff --git a/scripts/src/agentrun-manifests.ts b/scripts/src/agentrun-manifests.ts index 902d39f7..99f6fed9 100644 --- a/scripts/src/agentrun-manifests.ts +++ b/scripts/src/agentrun-manifests.ts @@ -437,6 +437,7 @@ function managerEnv(spec: AgentRunLaneSpec, sourceCommit: string, imageRef: stri { name: "AGENTRUN_INTERNAL_MGR_URL", value: spec.runtime.internalBaseUrl }, { name: "AGENTRUN_RUNNER_IMAGE", value: imageRef }, { name: "AGENTRUN_RUNNER_SERVICE_ACCOUNT", value: spec.deployment.runner.serviceAccount }, + { name: "AGENTRUN_RUNNER_IDLE_TIMEOUT_MS", value: String(spec.deployment.runner.idleTimeoutMs) }, ...(spec.deployment.runner.egressProxyUrl === null ? [] : [{ name: "AGENTRUN_RUNNER_EGRESS_PROXY_URL", value: spec.deployment.runner.egressProxyUrl }]), ...(spec.deployment.runner.noProxyExtra.length === 0 ? [] : [{ name: "AGENTRUN_RUNNER_NO_PROXY_EXTRA", value: spec.deployment.runner.noProxyExtra.join(",") }]), { name: "AGENTRUN_API_KEY", valueFrom: { secretKeyRef: spec.deployment.manager.apiKeySecretRef } },