• v0.7.4 d1c0dd6e7a

    zijunchiang released this 2026-09-17 03:52:34 +08:00 | 5 commits to main since this release

    OpenDance Studio -- Web 管理服务端 v0.7.4

    场景功能的真正根因修复:Scene 实体没有被注册进 ENTITIES
    (v0.7.3 的降级修复 + 本版的实体注册修复,两者缺一不可)。

    契约无变更(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)。

    根因:No metadata for "Scene" was found.

    部署 v0.7.3 后,/health 的 scenes.error 给出了决定性线索:

    "scenes": { "available": false, "error": "No metadata for \"Scene\" was found." }
    

    src/entities/index.ts 一直是:

    export const ENTITIES = [Asset, Song, Motion, CharacterModel, ReviewRecord];  // ← 少了 Scene
    

    TypeORM 的 DataSource 只按 ENTITIES 注册 metadata。漏注册的后果非常隐蔽:

    环节 表现
    启动 完全正常(DI 图可解析、/health 正常、migrationsPending 0)
    迁移 正常 —— AddScenes 已执行,scenes 表其实是建好的
    第一次查该实体 抛 No metadata for "Scene" was found.
    连带影响 /api/scenes、/api/catalog/export、/api/catalog/version、/api/reviews?status=pending 全部 500 → 客户端拉不到任何目录、管理端待审列表打不开

    也就是说:此前"数据库缺 scenes 表"的判断是错的(那是我的误判)。
    v0.7.3 的降级修复与诊断脚本因此仍然必要 —— 它们把"场景坏了"限制成"场景不可用",
    而不是让整站不可用(部署 v0.7.3 后 catalog/export 与待审列表已恢复 200)。

    修复

    ENTITIES 加入 Scene 并导出。

    新增静态防线:test/entities-registry.spec.ts(4 项)

    • 扫描 src/entities/*.entity.ts 里所有 @Entity() 类,逐一与 ENTITIES 对账
      (漏一个即失败;已做反向验证:把 Scene 从 ENTITIES 移除,测试立刻失败);
    • 检查 ENTITIES 无重复、无多余项;
    • 核对 AddScenes 迁移文件确实存在(迁移文件缺失时 showMigrations() 仍会显示
      "0 个待执行",这是另一个隐蔽的静默不一致)。

    这类"漏注册"既过得了 tsc,也过得了启动冒烟(应用能启动),只能靠静态核对兜住。

    校验

    • npm run verify 通过:contracts:check(六项一致 + 35 条路由一致 + 版本一致)、
      tsc --noEmit、23 文件 / 285 项测试、nest build、启动冒烟;
    • 发布产物解压后 npm ci --omit=dev + node dist/main.js 实测打印「应用版本 v0.7.4」。

    部署与部署后自检

    curl -fLO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.4/opendance-web-v0.7.4.tar.gz
    curl -fLO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.4/SHA256SUMS
    sha256sum -c SHA256SUMS
    tar -xzf opendance-web-v0.7.4.tar.gz && cd opendance-web-v0.7.4
    sudo bash deploy/install.sh
    
    # 1) 版本可核对
    curl -s http://<服务器地址>:3000/health | grep -o '"version":"[^"]*"'        # 期望 0.7.4
    # 2) 场景子系统应恢复可用(不再有 No metadata)
    curl -s http://<服务器地址>:3000/health | python3 -m json.tool | grep -A3 '"scenes"'   # 期望 available: true
    # 3) 场景接口不再 500
    curl -s -o /dev/null -w '%{http_code}\n' http://<服务器地址>:3000/api/scenes            # 期望 200
    # 4) 表/列实际状态(默认只读)
    cd <APP_DIR>/web-server && set -a && . ../deploy/.env && set +a
    node scripts/diagnose-scenes.mjs
    
    # 5) 数据库端到端验收(歌曲 → 动作 → 预处理 → 模型 → 审核 → 场景 → 目录导出)
    API_BASE=http://<服务器地址>:3000 node web-server/test/smoke.mjs
    

    <服务器地址> 是你们自己部署的服务端地址(部署方决定),不是被脱敏的域名。

    交付物校验和(可核对)

    e03e28f3ab483291c4b030a428ace9100bddcd1ab5d40010ab29a4a9500d1987  opendance-web-v0.7.4.tar.gz
    

    下载后:

    curl -fLO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.4/SHA256SUMS
    curl -fLO https://gitea.kasugano.cn/zijunchiang/opendance-web/releases/download/v0.7.4/opendance-web-v0.7.4.tar.gz
    sha256sum -c SHA256SUMS     # 期望 OK
    
    Downloads