77 lines
2.8 KiB
Python
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())
|