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:
@@ -56,6 +56,22 @@ log "期望版本:$EXPECTED"
|
||||
log "工作目录:$WORK_DIR"
|
||||
mkdir -p "$WORK_DIR"
|
||||
|
||||
# ---- 0. 逐文件核对:发布包 == 打标签的树(T-WIN-025)----
|
||||
# 「发布包里的东西必须等于打标签的那棵树」此前只靠抽查几个文件,必然会漏。
|
||||
# 本步骤对包内**每一个**文件核对:源码/文档比 tag,构建产物(exe/pck)比工作树导出结果。
|
||||
CHECKER="$PROJECT_DIR/build/check-tracked-release.py"
|
||||
if [ -f "$CHECKER" ] && command -v git >/dev/null 2>&1 && [ -f "$TARGET" ]; then
|
||||
TAG="v$(basename "$TARGET" .zip | sed 's/^opendance-windows-v//')"
|
||||
if git -C "$PROJECT_DIR" rev-parse --verify "${TAG}^{commit}" >/dev/null 2>&1; then
|
||||
log "逐文件核对:发布包 == tag $TAG"
|
||||
python3 "$CHECKER" "$TARGET" --tag "$TAG" || fail "发布包与 tag $TAG 不一致"
|
||||
else
|
||||
log "跳过逐文件核对(仓库里没有 tag $TAG;打标签后可手工跑 $CHECKER)"
|
||||
fi
|
||||
else
|
||||
log "跳过逐文件核对(缺 checker / git / 目标是已解压目录)"
|
||||
fi
|
||||
|
||||
# ---- 1. sha256 + 解压 ----
|
||||
if [ -f "$TARGET" ]; then
|
||||
# SHA256SUMS 里是**裸文件名**,所以校验时要把 cwd 切到包所在目录;
|
||||
|
||||
Reference in New Issue
Block a user