feat(update): add verifiable release manifest
This commit is contained in:
+10
-10
@@ -1,6 +1,6 @@
|
||||
# 打包与分发
|
||||
|
||||
> T-524 目标:先把当前 Windows 桌面工具打成免安装 onedir `.exe`,方便第一版交付使用。暂不做自动更新器、安装器、增量补丁或在线升级。
|
||||
> 当前发布仍是免安装 onedir;T-615 已增加自动升级所需的机器可验证清单和发布元数据,但尚不下载或替换客户端程序。
|
||||
|
||||
## 一、打包前提
|
||||
|
||||
@@ -53,7 +53,7 @@ cmshopee\
|
||||
|
||||
## 三、版本号与发布目录
|
||||
|
||||
参考 `D:\chengma\cmbot` 的打包方式,版本控制采用“单一版本源 + 发布目录带版本号”的轻量方案,暂不引入启动器、自动更新或 manifest。
|
||||
版本控制采用“单一版本源 + 发布目录带版本号 + 可验证 manifest”的方案。
|
||||
|
||||
### 3.1 单一版本源
|
||||
|
||||
@@ -86,7 +86,9 @@ release\
|
||||
<PyInstaller 依赖文件和依赖目录>
|
||||
version.txt
|
||||
README.txt
|
||||
package-manifest.json
|
||||
蝦皮圈優化助手0.1.0.zip
|
||||
release-metadata.json
|
||||
```
|
||||
|
||||
说明:
|
||||
@@ -96,6 +98,8 @@ release\
|
||||
- `release\蝦皮圈優化助手<APP_VERSION>.zip` 是交付给用户的便携压缩包。
|
||||
- `version.txt` 使用 ASCII/UTF-8 无 BOM 写入 `APP_VERSION`,用于人工排查和未来更新机制读取。
|
||||
- `README.txt` 用中文写明启动方式、不要放入 `Program Files`、保留 `data\`、升级时覆盖程序文件但不覆盖 `data\`。
|
||||
- `package-manifest.json` 记录包格式、版本、入口、更新器协议、允许替换根项目,以及除清单自身外每个程序文件的规范化路径、字节数和 SHA-256。
|
||||
- `release-metadata.json` 记录整个 zip 的准确字节数和 SHA-256,并提供服务端发布字段模板;它不放进 zip。
|
||||
|
||||
当前 PyInstaller 6.11.1 的 onedir 为集中依赖结构,所以 `release\蝦皮圈優化助手<APP_VERSION>\` 必须包含 `cmshopee.exe` 和 `_internal\`,不得只复制单个 exe。
|
||||
|
||||
@@ -104,7 +108,7 @@ release\
|
||||
1. 修改 `app/version.py` 中的 `APP_VERSION`。
|
||||
2. 运行语法检查和单元测试。
|
||||
3. 运行 `powershell -ExecutionPolicy Bypass -File scripts\build_exe.ps1`。
|
||||
4. 检查 `release\蝦皮圈優化助手<APP_VERSION>\version.txt`、GUI 标题栏版本、压缩包文件名三者一致。
|
||||
4. 检查 `version.txt`、GUI 标题栏、`package-manifest.json`、压缩包文件名和 `release-metadata.json` 的版本一致。
|
||||
5. 在无 Python 环境的 Windows 10/11 机器上解压 `蝦皮圈優化助手<APP_VERSION>.zip` 并启动验证。
|
||||
|
||||
正式发布构建固定使用 Python 3.10。源码在 Python 3.7.9 上曾验证可运行,但发布包不再以 3.7.9 作为打包基线;脚本会直接调用 `py -3.10` 并校验返回版本必须是 `3.10.x`,避免同一个 `APP_VERSION` 在不同 Python 版本下打出不可比对的包。CI 仍可继续使用 Python 3.11 做自动测试。
|
||||
@@ -166,15 +170,11 @@ T-544 第一版目标是**启动时检查是否必须升级**,但仍不做自
|
||||
|
||||
原因:Windows 下运行中的 `cmshopee.exe` 和 PyInstaller onedir 依赖目录很容易出现文件占用、半覆盖失败、权限不足或杀毒拦截。第一版只做“强制提示 + 下载新版 + 用户手动覆盖”,和当前便携包更新方式一致。
|
||||
|
||||
### 3.5 暂不引入自动覆盖升级
|
||||
### 3.5 自动升级发布基础(T-615)
|
||||
|
||||
本阶段不迁移 `cmbot` 的 `Launcher.exe`、`manifest.json`、SHA-256 下载校验、自动替换程序目录或增量补丁。原因:
|
||||
`app/release_manifest.py` 是发布清单与 zip 元数据的唯一生成逻辑。构建脚本按以下顺序执行:组装 release 目录、拒绝用户数据和未知根项目、生成 `package-manifest.json`、压缩 zip、计算 zip hash/大小、生成 `release-metadata.json`。允许的根项目仅为 `cmshopee.exe`、`_internal/`、`version.txt`、`README.txt`、清单和后续独立更新器;明确禁止 `data/` 与 `.cmshopee-update/`。
|
||||
|
||||
- 当前用户已验证“拷贝发布目录到无 Python 环境运行”的第一版交付路径。
|
||||
- `cmshopee` 刚完成 `data\` 数据隔离,先把手动发版和版本号一致性做稳。
|
||||
- 自动更新需要安装根可写、下载暂存、目录切换、回滚和安全校验,属于独立后续任务,不能混入当前打包版本号控制。
|
||||
|
||||
后续如果要做真正自动覆盖升级,再另起任务,参考 `cmbot` 的 `Launcher.exe + app\ + manifest.json + sha256 + version.txt` 设计。
|
||||
T-615 不改变客户端行为:T-544 仍只打开浏览器下载。客户端下载、解压校验、独立进程替换、回滚和重启分别由 T-616 至 T-619 实现。清单预留签名字段,但当前只验证完整性,不宣称已验证发布者身份。
|
||||
|
||||
## 四、绝不打包的本地数据
|
||||
|
||||
|
||||
Reference in New Issue
Block a user