Files
opendance-windows/tasks/025-tracked-release-check.md
zijunchiang 20c6682202 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/ 导致误报「工作树缺失」;
现在区分「以 / 结尾的目录前缀」与「精确文件名」两种键。
2026-09-18 03:10:15 +08:00

59 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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) | 产物**对着仓库**看有没有多、少、被改过的文件 |