Files
2026-05-22 00:16:08 +08:00

77 lines
2.8 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
r"""
本地测试包:与 scripts/package/pack_local_test.bat 相同流程,适合在 PowerShell / CI 中调用。
不修改版本号,输出到 build\output_local\,不覆盖正式 build\output\
"""
import os
import shutil
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
OUTPUT_LOCAL_DIR = ROOT / "build" / "output_local"
ISCC = os.environ.get(
"INNO_SETUP_ISCC",
r"C:\Program Files (x86)\Inno Setup 6\ISCC.exe",
)
def main() -> int:
if any(arg in ("-h", "--help") for arg in sys.argv[1:]):
print("用法: python scripts/package/pack_local_test.py")
print("生成 build\\output_local\\ServerManager_Setup_LOCAL.exe,不修改正式 build\\output\\")
return 0
build_script = ROOT / "scripts" / "package" / "build.bat"
if not build_script.exists():
print("错误: 未找到 scripts\\package\\build.bat", file=sys.stderr)
return 1
if not Path(ISCC).is_file():
print(f"错误: 未找到 Inno Setup 编译器: {ISCC}", file=sys.stderr)
print("可设置环境变量 INNO_SETUP_ISCC 指向 ISCC.exe", file=sys.stderr)
return 1
print("[1/3] PyInstaller: scripts\\package\\build.bat nopause ...")
# Use cmd /d /c call ... so exit /b propagates.
r = subprocess.run(
["cmd.exe", "/d", "/c", "call", str(build_script), "nopause"],
cwd=str(ROOT),
shell=False,
)
if r.returncode != 0:
print("[失败] PyInstaller 步骤退出码:", r.returncode, file=sys.stderr)
return r.returncode
print("[2/3] Inno Setup: LOCAL_TEST -> build\\output_local\\ ...")
r = subprocess.run(
[ISCC, "/DLOCAL_TEST=1", str(ROOT / "scripts" / "package" / "build_installer.iss")],
cwd=str(ROOT),
)
if r.returncode != 0:
print("[失败] Inno Setup 退出码:", r.returncode, file=sys.stderr)
return r.returncode
out_local = OUTPUT_LOCAL_DIR
out_local.mkdir(parents=True, exist_ok=True)
vj = ROOT / "resources" / "version.json"
if vj.exists():
shutil.copy2(vj, out_local / "version.json")
print("[3/3] 已复制 version.json -> build\\output_local\\")
cleanup_script = ROOT / "scripts" / "package" / "clean_artifacts.py"
if cleanup_script.exists():
print("[cleanup] 删除打包中间产物 ...")
subprocess.run([sys.executable, str(cleanup_script)], cwd=str(ROOT), check=False)
exe = out_local / "ServerManager_Setup_LOCAL.exe"
print()
print("本地测试包:", exe)
print("验证通过后,再执行正式发版(scripts\\package\\release.bat / scripts\\package\\pack_all.bat + scripts\\package\\release.py)。")
return 0
if __name__ == "__main__":
sys.exit(main())