Skip to content
FunCoding

Search

Search docs, Skills and MCP

Checks 的尝试、排序与过期

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

This page has not been translated into English yet. The original Chinese version is shown below.

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,否则可能继承旧过期值并再次被扫为超时。