Skip to content

v0.3.1 增量:命令退出码

历史增量说明。 本文记录 v0.3.1 开发阶段的单项变化,不代表当前 v0.5.0 能力边界。当前行为以架构说明、安全边界和v0.5.0 发布说明为准。

本补丁只修复 gitlab-agent run(以及 actual-coder run / codingagent run) 的 shell 退出码,不修改 runner 的验证结果结构、allowlist 或 finish gate。

行为

情况 CLI 退出码
子进程成功 0
子进程正常返回 1–255 原值
runner 报告超时 124
POSIX 信号 N(1–127) 128 + N
Windows 大整数状态或不可表示的状态 1
缺失/非法 returncode、启动失败、策略拒绝 非零(通常 1)

JSON 继续保留原始 returncode、timed_out 和输出字段。 不能仅凭 124 区分子程序自己返回 124 与 wrapper 超时,应同时检查 JSON。 高层 finish 原先已检查 runner 结果;此次修复的是独立 CLI 与 shell 脚本的约定。

gitlab-agent run --timeout 30 <workspace-id> -- python -c 'import sys; sys.exit(7)'
echo "$?"  # 7,而不是旧实现的 0

--timeout 放在 workspace ID 前,避免 argparse REMAINDER 将其作为子命令参数。 PowerShell 用 $LASTEXITCODE 读取外部程序退出码。 依赖旧版本“子命令失败但 wrapper 返回 0”的脚本需要调整;这是有意的正确性变更。

测试与边界

新增 9 个 dispatcher 单元测试及 3 个真实子进程/managed workspace 集成测试, 覆盖三个 CLI 名称、失败、超时、信号、超大/非法返回值及错误 JSON。 跨平台完整测试由仓库既有 CI 执行。

此补丁不实现进程树隔离、进程组终止或有界流式输出;这些仍属于后续 runner 加固。