mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-28 13:23:03 +00:00
fix(make): test-gui 不再被前序失败短路(门禁曾形同虚设)
## 问题
`make test` 原本是 make 的**依赖链**:
test:
$(GO) test ./...
@$(MAKE) test-gui
@$(MAKE) csrc-test
...
`go test ./...` 一旦 FAIL,make **立即中止** ⇒ 挂在它后面的目标一行都不跑。
实测坐实:`internal/plugin/proc` 偶发 FAIL 时,`make test` 的日志里
**找不到 test-gui 的任何输出** —— 刚接进去的 GUI 判据根本没被执行。
门禁挂上去等于没挂。
## 为什么不能简单用 `-@$(MAKE) test-gui`
`-` 前缀会**吞掉 GUI 判据自己的失败码** —— 判据红了 make 照样绿,
等于给假绿灯。那比短路更糟:它让人以为门禁在生效。
## 做法
全部跑完,最后统一判退出码:
test:
@rc=0; $(GO) test ./... || rc=$$?; \
$(MAKE) test-gui || rc=$$?; \
$(MAKE) csrc-test || rc=$$?; \
$(MAKE) check-csrc || rc=$$?; \
$(MAKE) check-codec-cgo-only || rc=$$?; \
exit $$rc
既保证每一步都跑,也保留每一步自己的失败。
## 验证(注入失败实测,不是推断)
往 `TestKillReturnsEvenWhenGrandchildSurvives` 里塞 `t.Fatal` 制造必然失败:
| 验证项 | 结果 |
| --- | --- |
| `make test` 退出码 | **2**(非 0,失败被上报) |
| proc 包 FAIL | 抓到 |
| **GUI 判据输出** | **仍执行** ← 这是要证明的那件事 |
| csrc-test | 也执行了 |
| 汇总 | ok=43 FAIL=1 |
随后已恢复该测试文件(`git checkout` + 确认 0 处残留 `t.Fatal`),
并复跑该包确认 ok 10.6s。
全绿路径也验过:`make test` 退出码 0、ok=44 FAIL=0、GUI 判据执行。
This commit is contained in:
21
Makefile
21
Makefile
@ -352,12 +352,23 @@ install: build
|
||||
# 不下结论。要稳定门禁就单独跑并重试:
|
||||
# go test ./internal/plugin/proc/ -count=1
|
||||
# ⚠ 别把"单跑通过"当结论——同一命令会交替通过/失败。
|
||||
# ★ test-gui 必须**一定被执行**,但不能被前序失败短路,也不能吞掉自己的失败。
|
||||
#
|
||||
# 问题:`go test ./...` 一旦 FAIL,make 立即中止 ⇒ 挂在它后面的目标
|
||||
# 都不会跑。实测 internal/plugin/proc 偶发 FAIL 时,make test 日志里
|
||||
# **找不到 test-gui 的任何输出** —— 门禁形同虚设。
|
||||
# 但直接用 `-@$(MAKE) test-gui` 又会**吞掉** GUI 判据自己的失败码,
|
||||
# 变成给假绿灯。
|
||||
#
|
||||
# 做法:先无条件跑并把结果存进变量,最后统一决定退出码。
|
||||
# 这样既保证它一定跑,也保留它自己的失败。
|
||||
test:
|
||||
$(GO) test ./...
|
||||
@$(MAKE) test-gui
|
||||
@$(MAKE) csrc-test
|
||||
@$(MAKE) check-csrc
|
||||
@$(MAKE) check-codec-cgo-only
|
||||
@rc=0; $(GO) test ./... || rc=$$?; \
|
||||
$(MAKE) test-gui || rc=$$?; \
|
||||
$(MAKE) csrc-test || rc=$$?; \
|
||||
$(MAKE) check-csrc || rc=$$?; \
|
||||
$(MAKE) check-codec-cgo-only || rc=$$?; \
|
||||
exit $$rc
|
||||
|
||||
# check-codec-cgo-only:钉死「编解码层完全 C 化」这一决定。
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user