test(release): 逐文件核对「发布包 == 打标签的树」(T-WIN-025)
「发布包 == 打标签的树」此前只抽查几个文件,必然会漏。新增 build/check-tracked-release.py(纯标准库,直接读 LZMA zip):对包内**每一个**文件 按路径决定基准 —— OpenDance.exe / OpenDance.pck 比工作树 build/windows/ 的导出结果, 其余文件比 git show <tag>:<路径>;内容不一致 / 包内多余 / 构建产物缺失都会列出并退出 1。 已接入 build/accept-release.sh(第 0 步)与 build/package-release.sh 的提示。 实测(已发布的 v0.2.5 资产重新下载后): 包内 13 个文件:源码/文档 11(与 tag v0.2.5 比)+ 构建产物 2(与工作树导出比) ✓ 逐文件一致:0 处不一致 / 0 处多余 / 0 处缺失 反向验证:把包内 README.txt 追加一行后用 7z 重打成 LZMA zip → ✗ 内容不一致 1 处(README.txt),退出码 1。 踩坑:脚本第一版把 BUILD_OUTPUTS 的键一律当目录前缀(rel[len(prefix):]), 而本仓产物是单文件,拼出 build/windows/OpenDance.exe/ 导致误报「工作树缺失」; 现在区分「以 / 结尾的目录前缀」与「精确文件名」两种键。
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# T-WIN-025:逐文件核对「发布包 == 打标签的树」
|
||||
|
||||
- **状态**: done
|
||||
- **依赖**: T-WIN-018(发布包级验收)
|
||||
- **文档**: v1.6 §5.3 / §7.7
|
||||
- **契约**: 不涉及
|
||||
|
||||
## 为什么需要
|
||||
|
||||
「发布包里的东西必须等于打标签的那棵树」此前只靠**抽查**几个文件
|
||||
(README、`contracts/VERSION`…),而抽查必然会漏。上一轮实测暴露两个认知错误:
|
||||
|
||||
* Web 的发布包**包含** `web-server/test/**`(33 个文件),而我此前以为不含;
|
||||
* 发布包里另有**构建产物**(本仓是 `OpenDance.exe` / `OpenDance.pck`)与 git 无关,
|
||||
必须与工作树的导出结果比。
|
||||
|
||||
## 实现
|
||||
|
||||
`build/check-tracked-release.py`(纯标准库,`.zip` 直接读,LZMA 也支持):
|
||||
对包内**每一个**文件按路径决定比较基准
|
||||
|
||||
| 路径 | 比较基准 |
|
||||
|--|--|
|
||||
| `OpenDance.exe` / `OpenDance.pck`(`BUILD_OUTPUTS`) | 工作树 `build/windows/` 下的导出产物 |
|
||||
| 其余全部 | `git show <tag>:<路径>` |
|
||||
|
||||
任一**内容不一致** / **包内多余**(既不在 git 也不是声明的构建产物)/
|
||||
**构建产物在工作树缺失** 都会列出并以非 0 退出。已接入 `build/accept-release.sh`
|
||||
(第 0 步;目标须是 `.zip` 且仓库里有对应 tag)与 `build/package-release.sh` 的提示。
|
||||
|
||||
## 实测(**已发布**的 v0.2.5 资产重新下载后跑)
|
||||
|
||||
```
|
||||
[accept] 逐文件核对:发布包 == tag v0.2.5
|
||||
包内 13 个文件:源码/文档 11(与 tag 比)、构建产物 2(与工作树构建比)
|
||||
✓ 逐文件一致:0 处不一致 / 0 处多余 / 0 处缺失
|
||||
```
|
||||
|
||||
**反向验证**:把包内 `README.txt` 追加一行后用 7z 重新打成 LZMA zip →
|
||||
|
||||
```
|
||||
✗ 内容不一致 1 处:· README.txt(与 v0.2.5 的内容不一致)
|
||||
✗ 发布包与打标签的树不一致 退出码=1
|
||||
```
|
||||
|
||||
## 踩坑
|
||||
|
||||
脚本第一版把 `BUILD_OUTPUTS` 的键一律当**目录前缀**处理(`rel[len(prefix):]`),
|
||||
而本仓与 Android 的产物是**单文件**(键不带 `/`),于是拼出
|
||||
`build/windows/OpenDance.exe/` 这种路径,误报「构建产物在工作树缺失」。
|
||||
现在区分两种键:以 `/` 结尾的是目录前缀,否则是精确文件名。
|
||||
|
||||
## 与「产物内开发残留检查」的区别
|
||||
|
||||
| 检查 | 回答的问题 |
|
||||
|--|--|
|
||||
| `list-pck.gd`(T-WIN-023) | 产物**内部**(pck 里)有没有混进开发/验收工具 |
|
||||
| 本脚本(T-WIN-025) | 产物**对着仓库**看有没有多、少、被改过的文件 |
|
||||
Reference in New Issue
Block a user