换位置
This commit is contained in:
+30
-34
@@ -24,7 +24,7 @@
|
||||
### 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\main\rg.exe`(与 `main.exe` 同目录);Inno Setup 随 `src\dist\main\*` 递归打入安装包。若未放置 `rg.exe`,打包会提示警告,安装后仍可通过环境变量 **`RG_PATH`** 或系统 PATH 中的 `rg` 使用。
|
||||
`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` 使用。
|
||||
|
||||
---
|
||||
|
||||
@@ -38,13 +38,11 @@ scripts\package\release.bat 1.0.4
|
||||
|
||||
或双击 `scripts\package\release.bat`,按提示输入版本号(如 `1.0.4`)。
|
||||
|
||||
脚本将自动完成:**PyInstaller 打包 main.exe → 更新版本号与全量更新 manifest(并同步到 `src\dist\main\` 内)→ Inno Setup 打安装包 → `--post-build`(复制 version.json 到 `build\output`)→ 清理打包中间产物**。
|
||||
脚本将自动完成:**PyInstaller 打包 ServerManager.exe → 更新版本号与 manifest(并同步到 `src\dist\ServerManager\` 内)→ Inno Setup 打安装包 → `--post-build`(复制 version.json 到 `build\output`,并保存 dist 快照)→ 清理打包中间产物**。
|
||||
|
||||
> 正式发版统一使用 `build/output` 作为发布目录,manifest 和安装包 URL 均指向 `server_manager/build/output/...`。
|
||||
> 正式发版统一使用 `build/output` 作为发布目录,manifest 和安装包 URL 均指向 `https://www.sumi.work/api/software/server-manager/...`。
|
||||
|
||||
**说明**:与 Cursor 一致,**本地与远端均不保存 main_*.exe**。当前结构调整版本不要生成增量包;若以后确认只替换 `main.exe` 足够,先执行 `python scripts/package/release.py x.y.z --with-delta`,再在打包完成后手动执行:
|
||||
`python scripts/package/release.py --post-build --old-exe <上一版 main.exe 的路径>`
|
||||
(上一版 exe 可来自本机备份、CI 构建产物等,由你自行保留。)
|
||||
**增量说明**:默认仍可全量发版。需要减少带宽时使用文件级增量 zip,它会比较上一版 `dist\ServerManager` 快照和新版 dist,只打包新增/变化文件,并保留完整安装包作为回退。
|
||||
|
||||
---
|
||||
|
||||
@@ -52,25 +50,28 @@ scripts\package\release.bat 1.0.4
|
||||
|
||||
### 1. 修改版本号(三处)
|
||||
|
||||
(若使用 `scripts\package\release.bat` 或 `python scripts/package/release.py x.y.z`,请在 **PyInstaller 已成功生成 `src\dist\main\` 之后** 执行,以便 `version.json` 被同步进安装包目录。)
|
||||
(若使用 `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`:固定为 `.../ServerManager_Setup.exe`(安装包不带版本号,每次打包覆盖即可)。
|
||||
- **delta_updates**:结构调整版本保持 `{}`,确保客户端走全量安装包。
|
||||
- **仅当结构未变且确认只替换 main.exe 足够时**,才使用 `--with-delta` 生成「上一版本 → 当前版本」一项,例如从 1.0.3 升到 1.0.4 时:
|
||||
- `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": {
|
||||
"patch_url": "http://.../path=server_manager/build/output/patches/v1.0.3_to_v1.0.4.patch",
|
||||
"new_exe_sha256": ""
|
||||
"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
|
||||
}
|
||||
}
|
||||
```
|
||||
`new_exe_sha256` 在步骤 3 生成补丁后填入。
|
||||
`sha256` / `sizeBytes` 在步骤 3 生成增量包后自动填入。
|
||||
|
||||
---
|
||||
|
||||
@@ -85,7 +86,7 @@ python scripts/package/release.py 1.0.x --notes "说明"
|
||||
python scripts/package/release.py --post-build
|
||||
```
|
||||
|
||||
或仅打安装包(不执行 `scripts\package\release.py`)时用 `scripts\package\pack_all.bat`。得到 `src\dist\main\`、`build\output\ServerManager_Setup.exe`、`build\output\version.json`。
|
||||
或仅打安装包(不执行 `scripts\package\release.py`)时用 `scripts\package\pack_all.bat`。得到 `src\dist\ServerManager\`、`build\output\ServerManager_Setup.exe`、`build\output\version.json`。
|
||||
|
||||
## 自动更新发布路径
|
||||
|
||||
@@ -94,35 +95,30 @@ python scripts/package/release.py --post-build
|
||||
- manifest:`server_manager/build/output/version.json`
|
||||
- 完整安装包:`server_manager/build/output/ServerManager_Setup.exe`
|
||||
|
||||
发布时只需要同步 `build/output/` 到后端存储对应路径。客户端检测到更高版本后会下载 `download_url` / `full_installer_url` 指向的完整安装包并静默安装。
|
||||
发布时上传完整安装包、`version.json`,若启用增量还要上传 `build/output/patches/*.smdelta.zip`。客户端检测到更高版本后会优先下载当前版本对应的增量包;增量校验或应用失败时,回退到 `download_url` / `full_installer_url` 指向的完整安装包。
|
||||
|
||||
---
|
||||
|
||||
### 3. 生成增量补丁(可选)
|
||||
### 3. 生成文件级增量包(可选)
|
||||
|
||||
仅当需要「上一版本 → 当前版本」的增量更新时执行。
|
||||
|
||||
1. **准备上一版本的 main.exe**(本地不自动保存;请自行保留一份,如从 CI 产物或备份拷贝)。
|
||||
1. **准备上一版本 dist 快照**。`release.py --post-build` 会自动保存当前版本到:
|
||||
`build/output/snapshots/ServerManager-x.y.z`
|
||||
|
||||
2. **生成 .patch 并填 SHA256**:打包完成后执行
|
||||
`python scripts/package/release.py --post-build --old-exe <上一版 main.exe 路径>`
|
||||
或手动执行:
|
||||
2. **生成增量 manifest 项**:在 PyInstaller 成功后、Inno Setup 前执行:
|
||||
|
||||
```python
|
||||
import bsdiff4
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
|
||||
old = Path("path/to/main_1.0.3.exe").read_bytes()
|
||||
new = Path("src/dist/main.exe").read_bytes()
|
||||
patch = bsdiff4.diff(old, new)
|
||||
Path("build/output/patches/v1.0.3_to_v1.0.4.patch").write_bytes(patch)
|
||||
|
||||
new_sha = hashlib.sha256(new).hexdigest().lower()
|
||||
print("new_exe_sha256:", new_sha) # 填回 version.json 对应 delta 项
|
||||
```bat
|
||||
python scripts/package/release.py 1.0.4 --with-delta --notes "说明"
|
||||
```
|
||||
|
||||
3. 将 `new_exe_sha256` 填回 **version.json** 的 `delta_updates["1.0.3"].new_exe_sha256`,再复制一次 `version.json` 到 `build\output\`。
|
||||
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` 并回退全量更新。
|
||||
|
||||
---
|
||||
|
||||
@@ -132,7 +128,7 @@ python scripts/package/release.py --post-build
|
||||
|
||||
- `build/output/ServerManager_Setup.exe`
|
||||
- `build/output/version.json`
|
||||
- `build/output/patches/*.patch`(若使用增量更新)
|
||||
- `build/output/patches/*.smdelta.zip`(若使用增量更新)
|
||||
|
||||
用户通过 `update_url` 拉取 `version.json`,客户端更新服务会后台静默准备增量或全量,就绪后弹「重启以更新」。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user