更新
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
# Doctor Workstation 1.3.0 Windows 正式包构建与安全验证结果
|
||||
|
||||
- 执行日期:2026-08-28(Asia/Shanghai)
|
||||
- 工作目录:`D:\web\zyt\app`
|
||||
- 结论:通过。1.3.0 Windows 安装器与 ZIP 已重新构建;冻结媒体/入口门禁、隔离安装/启动/卸载冒烟和真实 Windows helper bootstrap 专项测试全部通过。
|
||||
- 安全边界:未修改生产源码或既有测试,未执行 reset/checkout,未访问现场服务端,也未用 `dist` 中旧的 1.1.0 安装器覆盖真实安装。安装器冒烟显式指定 1.3.0 文件并仅安装到随机临时目录。
|
||||
|
||||
## 最终产物
|
||||
|
||||
| 产物 | 字节数 | SHA-256 |
|
||||
| --- | ---: | --- |
|
||||
| `D:\web\zyt\app\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe` | 162917310 | `E1734C7B5E1619951AF81082FC4578D50BD881B5CD8C7AC7F4E658E8E28B74A7` |
|
||||
| `D:\web\zyt\app\dist\DoctorWorkstation-Windows-x64-1.3.0.zip` | 230820285 | `FAF2D4A68065C1ED528A1D887B5210B44FACBEBBC1CB89729FA3B690D7995CEF` |
|
||||
|
||||
`dist\SHA256SUMS.txt` 与重新计算的两个 SHA-256 完全一致。
|
||||
|
||||
## 命令、退出码与结果
|
||||
|
||||
以下命令均从 PowerShell 执行;未特别注明时工作目录为 `D:\web\zyt\app`。
|
||||
|
||||
### 1. 项目约束与 Trellis 检查
|
||||
|
||||
```powershell
|
||||
Get-Content -LiteralPath 'D:\web\zyt\AGENTS.md' -Raw
|
||||
if (Test-Path -LiteralPath 'D:\web\zyt\.trellis') { Get-ChildItem ... } else { 'NO_TRELLIS' }
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 结果:根 `AGENTS.md` 已完整读取;`D:\web\zyt\.trellis` 不存在,因此没有可继续读取的 `.trellis/workflow.md` 或分层 spec。
|
||||
|
||||
### 2. 初始共享工作树与构建输入只读检查
|
||||
|
||||
```powershell
|
||||
git status --short
|
||||
Get-Content src\doctor_workstation\__init__.py
|
||||
Get-Content scripts\package_windows.ps1
|
||||
Get-Content scripts\smoke_windows_installer.ps1
|
||||
rg -n "bootstrap|ready|helper|windows" tests\test_app_update.py
|
||||
Get-ChildItem dist -File
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 结果:开始时共享工作树已有大量未提交源码/测试变更和研究文件,均视为他人工作并保留;确认构建、安装器冒烟与 helper 测试入口存在。`dist` 内旧 1.1.0/1.2.0 包仅被列出,没有被安装或复制到真实安装位置。
|
||||
|
||||
### 3. 版本源逐行及实际导入检查
|
||||
|
||||
```powershell
|
||||
[System.IO.File]::ReadAllLines((Resolve-Path 'src\doctor_workstation\__init__.py'))
|
||||
.\.venv\Scripts\python.exe -c "import doctor_workstation; print(repr(doctor_workstation.__version__)); print(repr(doctor_workstation.DEBUG_MODE)); print(repr(doctor_workstation.ONLINE_API_BASE_URL))"
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 结果:`__version__ == '1.3.0'`;`DEBUG_MODE is False`;线上 API 基址为 `https://admin.zhenyangtang.com.cn`。
|
||||
|
||||
### 4. 打包脚本内置冻结门禁确认
|
||||
|
||||
```powershell
|
||||
rg -n "runtime_media_smoke|smoke|entry|frozen|media|DoctorWorkstation.exe|--smoke" scripts\package_windows.ps1 scripts\build_windows.ps1 packaging\runtime_media_smoke.py
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 结果:确认 `build_windows.ps1` 在构建后依次执行冻结 Qt 多媒体文件门禁、`--media-smoke-test` 冻结进程门禁和 `--smoke-test` 应用入口门禁。
|
||||
|
||||
### 5. 1.3.0 Windows 正式包重建
|
||||
|
||||
```powershell
|
||||
& .\scripts\package_windows.ps1
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 关键结果:
|
||||
- `uv sync --frozen --extra build` 成功;构建环境使用 Python 3.12.12、PyInstaller 6.22.0。
|
||||
- `npm ci` 成功,视频伴侣生产构建成功(Vite 6.1.1,43 modules transformed)。
|
||||
- PyInstaller onedir 冻结成功,输出 `dist\DoctorWorkstation\DoctorWorkstation.exe`。
|
||||
- `Frozen Qt multimedia file gate passed.`
|
||||
- `Frozen Qt multimedia smoke gate passed (--media-smoke-test, isolated offscreen mode).`
|
||||
- `Frozen application entry smoke gate passed (--smoke-test, isolated offscreen mode).`
|
||||
- 7-Zip 创建 1.3.0 ZIP 成功;Inno Setup 6.7.3 编译 1.3.0 安装器成功。
|
||||
- 脚本打印的最终哈希与本报告“最终产物”一致。
|
||||
- 非阻塞警告:Vite 报告单个 JS chunk 大于 500 kB;PyInstaller 报告一个可选 QML asset downloader 插件二进制不存在及若干 Windows 系统 DLL 静态解析警告。它们未阻断构建,且后续冻结媒体实际进程、应用入口及安装后启动门禁全部通过。
|
||||
|
||||
### 6. 新安装器隔离安装/启动/卸载冒烟
|
||||
|
||||
```powershell
|
||||
& .\scripts\smoke_windows_installer.ps1 -Installer (Resolve-Path -LiteralPath '.\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe').Path
|
||||
```
|
||||
|
||||
- 退出码:`0`(PowerShell 进程退出码)
|
||||
- 结果:`Installer icon/install/start/uninstall smoke test passed.`
|
||||
- 隔离目录:`C:\Users\pc\AppData\Local\Temp\doctor-workstation-installer-smoke-14b72f4137814eea8ede6bc48920f5f5`
|
||||
- 覆盖项:安装器/主程序/卸载器图标一致;安装目录内主程序和卸载器存在;安装后主程序 `--smoke-test` 返回 0;卸载返回 0;卸载后主程序不再存在。
|
||||
- 安全说明:脚本使用随机 `%LOCALAPPDATA%\Temp\doctor-workstation-installer-smoke-*\install`,环境变量、配置与日志均隔离;命令显式锁定 1.3.0 安装器,没有调用 1.1.0 包或现场服务端。
|
||||
|
||||
### 7. 真实 Windows helper bootstrap 专项测试
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe -m pytest 'tests\test_app_update.py::test_inno_helper_executes_bootstrap_with_production_flags' -q
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 结果:`1 passed`(单点输出为 `.`)。该测试未 mock `subprocess.Popen`,会真实启动 PowerShell helper,并由测试生成的 helper 脚本在收到生产参数集后写入 ready 文件;最后断言 ready 文件内容为 `ready`,因此确认生产 flags 下 ready 握手实际产生。
|
||||
|
||||
### 8. 最终版本/生产 flag 复核及独立哈希核验
|
||||
|
||||
```powershell
|
||||
.\.venv\Scripts\python.exe -c "import doctor_workstation; assert doctor_workstation.__version__ == '1.3.0'; assert doctor_workstation.DEBUG_MODE is False"
|
||||
Get-Item .\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe
|
||||
Get-FileHash .\dist\DoctorWorkstation-Setup-Windows-x64-1.3.0.exe -Algorithm SHA256
|
||||
Get-Item .\dist\DoctorWorkstation-Windows-x64-1.3.0.zip
|
||||
Get-FileHash .\dist\DoctorWorkstation-Windows-x64-1.3.0.zip -Algorithm SHA256
|
||||
Compare-Object <重新计算的两行> (Get-Content .\dist\SHA256SUMS.txt)
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 结果:版本和 `DEBUG_MODE` 断言通过;EXE/ZIP 字节数和哈希如“最终产物”所列;`Compare-Object` 无差异。
|
||||
|
||||
### 9. 完成前共享工作树/产物复查
|
||||
|
||||
```powershell
|
||||
git status --short
|
||||
Get-ChildItem .\dist -File | Where-Object { $_.Name -match '1\.3\.0|SHA256SUMS' } | Select-Object Name,Length,LastWriteTime
|
||||
```
|
||||
|
||||
- 退出码:`0`
|
||||
- 结果:1.3.0 EXE、ZIP 和新 `SHA256SUMS.txt` 均存在;本任务未编辑生产源码或测试。完成复查时仍可见共享工作树中的既有 `src/doctor_workstation/services/app_update.py` 修改,未回退或覆盖。
|
||||
|
||||
## 验收结论
|
||||
|
||||
1. 版本/发布开关正确:`1.3.0`、`DEBUG_MODE=False`。
|
||||
2. 正式 EXE/ZIP 重建成功,内置三项冻结门禁全部通过。
|
||||
3. 1.3.0 安装器隔离安装、启动、卸载和残留检查通过。
|
||||
4. 真实 Windows helper bootstrap 在生产 flags 下成功生成 ready 文件。
|
||||
5. 最终大小与 SHA-256 已独立复核,且与 `SHA256SUMS.txt` 一致。
|
||||
6. 未触碰真实安装或现场服务端 1.1.0 包。
|
||||
Reference in New Issue
Block a user