Files
2026-06-09 14:01:20 +08:00

140 lines
6.3 KiB
Markdown
Raw Permalink 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.
# 发布新版本
增量更新采用「无感更新」:后台静默准备,就绪后仅弹一次「重启以更新」。
---
## 推荐流程:先本地测试包,再正式发版
1. **打本地测试包(不改版本号、不覆盖 `build\output\`**
- 双击 `scripts\package\pack_local_test.bat`,或在项目根执行:
`python scripts/package/pack_local_test.py`
- 产物:`build\output_local\ServerManager_Setup_LOCAL.exe`(安装包名为 **ServerManager (本地测试)**,独立 AppId,可与正式版并存)。
- 可选:将根目录 `version.json` 同步到 `build\output_local\`(脚本已自动复制)。
2. **本地安装并验证功能**
- 确认无问题后再进入发版步骤。
3. **正式发版**
- 推荐 **`scripts\package\release.bat 1.0.x`**(先 PyInstaller,再改版本号并同步到 `dist`,再 Inno,最后 `--post-build`)。
- 产物在 **`build\output\`**`ServerManager_Setup.exe``version.json` 等,用于上传服务器。
> **说明**`pack_local_test` **不会**执行 `release.py`,也不会修改 `version.json` / `build_installer.iss` / `src\entrypoints\tk_update_demo.py` / `scripts\update\tk_updater.py` 中的版本号。
### ripgrep`rg.exe`
日志检索、匹配高亮与「文件搜索」优先使用 **ripgrep**。打包前请将 **`rg.exe`** 放在 `resources\bin\rg.exe`(可从 [ripgrep Releases](https://github.com/BurntSushi/ripgrep/releases) 下载 Windows 预编译包)。
`scripts\package\build.bat` 在主程序 PyInstaller 完成后会自动把 `resources\bin\rg.exe` 复制到 `src\dist\ServerManager\rg.exe`(与 `ServerManager.exe` 同目录);Inno Setup 随 `src\dist\ServerManager\*` 递归打入安装包。若未放置 `rg.exe`,打包会提示警告,安装后仍可通过环境变量 **`RG_PATH`** 或系统 PATH 中的 `rg` 使用。
---
## 一键发版(推荐)
在项目根目录执行:
```bat
scripts\package\release.bat 1.0.4
```
或双击 `scripts\package\release.bat`,按提示输入版本号(如 `1.0.4`)。
脚本将自动完成:**PyInstaller 打包 ServerManager.exe → 更新版本号与 manifest(并同步到 `src\dist\ServerManager\` 内)→ Inno Setup 打安装包 → `--post-build`(复制 version.json 到 `build\output`,并保存 dist 快照)→ 清理打包中间产物**。
> 正式发版统一使用 `build/output` 作为发布目录,manifest 和安装包 URL 均指向 `https://www.sumi.work/api/software/server-manager/...`。
**增量说明**:默认仍可全量发版。需要减少带宽时使用文件级增量 zip,它会比较上一版 `dist\ServerManager` 快照和新版 dist,只打包新增/变化文件,并保留完整安装包作为回退。
---
## 手动发版(可选)
### 1. 修改版本号(三处)
(若使用 `scripts\package\release.bat``python scripts/package/release.py x.y.z`,请在 **PyInstaller 已成功生成 `src\dist\ServerManager\` 之后** 执行,以便 `version.json` 被同步进安装包目录。)
- **build_installer.iss**`#define MyAppVersion "x.y.z"` 改为新版本。
- **src\entrypoints\tk_update_demo.py** / **scripts\update\tk_updater.py**`LOCAL_VERSION = "x.y.z"` 改为新版本。
- **version.json**
- `version`:新版本号。
- `release_notes`:本次更新说明。
- `download_url` / `full_installer_url`:固定为 `https://www.sumi.work/api/software/server-manager/update-download`
- **delta_updates**:不使用增量时保持 `{}`;使用文件级增量时,生成「上一版本 → 当前版本」一项,例如从 1.0.3 升到 1.0.4
```json
"delta_updates": {
"1.0.3": {
"type": "file-zip",
"format": "server-manager-file-delta-v1",
"package_url": "https://www.sumi.work/api/software/server-manager/delta-download?from=1.0.3",
"patch_url": "https://www.sumi.work/api/software/server-manager/delta-download?from=1.0.3",
"sha256": "",
"sizeBytes": 0
}
}
```
`sha256` / `sizeBytes` 在步骤 3 生成增量包后自动填入。
---
### 2. 打包
与 `scripts\package\release.bat` 等价的手动顺序:
```bat
scripts\package\build.bat
python scripts/package/release.py 1.0.x --notes "说明"
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" scripts\package\build_installer.iss
python scripts/package/release.py --post-build
```
或仅打安装包(不执行 `scripts\package\release.py`)时用 `scripts\package\pack_all.bat`。得到 `src\dist\ServerManager\`、`build\output\ServerManager_Setup.exe``build\output\version.json`
## 自动更新发布路径
客户端更新入口统一使用 `build/output`
- manifest`server_manager/build/output/version.json`
- 完整安装包:`server_manager/build/output/ServerManager_Setup.exe`
发布时上传完整安装包、`version.json`,若启用增量还要上传 `build/output/patches/*.smdelta.zip`。客户端检测到更高版本后会优先下载当前版本对应的增量包;增量校验或应用失败时,回退到 `download_url` / `full_installer_url` 指向的完整安装包。
---
### 3. 生成文件级增量包(可选)
仅当需要「上一版本 → 当前版本」的增量更新时执行。
1. **准备上一版本 dist 快照**`release.py --post-build` 会自动保存当前版本到:
`build/output/snapshots/ServerManager-x.y.z`
2. **生成增量 manifest 项**:在 PyInstaller 成功后、Inno Setup 前执行:
```bat
python scripts/package/release.py 1.0.4 --with-delta --notes "说明"
```
3. **打安装包后生成 `.smdelta.zip` 并填 SHA256**
```bat
python scripts/package/release.py --post-build --old-dist build/output/snapshots/ServerManager-1.0.3
```
生成产物:`build/output/patches/v1.0.3_to_v1.0.4.smdelta.zip`。如果未提供 `--old-dist` 或生成失败,脚本会清空 `delta_updates` 并回退全量更新。
---
### 4. 发布内容
发布 **build\output** 目录即可:
- `build/output/ServerManager_Setup.exe`
- `build/output/version.json`
- `build/output/patches/*.smdelta.zip`(若使用增量更新)
用户通过 `update_url` 拉取 `version.json`,客户端更新服务会后台静默准备增量或全量,就绪后弹「重启以更新」。
---
## 开发计划
- [ ] **查看服务器日志**:支持查看 error/info、角色协议等日志,并支持模糊搜索。