#!/usr/bin/env bash # Gera o box-smasher.love do Box Smasher (rollerozxa, GPL-3.0-or-later) a partir do commit 671f600 do # repositorio, com dois patches nossos (publicados junto do fonte): # box-smasher/no-external-links.patch tira o botao que abre o site do autor (openURL); # box-smasher/save-without-thread.patch grava o savegame direto, sem love.thread (o love.js sem # threads nao roda threads e o save nunca seria gravado). # O .love e um zip determinístico (ordem alfabetica, data fixa, deflate) sem .github/, .vscode/, # packaging/ e README.md (mesmo conteudo do packaging/make-game.sh do autor, mais LICENSE). # # src/FredGames.Bundler/Builds/build-box-smasher.sh # # Saida: artifacts/build/box-smasher-671f600/box-smasher.love set -euo pipefail COMMIT=671f60017d8dbe261bdd430d3ee42f6f72b2c698 SHA256=c8c3b78b81e72a16e1eed9e4a10ea53420f87cd8ac21b815505d4ee775fdac9b here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/box-smasher-671f600" cache="$root/artifacts/build/cache" mkdir -p "$cache" tarball="$cache/boxsmasher-671f600.tar.gz" [ -f "$tarball" ] || curl -fsSL "https://github.com/rollerozxa/boxsmasher/archive/$COMMIT.tar.gz" -o "$tarball" echo "$SHA256 $tarball" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$tarball" -C "$out/tree" --strip-components 1 patch -d "$out/tree" -p1 < "$here/box-smasher/no-external-links.patch" patch -d "$out/tree" -p1 < "$here/box-smasher/save-without-thread.patch" rm "$out/tree/savegame/save_thread.lua" python3 -I - "$out/tree" "$out/box-smasher.love" <<'PY' import os, sys, zipfile src, dest = sys.argv[1:] skip = ('.github', '.vscode', 'packaging') names = [] for base, dirs, files in os.walk(src): dirs[:] = [d for d in dirs if not (base == src and d in skip)] for f in files: rel = os.path.relpath(os.path.join(base, f), src).replace(os.sep, '/') if rel in ('README.md', '.gitignore'): continue names.append(rel) with zipfile.ZipFile(dest, 'w', zipfile.ZIP_DEFLATED, compresslevel=9) as z: for rel in sorted(names): info = zipfile.ZipInfo(rel, (1980, 1, 1, 0, 0, 0)) info.compress_type = zipfile.ZIP_DEFLATED info.external_attr = 0o644 << 16 info.create_system = 3 with open(os.path.join(src, rel), 'rb') as fh: z.writestr(info, fh.read(), compresslevel=9) PY shasum -a 256 "$out/box-smasher.love"