Files
cmshoppe/docs/tasks/T-624.md
T

45 lines
3.1 KiB
Markdown
Raw 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.
---
id: T-624
title: 自动升级适配 cmhub 最小发布接口字段
phase: 8
deps: [T-623]
status: DONE
created: 2026-07-13
---
## 问题 / 背景
cmhub `GET /api/v1/client/releases/latest?platform=windows` 的正式响应只提供 `platform` 和 `release` 内的 `version`、`download_url`、`sha256`、`release_notes`、`force_update`、`size_bytes`、`published_at`。客户端当前还把 `package_format`、`updater_protocol`、`min_updater_protocol` 当作服务端自动安装必填字段,导致线上已经提供 hash 和大小后仍被阻断。
## 方案
1. 版本接口只读取并依赖 cmhub 正式响应中已有的发布字段,不要求服务端增加包格式或更新器协议字段。
2. `app/update_installer.py` 从接口结果构造安装元数据时,`package_format` 固定使用客户端 `PACKAGE_FORMAT`,`updater_protocol` 固定使用客户端 `UPDATER_PROTOCOL`,最低协议使用当前兼容默认值。
3. 不降低安装包验证:下载后仍要求包内 `package-manifest.json` 的格式、协议、版本、文件大小和 SHA-256 与客户端支持范围一致;不兼容的包仍在替换程序前拒绝。
4. 同步版本接口、打包和架构文档,明确服务端字段与包内 manifest 字段的职责边界。
## 验收要点
- 与线上示例完全同形、缺少 `package_format` 和协议字段的强制更新响应可以进入自动下载流程。
- 缺少或错误的 `version`、`download_url`、`sha256`、`size_bytes` 仍被阻断;`force_update` 继续决定是否强制。
- 包内 manifest 的包格式或更新器协议不兼容时仍拒绝安装。
- HTTP 外链继续沿用 T-623 的公网地址与完整性校验。
## 测试要求
- 增加 cmhub 正式 JSON 结构的解析、强制门禁和内部安装元数据默认值测试。
- 运行 `python -m ruff check app tests main.py`、`python -m compileall app main.py`、`python -m unittest discover -s tests` 和 `git diff --check`。
## 边界(不改什么)
- 不修改 cmhub 服务端,不要求新增接口字段。
- 不移除大小、整包 SHA-256、安全解压、manifest、事务替换、健康确认或回滚。
- 不修改业务 Tab、CDP、AI、Excel、SQLite 业务数据或蝦皮更新流程。
## 执行记录
- 2026-07-13:`metadata_from_update_info()` 不再要求版本接口提供包格式和更新器协议,统一使用客户端内置 `PACKAGE_FORMAT` / `UPDATER_PROTOCOL`;包内manifest格式、协议、版本和逐文件hash校验保持不变。
- 2026-07-13:新增与 cmhub 线上响应完全同形的解析、强制门禁、内部安装元数据和 GUI HTTP 提示回归测试,并同步版本接口、打包和架构文档。
- 2026-07-13:使用线上接口实测通过:旧版本 `0.1.5` 能识别 `0.1.6` 强制更新,读取 `size_bytes=53318076`,并补齐内部包格式 `cmshopee-portable-v1`、协议 `1`。
- 2026-07-13:为隔离工作区既有提示词/版本号改动,在独立干净 worktree 验证通过:Ruff、Python 3.10 compileall、完整 unittest 438 项及 `git diff --check` 全绿;未执行完整安装包替换和重启。