From 6568d13deb1c9f68818b3a8d237a5bae203957ae Mon Sep 17 00:00:00 2001 From: lyon Date: Sun, 14 Jun 2026 12:07:33 +0800 Subject: [PATCH] fix: use configured boot repo for runner jobs --- src/mgr/kubernetes-runner-job.ts | 2 ++ src/mgr/server.ts | 2 ++ src/runner/k8s-job.ts | 8 +++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/mgr/kubernetes-runner-job.ts b/src/mgr/kubernetes-runner-job.ts index 61e3144..b3ac10f 100644 --- a/src/mgr/kubernetes-runner-job.ts +++ b/src/mgr/kubernetes-runner-job.ts @@ -39,6 +39,7 @@ export interface RunnerJobDefaults { namespace: string; managerUrl: string; image: string; + bootRepoUrl?: string; sourceCommit: string; envIdentity?: string; artifactCatalogFile?: string; @@ -145,6 +146,7 @@ export async function createKubernetesRunnerJob(options: { store: AgentRunStore; commandId, managerUrl, image, + ...(options.defaults.bootRepoUrl ? { bootRepoUrl: options.defaults.bootRepoUrl } : {}), namespace, sourceCommit, transientEnv: renderTransientEnv, diff --git a/src/mgr/server.ts b/src/mgr/server.ts index 54c4bc8..4bd9f37 100644 --- a/src/mgr/server.ts +++ b/src/mgr/server.ts @@ -41,6 +41,7 @@ function runnerJobDefaultsForRequest(defaults: ManagerServerOptions["runnerJobDe namespace, managerUrl: defaults?.managerUrl ?? process.env.AGENTRUN_INTERNAL_MGR_URL ?? `http://agentrun-mgr.${namespace}.svc.cluster.local:8080`, image: defaults?.image ?? process.env.AGENTRUN_RUNNER_IMAGE ?? "", + ...optionalStringRecord("bootRepoUrl", defaults?.bootRepoUrl ?? process.env.AGENTRUN_BOOT_REPO_URL), sourceCommit, ...optionalStringRecord("envIdentity", defaults?.envIdentity ?? process.env.AGENTRUN_ENV_IDENTITY), ...optionalStringRecord("artifactCatalogFile", defaults?.artifactCatalogFile ?? process.env.AGENTRUN_ARTIFACT_CATALOG_FILE), @@ -59,6 +60,7 @@ export interface ManagerServerOptions { namespace?: string; managerUrl?: string; image?: string; + bootRepoUrl?: string; envIdentity?: string; artifactCatalogFile?: string; serviceAccountName?: string; diff --git a/src/runner/k8s-job.ts b/src/runner/k8s-job.ts index 5479b16..4bca254 100644 --- a/src/runner/k8s-job.ts +++ b/src/runner/k8s-job.ts @@ -43,6 +43,7 @@ export interface RunnerJobRenderOptions { commandId: string; managerUrl: string; image: string; + bootRepoUrl?: string; namespace?: string; attemptId?: string; runnerId?: string; @@ -224,6 +225,7 @@ export function renderRunnerJobManifest(options: RunnerJobRenderOptions): { mani function runnerEnv(options: RunnerJobRenderOptions, context: { namespace: string; jobName: string; runnerId: string; attemptId: string; sourceCommit: string; secretRefs: CredentialProjection[]; toolCredentials: ToolCredentialProjection[]; sessionPvc: RunnerSessionPvcOptions | undefined }): JsonRecord[] { const selectedSecret = context.secretRefs.find((item) => item.profile === options.run.backendProfile); const codexHome = selectedSecret?.runtimeMountPath ?? defaultRuntimeHome(options.run.backendProfile); + const bootRepoUrl = optionalString(options.bootRepoUrl) ?? defaultBootRepoUrl; return dedupeEnvVars([ { name: "AGENTRUN_MGR_URL", value: options.managerUrl }, { name: "AGENTRUN_API_KEY", valueFrom: { secretKeyRef: { name: "agentrun-v01-api-key", key: "HWLAB_API_KEY" } } }, @@ -240,7 +242,7 @@ function runnerEnv(options: RunnerJobRenderOptions, context: { namespace: string { name: "AGENTRUN_RESOURCE_BIN_PATH", value: defaultResourceBinPath }, { name: "AGENTRUN_SOURCE_COMMIT", value: context.sourceCommit }, { name: "AGENTRUN_BOOT_COMMIT", value: context.sourceCommit }, - { name: "AGENTRUN_BOOT_REPO_URL", value: defaultBootRepoUrl }, + { name: "AGENTRUN_BOOT_REPO_URL", value: bootRepoUrl }, { name: "AGENTRUN_BOOT_MODE", value: "runner" }, { name: "AGENTRUN_APP_ROOT", value: "/home/agentrun/agentrun-source" }, { name: "AGENTRUN_RUNTIME_NAMESPACE", value: context.namespace }, @@ -464,6 +466,10 @@ function shortHash(value: JsonValue): string { return stableHash(value).slice(0, 12); } +function optionalString(value: unknown): string | undefined { + return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined; +} + function sanitizeVolumeName(value: string): string { const sanitized = value.toLowerCase().replace(/[^a-z0-9-]+/gu, "-").replace(/^-+|-+$/gu, ""); return sanitized.length > 0 ? sanitized.slice(0, 40) : "credential";