Files
deepseek-harness/.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.zh.md
2026-07-23 14:31:01 +08:00

4.5 KiB
Raw Blame History

Agent Note: 跨平台串行 CI 参考流程

Status: implemented

English | 中文

问题

拉取请求工作流将必需检查合并到专用的 Linux 和 Windows 作业中。这些作业仍不应成为唯一的完整性判定基准:如果其门禁清单或依赖图存在缺陷,即使必需聚合结果保持绿灯,也可能漏掉部分工作。

将非 Windows 作业的 1 分钟目标和 Windows 作业的 3 分钟目标写成作业超时,会引入另一种失败模式。托管运行器的启动时间和性能会波动,因此即使门禁本身正确,也可能在到达目标时间边界时被取消,来不及输出有用的诊断信息。性能目标需要根据 GitHub 时间戳衡量,而正确性验证需要给门禁留足完成时间。

评审人还需要直接回答一个更简单的问题:在每个选定的托管操作系统上,如果仓库完整的主 Node CI 聚合流程不使用矩阵选择、分片变量或并发门禁,运行结果会怎样?

决策

CI 为拉取请求事件与 master 推送事件赋予互补的职责。拉取请求在 GitHub 标准托管容量上运行合并后的 Linux 和 Windows 作业,以及 Node 兼容性与 Python 契约。向 master 推送时会跳过这些作业,改为运行三个显式参考作业,名称分别为 serial / linuxserial / macosserial / windows。这些作业有意分别重复简短的代码检出、运行时设置和依赖锁定的安装步骤,不用矩阵或可复用工作流把操作系统差异隐藏起来。workflow_dispatch 仅用于运行器基准测试。

每个参考作业均在不设置任何分片选择器的情况下运行 pnpm run check:ciDSH_GATE_CONCURRENCY=1 使顶层聚合每次只执行一个已经就绪的门禁覆盖率、快照回放、built-bin 冒烟测试和发布验证的并发数也设为 1。三种操作系统的作业可以彼此并行但每台主机上的仓库门禁都串行运行且完整执行。Linux 在回放快照前安装 bubblewrapWindows 则在安装采用符号链接的工作区前启用开发人员模式。

master 分支的参考作业仅用于诊断,不参与拉取请求所要求的 all checks passed 结果。拉取请求只运行其必需作业;向 master 推送时只运行三个串行参考作业。系统根据已完成托管作业的时间戳评估性能,并将其报告为测量结果,而不是写成 timeout-minutes 值。

可移植的参考流程使用 GitHub 标准的 ubuntu-latestmacos-latestwindows-2025 标签。依据必需 CI 决策,拉取请求必需作业使用相同的可移植 Linux 和 Windows 容量。更高核心数的托管运行器仍仅用于手动基准测试,因为正确性路径必须无需仓库外部的运行器配置即可运行。

曾考虑的替代方案

  • 将每个超时值设为相应延迟目标:不予采纳,因为调度波动会中止原本正确的执行,并使诊断回归所需的证据无法产生。
  • 仅信任并发执行的主门禁清单:不予采纳,因为调度逻辑与校验逻辑共享实现假设;串行聚合流程是一项独立的完整性检查。
  • 在每个拉取请求上运行串行参考作业:不予采纳,因为这些作业会重复完整的跨平台聚合流程,并为每项改动增加 macOS 工作;必需作业已经执行阻塞性的 Linux 和 Windows 契约。
  • 使用一个操作系统矩阵:不予采纳,因为三个具名作业无需另一套选择机制,就能让参考流程的构成清晰可见。
  • 在大型运行器上运行串行参考流程:不予采纳,因为当组织自有运行器池无法分配作业时,必需 CI 及其独立参考流程都必须仍可运行。

后果

工作流包含重复的设置步骤master 参考运行也可能比优化后的拉取请求路径耗时长得多。这些重复是有意保留的:评审人无需解析矩阵或并发调度器,就能直接检查每种操作系统执行的完整命令。

参考流程可能暴露某些平台上的故障而优化后的阻塞门禁集合尚未声明支持这些平台Windows 尤其如此。这类失败反映了当前的跨平台行为,不应成为削弱或静默跳过该聚合流程的理由。

移除严格的时长超时后,系统会观测到延迟回归,而不是在发生回归时自动取消运行。因此,性能改动必须附带托管环境测量结果,已完成的日志则保留优化最慢通道所需的信息。