Files
cmautobuy/docs/task/92-client-windows打包与发布清单基础.md
T

77 lines
3.9 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.
# 92 Client:建立 Windows 打包与发布清单基础
- 类型:需求
- 父级大工单:#1
- 所属 MVP / 版本:#2 / Client 可运行任务闭环(MVP)
- 状态:已完成,用户验收通过
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/92
## 背景与目标
Client 原来只能从源码运行,没有可重复执行的 Windows 打包脚本、统一版本来源和
可校验的发布清单。本任务建立 one-dir 便携发布基础,并保证更新程序文件时不会
覆盖根目录 `data/`。
## 最终方案
- 使用 Python 3.10、PyQt5 和 PyInstaller 6.21.0 构建。
- 根目录 `Launcher.exe` 只启动 `app/CMAutoBuy.exe`,不联网、不下载、不更新文件。
- 主程序使用 PyInstaller one-dir,依赖放在 `app/dependencies/`。
- SQLite 等可写数据始终放在根目录 `data/`,更新包只包含 `app/`。
- 构建生成完整便携包、更新包和 `autobuy——manifest.json`;清单保存版本、文件名、
字节大小和 SHA256。
- 原计划把 Python 辅助代码放进 `client/packaging`,实际发现会遮蔽 PyInstaller
依赖的第三方 `packaging` 包,因此 PowerShell 脚本保留在 `packaging/`,Python
辅助代码改放 `build_tools/`。
## 改了哪些
- `.gitignore`:忽略独立打包环境和发布产物。
- `client/build_client.bat`:增加可双击的简单构建入口。
- `client/packaging/build.ps1`:安装固定依赖、打包、检查关键资源并组装发布物。
- `client/packaging/requirements-build.txt`:固定 PyInstaller 6.21.0。
- `client/build_tools/launcher.py`:实现只负责启动主程序的轻量启动器。
- `client/build_tools/release_manifest.py`:生成发布清单和 SHA256。
- `client/src/version.py`:增加单一软件版本来源,初始版本为 `0.1.0`。
- `client/src/db.py`:打包后把数据目录解析到 `Launcher.exe` 同级的 `data/`。
- `client/test/test_packaging.py`:覆盖启动路径、数据目录和清单校验。
- `docs/client/`:同步更新上手、打包目录、数据路径和发布门禁。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| `client/build_client.bat` 完整构建并正确返回结果 | 通过 |
| 生成 `Launcher.exe + app/ + data/` one-dir 便携目录 | 通过 |
| 生成完整便携包和不含 `data/` 的更新包 | 通过 |
| 清单精确命名为 `autobuy——manifest.json` | 通过 |
| 清单版本、文件名、大小和 SHA256 与压缩包一致 | 通过 |
| 打包程序把数据库写到根目录 `data/client.db` | 通过 |
| Qt 平台插件、Fluent 资源和 `adbutils/binaries/adb.exe` 已收集 | 通过 |
| 未新增联网更新、凭据落盘或真实下单行为 | 通过 |
## 测试
- 执行的命令:
- `C:/Python310/python.exe -m py_compile buyer_main.py src/version.py src/db.py build_tools/launcher.py build_tools/release_manifest.py test/test_packaging.py`
- `$env:QT_QPA_PLATFORM='offscreen'; C:/Python310/python.exe -m pytest test -q`
- `client/build_client.bat`
- 使用 Python `hashlib` 和 `zipfile` 校验清单、压缩包内容及更新包不含 `data/`。
- 解压完整便携包,以 `QT_QPA_PLATFORM=offscreen` 启动 `Launcher.exe`,检查主程序
进程和数据库实际位置。
- 结果:Client 全量测试 `239 passed`;完整构建成功;发布清单校验成功;打包主程序
启动成功;数据库生成在根目录 `data/client.db`,没有生成 `app/data/client.db`。
- **没验证到的部分**:尚未在另一台完全未安装 Python 的 Windows 机器上验证;尚未
验证杀毒软件误报和代码签名;尚未用打包产物连接真实 USB/Wi-Fi Android 设备;
PyInstaller 的发布许可仍需项目负责人按发布门禁最终确认。
## 遗留问题
- 联网检查、下载、安全解压、签名验证和下次启动替换 `app/` 不属于本任务,需要
单独创建更新功能工单。
## 相关提交
- `99252ae` 增加 Client Windows 打包基础