#!/usr/bin/env bash # Gera o down-sheep.love do Down Sheep (Alexander Griffith, codigo GPL-3.0-or-later, arte CC BY-SA 4.0) a partir # do commit 2ecda47 do GitLab, com um patch nosso (publicado junto do fonte): # down-sheep/sounds-and-credits.patch troca o som "scratch" (sem origem declarada) por "click" e acrescenta a # arte, o codigo e os efeitos sonoros a tela de creditos. # Como no makefile do autor, o codigo Fennel (src/*.fnl e lib/*.fnl) e compilado para Lua com o compilador # dele (lib/fennel, --compile --correlate); precisa de um `lua` no PATH. Os sons meaw.ogg, hiss.ogg, scratch.ogg # e "F# Beep Scale.wav" ficam de fora (sem origem/licenca declarada e nao usados, exceto o scratch, trocado). # O .love e um zip deterministico (ordem alfabetica, data fixa, deflate). # # src/FredGames.Bundler/Builds/build-down-sheep.sh # # Saida: artifacts/build/down-sheep-2ecda47/down-sheep.love set -euo pipefail COMMIT=2ecda4758d66f4e73a950d9f2e11f4a6e353d4ba SHA256=f1342c119be74f87f30ae305e82006099e2f60032d8f49496c8ab36e1b6ef6f5 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/down-sheep-2ecda47" cache="$root/artifacts/build/cache" mkdir -p "$cache" tarball="$cache/downsheep-2ecda47.tar.gz" [ -f "$tarball" ] || curl -fsSL "https://gitlab.com/alexjgriffith/downsheep/-/archive/2ecda47/downsheep-2ecda47.tar.gz" -o "$tarball" echo "$SHA256 $tarball" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" "$out/game/lib" "$out/game/assets" tar -xzf "$tarball" -C "$out/tree" --strip-components 1 patch -d "$out/tree" -p1 < "$here/down-sheep/sounds-and-credits.patch" cd "$out/tree" for f in src/*.fnl; do lua lib/fennel --compile --correlate "$f" > "$out/game/$(basename "${f%.fnl}").lua" done for f in lib/*.fnl; do lua lib/fennel --compile --correlate "$f" > "$out/game/${f%.fnl}.lua" done cp main.lua conf.lua license.txt "$out/game/" cp lib/*.lua "$out/game/lib/" cp -R assets "$out/game/" rm -f "$out/game/assets/sounds/meaw.ogg" "$out/game/assets/sounds/hiss.ogg" \ "$out/game/assets/sounds/scratch.ogg" "$out/game/assets/sounds/F# Beep Scale.wav" python3 -I - "$out/game" "$out/down-sheep.love" <<'PY' import os, sys, zipfile src, dest = sys.argv[1:] names = [] for base, dirs, files in os.walk(src): for f in files: names.append(os.path.relpath(os.path.join(base, f), src).replace(os.sep, '/')) 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/down-sheep.love"