跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Checks 的尝试、排序与过期

发布 CI 状态时保持稳定 key,检查 outcome,避免旧写入覆盖新结果。

Origin 将 CI 结果按 commit 的 check suite/check run 记录。应用使用 installation token 与 checks 权限;镜像仓库不接受这些写入。

标识一次尝试

suite attempt 由 actor、key、externalId、baseSha 区分,run attempt 由 suite、key、externalId 区分。稳定 key 表示同一种检查,每次重试用新的 externalId 保留历史;同 ID/base 的重复上报更新原尝试。

baseSha 不同或省略时产生不同尝试。当前 commit checks 会在同 actor/key 的 suite 中依据有效 run 的 externalUpdatedAt 选择当前尝试,再在 suite 内选择每个 key 的当前 run,不是简单显示所有历史行。

写入排序与返回值

Origin 以毫秒精度 externalUpdatedAt 判断新旧。旧写入仍返回 HTTP 200 和已存结果,不能据状态码宣称刚上报值已生效。

outcome含义
created建立新 run
updated采用本次值
unchanged值及时间都相同
ignored_stale忽略过时写入,返回原存储值

单条读取顶层 outcome/checkRun,批量读取 results[].outcome/checkRun;批量顶层 checkRuns[] 已弃用且不带 outcome。unchanged 与 ignored_stale 都不推进 updatedAt,不能用它区分。

同时间与取消例外

相同 timestamp 一般后写胜出,但 queued/in_progress/failing 不能用同时间重开 completed;存在 rerequestedAt 时,同原时间写入也被视旧。completed+cancelled 不能覆盖已 completed 的 success/neutral/skipped,即使时间更新。

重新请求的 run 保持当前位置并显示 pending,直至拥有应用回应。实现需读回 outcome 和实际值,不把所有 200 统一当作写入成功。

时间与 deadline

externalUpdatedAt/startedAt/completedAt 超前服务器超过 60 秒返回 400,completedAt 不得早于同次 startedAt;deadlineAt 不得超过未来 24 小时。

只有 in_progress/failing 且有 deadline 才会在后台扫描时过期为 timed_out;queued 或无 deadline 不自动过期。扫描并非到点立即发生,约 30 分钟是可变运维设置,不能作为 SLA。

timeout 不改 externalUpdatedAt,新时间上报仍可恢复。若重开 timed-out run,需给新 deadlineAt,否则可能继承旧过期值并再次被扫为超时。