52 lines
3.5 KiB
TypeScript
52 lines
3.5 KiB
TypeScript
import { runOnce, type RunnerOnceOptions } from "./run-once.js";
|
|
import { AgentRunError, errorToJson } from "../common/errors.js";
|
|
import { failureKindFromError } from "./manager-api.js";
|
|
import { isBackendProfile } from "../common/backend-profiles.js";
|
|
|
|
const managerUrl = process.env.AGENTRUN_MGR_URL;
|
|
const runId = process.env.AGENTRUN_RUN_ID;
|
|
if (!managerUrl || !runId) {
|
|
console.log(JSON.stringify({ ok: false, failureKind: "schema-invalid", message: "AGENTRUN_MGR_URL and AGENTRUN_RUN_ID are required" }));
|
|
process.exit(2);
|
|
}
|
|
|
|
const options: RunnerOnceOptions = {
|
|
managerUrl,
|
|
runId,
|
|
};
|
|
if (process.env.AGENTRUN_COMMAND_ID) options.commandId = process.env.AGENTRUN_COMMAND_ID;
|
|
if (process.env.AGENTRUN_RUNNER_JOB_ID) options.runnerJobId = process.env.AGENTRUN_RUNNER_JOB_ID;
|
|
if (process.env.AGENTRUN_ATTEMPT_ID) options.attemptId = process.env.AGENTRUN_ATTEMPT_ID;
|
|
if (process.env.AGENTRUN_RUNNER_ID) options.runnerId = process.env.AGENTRUN_RUNNER_ID;
|
|
if (process.env.AGENTRUN_BACKEND_PROFILE) {
|
|
if (!isBackendProfile(process.env.AGENTRUN_BACKEND_PROFILE)) {
|
|
console.log(JSON.stringify({ ok: false, failureKind: "schema-invalid", message: `AGENTRUN_BACKEND_PROFILE ${process.env.AGENTRUN_BACKEND_PROFILE} is not supported in v0.1` }));
|
|
process.exit(2);
|
|
}
|
|
options.backendProfile = process.env.AGENTRUN_BACKEND_PROFILE;
|
|
}
|
|
if (process.env.AGENTRUN_K8S_JOB_NAME) options.placement = "kubernetes-job";
|
|
if (process.env.AGENTRUN_SOURCE_COMMIT) options.sourceCommit = process.env.AGENTRUN_SOURCE_COMMIT;
|
|
if (process.env.AGENTRUN_K8S_JOB_NAME) options.jobName = process.env.AGENTRUN_K8S_JOB_NAME;
|
|
if (process.env.HOSTNAME) options.podName = process.env.HOSTNAME;
|
|
if (process.env.AGENTRUN_LOG_PATH) options.logPath = process.env.AGENTRUN_LOG_PATH;
|
|
if (process.env.AGENTRUN_CODEX_COMMAND) options.codexCommand = process.env.AGENTRUN_CODEX_COMMAND;
|
|
if (process.env.AGENTRUN_CODEX_ARGS) options.codexArgs = JSON.parse(process.env.AGENTRUN_CODEX_ARGS) as string[];
|
|
if (process.env.CODEX_HOME) options.codexHome = process.env.CODEX_HOME;
|
|
if (process.env.AGENTRUN_RUNNER_IDLE_TIMEOUT_MS) options.idleTimeoutMs = Number(process.env.AGENTRUN_RUNNER_IDLE_TIMEOUT_MS);
|
|
if (process.env.AGENTRUN_RUNNER_POLL_INTERVAL_MS) options.pollIntervalMs = Number(process.env.AGENTRUN_RUNNER_POLL_INTERVAL_MS);
|
|
if (process.env.AGENTRUN_RUNNER_CLAIM_RETRY_TIMEOUT_MS) options.claimRetryTimeoutMs = Number(process.env.AGENTRUN_RUNNER_CLAIM_RETRY_TIMEOUT_MS);
|
|
if (process.env.AGENTRUN_RUNNER_CLAIM_RETRY_INTERVAL_MS) options.claimRetryIntervalMs = Number(process.env.AGENTRUN_RUNNER_CLAIM_RETRY_INTERVAL_MS);
|
|
if (process.env.AGENTRUN_BACKEND_RETRY_MAX_ATTEMPTS) options.backendRetryMaxAttempts = Number(process.env.AGENTRUN_BACKEND_RETRY_MAX_ATTEMPTS);
|
|
if (process.env.AGENTRUN_BACKEND_RETRY_INITIAL_BACKOFF_MS) options.backendRetryInitialBackoffMs = Number(process.env.AGENTRUN_BACKEND_RETRY_INITIAL_BACKOFF_MS);
|
|
if (process.env.AGENTRUN_BACKEND_RETRY_MAX_BACKOFF_MS) options.backendRetryMaxBackoffMs = Number(process.env.AGENTRUN_BACKEND_RETRY_MAX_BACKOFF_MS);
|
|
if (process.env.AGENTRUN_RUNNER_ONE_SHOT === "1" || process.env.AGENTRUN_RUNNER_ONE_SHOT === "true") options.oneShot = true;
|
|
try {
|
|
const result = await runOnce(options);
|
|
console.log(JSON.stringify({ ok: true, data: result }));
|
|
} catch (error) {
|
|
const failureKind = failureKindFromError(error);
|
|
console.log(JSON.stringify({ ok: false, failureKind, message: error instanceof Error ? error.message : String(error), error: errorToJson(error) }));
|
|
process.exit(error instanceof AgentRunError && error.httpStatus >= 1 && error.httpStatus <= 255 ? error.httpStatus : 1);
|
|
}
|