ci(gates): test-coverage 的触发面补上门禁自身,否则改坏 files: 就没人跑这根闸
上一提交落地后立刻暴露这个口子:那次提交里新钩子显示 Skipped (no files to check), 因为它自己的 files: 不含 .pre-commit-config.yaml —— 也就是说,任何人改坏这一行 正则(哪怕只是打错一个字符),这根闸就永久静默停用,而提交照样全绿。这正是 本仓反对的"会静默失效的门禁",且已有先例处置:lv-conf-sync 与 bsp-err 都把 "门禁自身"写进触发面。 验证方式(不是只测绿的一半): - 改前:pre-commit run test-coverage --files .pre-commit-config.yaml → Skipped - 改后:同一命令 → 实跑并 Passed(约 45 s,28 套) 代价:以后改门禁配置要多等 45 秒——这种提交本来就是低频操作,值。 顺带修两处上一批留下的表述: - 口径 §8 的 YAML 块补同一个 files: 模式(保持与落库那份一致)。 - 该节抬头那句我上次写坏了:JS 里把续行写成独立表达式,导致"…README.md 里只挂 一行索引指向本文"这半句被丢掉,句子断在文档名上。已补全。 - 门禁说明 host-unit-tests.md 的触发面描述同步为"含门禁自身",并写明理由。 自查:doc-links --all --sections-strict 通过;改动文件 U+FFFD = 0、无 CRLF; 零代码改动故未跑 @build。未 push。
This commit is contained in:
@@ -606,9 +606,11 @@ repos:
|
||||
# 是同一类坑);宁可在没装组件的机器上被挡一次、看清 [ENV] 那行提示,也不要一根假绿的闸。
|
||||
# 本机与 CI runner 同一台;实测两份 VS 安装都自带该 exe(口径 §7 第 8 条已按实测更正)。
|
||||
# 口径 / 分母 / 基线 / 盲区详解都在 docs/测试说明/主机单测覆盖率口径.md,本处只留接线事实。
|
||||
# 触发面**含门禁自身**(.pre-commit-config.yaml):不带自身就等于谁改坏这根闸的 files:
|
||||
# 模式,它就再也不跑且无人察觉(同 lv-conf-sync / bsp-err 的既有做法)。
|
||||
- id: test-coverage
|
||||
name: 主机单测覆盖率(增量拦截:已覆盖行只增不减)
|
||||
entry: python scripts/check_test_coverage.py
|
||||
language: system
|
||||
files: ^(App/|Drivers/BSP/|test/host/|scripts/check_test_coverage\.py|scripts/test_coverage_baseline\.json)
|
||||
files: ^(App/|Drivers/BSP/|test/host/|scripts/check_test_coverage\.py|scripts/test_coverage_baseline\.json|\.pre-commit-config\.yaml$)
|
||||
pass_filenames: false
|
||||
|
||||
@@ -192,7 +192,8 @@
|
||||
不会假报回退(首版会,已修:并集口径下子集必然变小,所以 `--module` 子集跑跳过全部回退判定)。
|
||||
真实事件(某次改动真把覆盖行弄少了)仍待观察。
|
||||
|
||||
落库的就是下面这份(`.pre-commit-config.yaml` 第 8 节,与文件里逐字一致,只多不少);`docs/门禁说明/README.md`
|
||||
落库的就是下面这份(`.pre-commit-config.yaml` 第 8 节);`docs/门禁说明/README.md` 里只挂一行索引指向
|
||||
本文,同一事实不在两处维护:
|
||||
|
||||
```yaml
|
||||
- repo: local
|
||||
@@ -201,7 +202,7 @@
|
||||
name: 主机单测覆盖率(增量拦截:已覆盖行只增不减)
|
||||
entry: python scripts/check_test_coverage.py
|
||||
language: system
|
||||
files: '^(App/|Drivers/BSP/|test/host/|scripts/check_test_coverage\.py|scripts/test_coverage_baseline\.json)'
|
||||
files: '^(App/|Drivers/BSP/|test/host/|scripts/check_test_coverage\.py|scripts/test_coverage_baseline\.json|\.pre-commit-config\.yaml$)'
|
||||
pass_filenames: false
|
||||
```
|
||||
|
||||
|
||||
@@ -84,7 +84,9 @@
|
||||
4. **专属钩子不是唯一防线**(2026-10-24 更正,原写"没有对应钩子的模块 = 零回归",如今不成立):上表 16
|
||||
个模块各有专属钩子;仓库另有 12 套(P1 新增)没有专属钩子,改坏了由 `test-coverage` **总闸**兜
|
||||
住——它跑全部 28 套,并守"已覆盖行只增不减"。总闸的触发面是 `App/`、`Drivers/BSP/`、
|
||||
`test/host/`、覆盖率脚本与基线;纯文档改动不触发它(那时确实没有可回归的行为)。
|
||||
`test/host/`、覆盖率脚本与基线,**外加门禁自身**(`.pre-commit-config.yaml`)——不带上自身
|
||||
就等于谁改坏这根闸的 `files:` 模式,它就再也不跑(同 `lv-conf-sync`/`bsp-err` 的既有做法)。
|
||||
纯 UI/文档改动不触发它,那时确实没有可回归的行为。
|
||||
5. 时序与并发不在范围:中断抢占、DMA 完成回调、临界区、真机 tick 抖动都照不到(历史上最贵的
|
||||
几个坑正是这类,见 `docs/问题记录/*_Trap_Records.md`)。
|
||||
6. 断言写的是"作者当时想到的分支":**行 / 函数覆盖有度量了**(`test-coverage` 总闸出
|
||||
|
||||
Reference in New Issue
Block a user