• v0.2.2 ba988f6ca6

    zijunchiang released this 2026-09-17 04:23:00 +08:00 | 12 commits to main since this release

    ⚠️ 本版已被 v0.2.3 取代(建议直接用 v0.2.3):
    v0.2.3 由跨端集成验收抓出并修掉了两个真实缺陷 ——
    CatalogTypes.Motion 未解析服务端一直在发的 thumbnailUrl;
    ApiClient 对所有响应(含模型/GLB/PNG)无条件做 UTF-8 解码,既刷噪声日志又白做一份
    String 拷贝。另修掉测试里写死的契约版本(0.1.0)。

    OpenDance Studio -- Windows 客户端 v0.2.2

    修复:发布包 OpenDance.exe 的版本元数据(Windows「右键 → 属性 → 详细信息」里显示的
    文件版本 / 产品版本)。建议所有用户改用本版;v0.2.1 的包解开后属性页显示的是 0.1.0。

    契约快照不变: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
    (与 opendance-web / opendance-android 逐字节一致)。

    一、缺陷(v0.2.1 实测)

    opendance-windows-v0.2.1.zip → OpenDance.exe → 属性 → 详细信息
        文件版本    0.1.0
        产品版本    0.1.0
    

    产物名、Git tag、README 全都是 v0.2.1 —— 属于不可核对的发布。

    根因:export_presets.cfg 的 application/file_version /
    application/product_version 被硬编码在 0.1.0,而这两个键不会跟随
    project.godot 的 application/config/version 自动更新。
    build/check-version.sh 当时只比 project.godot ↔ project.yaml(两处一致),
    所以静态校验全绿、产物却是错的 —— 漂移发生在没人看的第三个位置。

    证据:

    $ strings -a -el OpenDance.exe | sed -n '3147,3151p'
    FileVersion
    0.1.0
    ProductVersion
    0.1.0
    
    $ VS_FIXEDFILEINFO @0x67b976c
    FileVersion=0.1.0.0  ProductVersion=0.0.0.0
    

    对照:官方模板 windows_release_x86_64.exe 的 FileVersion = 4.7.2,
    说明本机 rcedit 改写是生效的,问题纯粹出在预设的值本身。

    二、修复

    环节 做法
    同步 build/sync-export-version.sh(新增):导出前把版本号写进导出预设,幂等、拒绝非 X.Y.Z
    静态防线 build/check-version.sh:新增对导出预设两个键的校验
    产物防线 build/check-pe-version.sh(新增):直接读 exe 的 PE 版本资源 —— VS_FIXEDFILEINFO(签名 0xFEEF04BD 后 16 字节)+ StringFileInfo(strings -el,属性页显示的就是这两项)。两处都查:实测固定信息里的 ProductVersion 恒为 0.0.0.0
    打包 build/package-release.sh:打包前校验源 exe,解包后再校验包内 exe
    一键验证 build/verify.sh:新增步骤 1/5「产物 PE 版本资源」
    单元测试 tests/test_about.gd:预设两个键必须等于版本号唯一来源

    反向验证:把预设 file_version 改回 0.1.0 → check-version.sh 退出码 1;
    无头测试 753 通过 / 1 失败,失败项正是「导出预设的 file_version 与版本号唯一来源一致」。

    实测 v0.2.2 产物:PE FileVersion 0.2.2.0、StringFileInfo 0.2.2 ——
    版本号在 project.godot / project.yaml / export_presets.cfg / exe 元数据 /
    产物名 / Git tag 六处一致。build/verify.sh 全绿(754 通过 / 0 失败 / 5 跳过)。

    三、附件与解压(重要)

    资产 说明
    opendance-windows-v0.2.2.zip 单个完整包,不分卷:OpenDance.exe + OpenDance.pck(必须同目录)+ THIRD_PARTY.md + README.txt + README.md + contracts/
    SHA256SUMS 裸文件名,下载目录内直接 sha256sum -c SHA256SUMS
    97942f033cdd47ce4efe37b7b98921001bc00e531fae0be7bf6bc6cefcc33232  ← v0.2.2 首次打包(已作废)
    cfd7d675b2ebbb20b7db3e836a41dc7467ac33c856e31b3cfc8436df054e2332  opendance-windows-v0.2.2.zip
    

    解压需要 7-Zip / WinRAR / PeaZip:本包用 LZMA 压缩(26,628,529 B)以绕过
    本站前置 IIS 的 maxAllowedContentLength = 30,000,000 字节上限
    (同内容 deflate 包为 38,248,818 B,会 HTTP 413)。
    Windows 10 资源管理器不支持 LZMA(method 14) 的 zip,双击会报错。
    若该上限已放开、或包改由别处分发,可改用资源管理器直接双击解压的 deflate 包:
    ZIP_METHOD=deflate bash build/package-release.sh 0.2.2。

    四、发布前自检(本版实测输出)

    $ bash build/check-version.sh 0.2.2
      ✓ 版本一致:v0.2.2(project.godot = project.yaml = export_presets.cfg = 期望值)
    
    $ bash build/check-pe-version.sh build/windows/OpenDance.exe 0.2.2
        VS_FIXEDFILEINFO  FileVersion    = 0.2.2.0
        StringFileInfo    FileVersion    = 0.2.2
        StringFileInfo    ProductVersion = 0.2.2
      ✓ PE 版本资源一致:FileVersion 0.2.2.0 / 资源字符串 0.2.2
    

    五、未在本环境验证的部分(诚实声明)

    • 本仓库在 Linux 上导出 Windows 产物,没有 Windows 机器与真机 30 分钟联调:
      包的运行行为仍以「无头 754 项断言 + 180 帧启动检查」为证据;
    • build/export-windows.ps1(Windows 兜底导出路径)未在真实 Windows 上执行过。
    Downloads