repoverse / tools /package-snapkitty.py
SNAPKITTYWEST's picture
October 2026 main drop: mirror from GitHub
3ce1a40 verified
Raw History Blame Contribute Delete
1.79 kB
"""Package the verified native build without machine-specific asset paths."""
from pathlib import Path
import hashlib
import shutil
import zipfile
import argparse
root = Path(__file__).resolve().parents[1]
build = root / "unify/build-game"
parser = argparse.ArgumentParser()
parser.add_argument("--output", default="out/Snapkitty-Windows")
args = parser.parse_args()
out = (root / args.output).resolve()
if out.exists():
raise SystemExit("Package directory already exists; choose a fresh output before packaging.")
required = [build / "unify_game.exe", build / "SDL2.dll"]
for item in required:
if not item.is_file():
raise SystemExit(f"Missing build artifact: {item}")
out.mkdir(parents=True)
for item in required:
shutil.copy2(item, out / item.name)
shutil.copytree(root / "unify/game/assets", out / "assets", ignore=shutil.ignore_patterns("*.usav"))
shutil.copytree(root / "assets/snapkitty", out / "source-artwork")
shutil.copy2(build / "vendor/sdl2/SDL2-2.32.10/LICENSE.txt", out / "SDL2-LICENSE.txt")
shutil.copytree(root / "unify/third_party/lua/doc", out / "licenses/lua")
shutil.copy2(root / "docs/SNAPKITTY-GAME.md", out / "README.md")
(out / "Play.cmd").write_text('@echo off\ncd /d "%~dp0"\nunify_game.exe --assets "%~dp0assets"\n', encoding="ascii")
files = sorted(p for p in out.rglob("*") if p.is_file())
(out / "SHA256SUMS.txt").write_text("".join(hashlib.sha256(p.read_bytes()).hexdigest() + " " + p.relative_to(out).as_posix() + "\n" for p in files), encoding="utf-8")
archive = out.with_suffix(".zip")
with zipfile.ZipFile(archive, "w", zipfile.ZIP_DEFLATED) as z:
for p in sorted(out.rglob("*")):
if p.is_file():
z.write(p, p.relative_to(out.parent))
print(archive)
print(hashlib.sha256(archive.read_bytes()).hexdigest())