Files
server_manager/RELEASE.md
T
2026-05-22 00:16:08 +08:00

6.4 KiB
Raw Blame History

发布新版本

增量更新采用「无感更新」:后台静默准备,就绪后仅弹一次「重启以更新」。


推荐流程:先本地测试包,再正式发版

  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.exeversion.json 等,用于上传服务器。

说明pack_local_test 不会执行 release.py,也不会修改 version.json / build_installer.iss / src\entrypoints\tk_update_demo.py / scripts\update\tk_updater.py 中的版本号。

ripgreprg.exe

日志检索、匹配高亮与「文件搜索」优先使用 ripgrep。打包前请将 rg.exe 放在 resources\bin\rg.exe(可从 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\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)→ 清理打包中间产物

正式发版统一使用 build/output 作为发布目录,manifest 和安装包 URL 均指向 server_manager/build/output/...

说明:与 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 构建产物等,由你自行保留。)


手动发版(可选)

1. 修改版本号(三处)

(若使用 scripts\package\release.batpython scripts/package/release.py x.y.z,请在 PyInstaller 已成功生成 src\dist\main\ 之后 执行,以便 version.json 被同步进安装包目录。)

  • build_installer.iss#define MyAppVersion "x.y.z" 改为新版本。
  • src\entrypoints\tk_update_demo.py / scripts\update\tk_updater.pyLOCAL_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 时:
      "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": ""
        }
      }
      
      new_exe_sha256 在步骤 3 生成补丁后填入。

2. 打包

scripts\package\release.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\main\build\output\ServerManager_Setup.exebuild\output\version.json

自动更新发布路径

客户端更新入口统一使用 build/output

  • manifestserver_manager/build/output/version.json
  • 完整安装包:server_manager/build/output/ServerManager_Setup.exe

发布时只需要同步 build/output/ 到后端存储对应路径。客户端检测到更高版本后会下载 download_url / full_installer_url 指向的完整安装包并静默安装。


3. 生成增量补丁(可选)

仅当需要「上一版本 → 当前版本」的增量更新时执行。

  1. 准备上一版本的 main.exe(本地不自动保存;请自行保留一份,如从 CI 产物或备份拷贝)。

  2. 生成 .patch 并填 SHA256:打包完成后执行
    python scripts/package/release.py --post-build --old-exe <上一版 main.exe 路径>
    或手动执行:

    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 项
    
  3. new_exe_sha256 填回 version.jsondelta_updates["1.0.3"].new_exe_sha256,再复制一次 version.jsonbuild\output\


4. 发布内容

发布 build\output 目录即可:

  • build/output/ServerManager_Setup.exe
  • build/output/version.json
  • build/output/patches/*.patch(若使用增量更新)

用户通过 update_url 拉取 version.json,客户端更新服务会后台静默准备增量或全量,就绪后弹「重启以更新」。


开发计划

  • 查看服务器日志:支持查看 error/info、角色协议等日志,并支持模糊搜索。