`build/verify.sh` 跑的是仓库源码(`godot --path .`),交付给用户的是 zip 里的
OpenDance.pck + OpenDance.exe,差别全在「导出」这一步:导出预设漏资源、pck 没
重新生成、版本号没同步、契约快照与 pck 不一致 —— 都只在包里才暴露。
本仓 v0.2.1 的 PE 版本元数据就是这么翻的车。
新增:
* build/probe-release.gd —— 包内运行时探针。用
`godot --headless --main-pack <pck> --script <探针>` 只读包内资源,断言并
quit(0/1):
1) application/config/version == 期望版本(界面版本唯一来源,§11.1);
2) AboutScreen.app_version() == 期望版本(「关于」清单真正显示的值);
3) 主场景可加载、四个 autoload 都在场景树里;
4) 15 个关键资源(UI/模型/场景/网络/评分)在包内都可加载;
5) 包内 Credits.CONTRACT_VERSIONS 与包内 contracts/VERSION 快照逐项一致
(抓「pck 用旧契约构建、快照却拷了新的」)。
* build/accept-release.sh —— 一个 zip(或已解压目录)跑完:sha256 → 解压
(deflate 用 unzip / LZMA 用 7z,并检查没有 .partN 残留)→ 文件清单 →
check-pe-version.sh → 包内 pck 启动 180 帧无 SCRIPT ERROR → 探针。
* package-release.sh 结尾打印下一步验收命令;README 补用法。
实测(对**已发布**的 v0.2.2 资产重新下载后跑):
sha256 OK;PE 版本资源 0.2.2;包内 pck 启动 180 帧无错误;
包内 version=0.2.2;AboutScreen.app_version()=0.2.2;主场景
res://scenes/main.tscn;autoload 齐备;15 项关键资源可加载;
pck 内契约表与包内 contracts/VERSION 一致 → 发布包级验收全部通过。
反向验证:
* 篡改包内 contracts/VERSION 的 rest-api=0.4.0 →
✗ ["rest-api: pck=0.5.0 快照=0.4.0"],退出码 1;
* 期望版本写 0.2.1 对 v0.2.2 的包 → 三处版本断言全失败,退出码 1。
顺带修掉脚本自身一个缺陷:SHA256SUMS 用相对路径 + cd 到包目录后被二次拼接成
dist-release/dist-release/SHA256SUMS,导致 sha256 校验假失败(其余检查仍全绿,
很容易被忽略)。首跑时正是它把「全部通过」变成了失败。
verify.sh 仍全绿(754 通过 / 0 失败 / 5 跳过)。
115 lines
3.6 KiB
YAML
115 lines
3.6 KiB
YAML
project: opendance-windows-client
|
||
version: 0.2.2
|
||
repository: opendance-windows
|
||
default_branch: main
|
||
engine: Godot 4.7.2
|
||
contracts_version:
|
||
rest-api: 0.5.0
|
||
websocket-keypoints: 0.2.0
|
||
data-models: 0.7.0
|
||
skeleton-topology: 0.2.0
|
||
model-formats: 0.5.0
|
||
database: 0.4.0
|
||
|
||
# 契约变更流程(文档 7.2):
|
||
# 任何跨端契约变更必须先在 opendance-web 修改 contracts/ 并提升版本,
|
||
# 再在本项目创建适配任务。本项目内的 contracts/ 只是只读快照。
|
||
|
||
dependencies:
|
||
- name: opendance-web
|
||
kind: rest-api
|
||
contract: contracts/rest-api.yaml
|
||
usage: 曲目/动作/模型目录与关键点序列
|
||
- name: opendance-android
|
||
kind: websocket-consumer
|
||
contract: contracts/websocket-keypoints.md
|
||
usage: 本端为服务端,Android 主动连入推流
|
||
|
||
tasks:
|
||
- id: T-WIN-001
|
||
file: tasks/001-scaffold.md
|
||
scope: Godot 项目骨架
|
||
status: done
|
||
- id: T-WIN-002
|
||
file: tasks/002-rest-client.md
|
||
scope: 调用 Web 服务端 API
|
||
status: done
|
||
- id: T-WIN-003
|
||
file: tasks/003-websocket-receiver.md
|
||
scope: 接收 Android 关键点帧
|
||
status: done
|
||
- id: T-WIN-004
|
||
file: tasks/004-keypoint-deserialize.md
|
||
scope: 239 字节帧反序列化
|
||
status: done
|
||
- id: T-WIN-005
|
||
file: tasks/005-vrm-loader.md
|
||
scope: VRM 模型加载
|
||
status: done
|
||
- id: T-WIN-006
|
||
file: tasks/006-skeleton-retarget.md
|
||
scope: 关键点 -> VRM 骨骼重定向
|
||
status: done
|
||
- id: T-WIN-007
|
||
file: tasks/007-scoring-dtw.md
|
||
scope: DTW 评分引擎
|
||
status: done
|
||
- id: T-WIN-008
|
||
file: tasks/008-game-ui.md
|
||
scope: 主界面 + 游戏界面 + 结算
|
||
status: done
|
||
- id: T-WIN-009
|
||
file: tasks/009-source-display.md
|
||
scope: 模型/动作来源信息展示
|
||
status: done
|
||
- id: T-WIN-010
|
||
file: tasks/010-about-page.md
|
||
scope: 关于页面 + 开源声明
|
||
status: done
|
||
- id: T-WIN-011
|
||
file: tasks/011-build-script.md
|
||
scope: Windows 打包脚本
|
||
status: done
|
||
- id: T-WIN-012
|
||
file: tasks/012-about-version.md
|
||
scope: 「关于」清单展示当前版本号
|
||
status: done
|
||
- id: T-WIN-013
|
||
file: tasks/013-scene-selection.md
|
||
scope: API 升级 rest-api 0.5.0 + 场景选择 + 物理落地
|
||
status: done
|
||
- id: T-WIN-014
|
||
file: tasks/014-full-package.md
|
||
scope: 发布整包(单个 zip + SHA256SUMS,不拆分卷)
|
||
status: done
|
||
- id: T-WIN-016
|
||
file: tasks/016-aabb-transforms.md
|
||
scope: 场景包围盒沿树累乘变换(修复入树前用 global_transform 导致的 ERROR 与范围偏位)
|
||
status: done
|
||
- id: T-WIN-015
|
||
file: tasks/015-keepalive-dedup.md
|
||
scope: 连接保活 / 设备去重 / 状态机(契约 websocket-keypoints 0.2.0,与 T-AND-011 对齐)
|
||
status: done
|
||
- id: T-WIN-017
|
||
file: tasks/017-pe-version.md
|
||
scope: 发布包 exe 的 PE 版本资源(Windows 属性页显示的文件/产品版本)必须等于发布版本
|
||
status: done
|
||
- id: T-WIN-018
|
||
file: tasks/018-release-acceptance.md
|
||
scope: 发布包级端到端验收(读包内 pck:版本号 / 界面显示值 / 契约表 / 资源可加载)
|
||
status: done
|
||
|
||
deliverable:
|
||
artifact: opendance-windows-v0.2.2.zip
|
||
packaging: Godot 导出脚本(Linux 直接导出 / Windows 兜底)
|
||
release_rules: # 文档 §5.7 硬性要求
|
||
- 单个完整包,禁止 .partN 分卷
|
||
- 同时上传 SHA256SUMS(裸文件名,可直接 sha256sum -c)
|
||
includes:
|
||
- OpenDance.exe
|
||
- OpenDance.pck
|
||
- THIRD_PARTY.md
|
||
- README.txt
|
||
- README.md
|
||
- contracts/ # 当前版本契约快照
|