已关闭
test(contracts): GitHub 镜像工作流契约面扩展(触发面已钉,Job/矩阵/SHA 契约待评估) #625
aflyingto创建于  15 天前关闭于  10 天前
aflyingto成员
15 天前 创建

背景

  • PR !595(issue 618)为双端 ci.yml 补了触发面契约钉(validateTriggers 对 .gitcode/workflows/ci.yml 与 .github/workflows/ci.yml 双文件生效),但 GitHub 镜像工作流的其余维度(Job 集合、依赖关系、secret 扫描 job、跨平台矩阵等)仍零契约覆盖——两文件 Job 集不同,无法直接复用 GitCode 侧契约

任务

  • 评估并设计 .github/workflows/ci.yml 的专属契约面(可钉项如:lint/secret-scan/test/build/docker 五 Job 存在性、三平台矩阵、action SHA 固定、test job 的 -race 标志等),沿用 validator + mutation 负例模式
  • 评估覆盖投入与回归防护收益的边界,未覆盖维度在契约测试文件头注释中显式声明

验收标准

  • 镜像工作流的关键不变量有契约执行,mutation 负例证明可抓回归
  • 未覆盖维度有显式声明与理由

影响范围

tests/contracts/(新测试文件或扩展)

来源: PR !595 测试审查 P3(.github/workflows/ci.yml 整体零契约覆盖为先前已存在缺口,触发维度已随 !595 补齐)

likedislike
Aaflyingto成员
15 天前 添加了label:scope/ci, status/triage,type/test
aflyingto成员
12 天前 评论:

验证记录

  • 当前版本或分支: main @ d5a76d5
  • 验证时间: 2026-10-23
  • 复现命令: grep -n "needs:\|runs-on:\|matrix:\|ubuntu-latest\|macos-14\|windows-latest\|-race\|fetch-depth\|permissions:" .github/workflows/ci.yml;grep -rn "github/workflows" tests/contracts/*.go
  • 实际结果: .github/workflows/ci.yml 的结构不变量(lint/secret-scan/test/build/docker 五 Job、test 与 build 的三平台矩阵 [ubuntu-latest, macos-14, windows-latest]、build/docker needs: [test]、test 的 -race 标志、secret-scan 的 fetch-depth: 0 全历史扫描、workflow 级 permissions: contents: read、全部 action SHA 固定)——除 !595 补的触发面外全部无契约执行(grep 证实 tests/contracts 仅 ci_workflow_test.go 读 .gitcode 侧 + 触发 parity 一处读镜像文件);任一维度被静默删改(如砍平台、去 race、松 SHA)无任何自动化信号
  • 预期结果: 镜像工作流的关键不变量有契约执行,mutation 负例证明可抓回归;未覆盖维度显式声明
  • 时间线检查: 本 issue 为 PR !595 测试审查 P3 的登记跟进(2026-10-20 创建),无重复 issue、无先行 PR;!595 已合入触发面钉(validateTriggers 双文件生效),本项补齐其余维度
  • 结论: 继续修复——新建 tests/contracts/mirror_workflow_test.go,沿用 validator + mutation 负例模式钉七项结构不变量(Job 集合、双矩阵、needs、race、secret-scan 全历史、权限、SHA 固定);共享类型扩展(workflowJob 增 Strategy、workflowDocument 增 Permissions)放在既有 ci_workflow_test.go;文件头显式声明未覆盖维度(Job 内步骤序列、env 细节、codecov/npm 冒烟内部、docker 构建参数——属行为细节由 CI 运行本身覆盖,契约只钉静默 YAML 编辑可破坏的结构不变量)
likedislike
Aaflyingto成员
12 天前 添加了label:risk/low, status/verified;删除了label:status/triage
Aaflyingto成员
12 天前 添加了label:status/in-progress
Aaflyingto成员
12 天前 关联了pull request:test(contracts): pin mirror workflow structure beyond triggers
Aaflyingto成员
12 天前 添加了label:status/ready-for-review
aflyingto成员
12 天前 评论:

开发进度

  • 当前状态: ready-for-review(PR !599 已完成自检、四角色独立评审三轮全部 approved、双端 CI 全绿,等待人工最终确认与合并)
  • 根因: 镜像仓是 macOS/Windows 兼容性的唯一 CI 证据源,但结构不变量(除触发面外)零契约执行——砍平台、去 race、松 SHA、弱化 secret 扫描均无信号(详见验证记录)
  • 主要修改: tests/contracts/mirror_workflow_test.go 新文件(十项 validator × 13 mutation 负例 + 未覆盖维度声明)+ 共享类型扩展(Strategy/FailFast/Permissions)+ §5.4 bullet 化同步
  • 影响范围: 纯测试基建 + 规范文档;零生产代码、零工作流文件改动
  • 单元测试: go test ./... 163 包全部通过;13 mutation 负例每项实跑(含 zero-redact 旁路场景)
  • 构建: 无涉(无生产代码)
  • 实际命令验证: 契约测试读真实 .github/workflows/ci.yml 解析校验即验证;mutation 负例即回归证明;初版 validator 控制流 bug 被负例当场抓住(自证)
  • 安全影响: SHA 钉扎/job 权限上限/--redact 精确值钉扎均为安全正向加固;无凭证变化
  • 文档同步: §5.4 bullet 化 + 十项不变量清单 + 同步规则扩围(同 PR 前置履行,文档评审确认)
  • 风险或未覆盖项: risk/medium(tests/ 默认档),合并前需人工最终确认;GitCode 侧 -race 契约对等登记 issue 627;--redact 超长子串理论旁路经评审判定自纠正无实际风险(备忘记录)
  • 关联 PR: !599
likedislike
Aaflyingto成员
10 天前 关闭了 issue
Aaflyingto成员
10 天前 添加了label:status/merged