"""生成 release 包: - 清理旧的 dist/ - 调用 prepare_dist.py --mode copy - 复制 docker 配置到 dist/ - 打包为 release_YYYYmmdd_HHMMSS.zip """ import subprocess import shutil from pathlib import Path import datetime import sys ROOT = Path(__file__).resolve().parents[1] DIST = ROOT / "dist" LOG = ROOT / "scripts" / "prepare_dist.log" def run_prepare_dist(): cmd = [sys.executable, str(ROOT / "scripts" / "prepare_dist.py"), "--mode", "copy"] print("Running:", " ".join(cmd)) subprocess.check_call(cmd, cwd=str(ROOT)) def clean_dist(): if DIST.exists(): print("Removing old dist/") shutil.rmtree(DIST) def copy_docker_configs(): # copy docker-compose and Dockerfile.opt files if present targets = ["docker-compose.yml", "server/Dockerfile.opt", "web/Dockerfile.opt"] for t in targets: src = ROOT / t if src.exists(): dest = DIST / src.name dest.parent.mkdir(parents=True, exist_ok=True) shutil.copy2(src, dest) print(f"Copied {src} -> {dest}") def make_zip(): ts = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") out = ROOT / f"release_{ts}.zip" print(f"Creating {out}") shutil.make_archive(str(out.with_suffix("")), 'zip', root_dir=str(DIST)) print("Done") return out def main(): clean_dist() run_prepare_dist() copy_docker_configs() out = make_zip() print("Release package:", out) if __name__ == '__main__': main()