# Pecas comuns dos scripts de build dos jogos HTML5 do Liberated Pixel Cup (castle-defense, slime-attack, pixel-quest,
# neverwell-moor). Nao roda sozinho: e lido (source) por build-.sh, que define NAME, TAG, URL, SHA256 e KIND
# (zip ou tgz) antes de chamar lpc_unpack e lpc_pack.
#
# O jogo servido e o fonte do autor, sem minificacao: o script baixa o arquivo original (conferido pelo SHA-256), tira o
# que nao vai (lixo do macOS e o que o /deletions.txt lista), aplica o patch publicado (/.patch), copia
# os arquivos nossos de /files/ por cima e empacota tudo num .tar.gz que sai igual a cada execucao.
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)"
out="$root/artifacts/build/$NAME-$TAG"
cache="$root/artifacts/build/cache"
mkdir -p "$cache"
fetch() { #
if [ ! -f "$cache/$2" ]; then
curl -fsSL -A "Mozilla/5.0" --retry 4 "$1" -o "$cache/$2.partial" && mv "$cache/$2.partial" "$cache/$2"
fi
echo "$3 $cache/$2" | shasum -a 256 -c -
}
lpc_unpack() { # baixa o original e deixa a arvore em $out/tree, ja com as remocoes e o patch aplicados
local file="$NAME-$TAG.$KIND"
fetch "$URL" "$file" "$SHA256"
rm -rf "$out"
mkdir -p "$out/tree"
if [ "$KIND" = zip ]; then
unzip -q "$cache/$file" -d "$out/tree"
else
tar -xzf "$cache/$file" -C "$out/tree" --strip-components 1
fi
rm -rf "$out/tree/__MACOSX"
find "$out/tree" -name .DS_Store -delete
cd "$out/tree"
if [ -f "$here/$NAME/deletions.txt" ]; then
while IFS= read -r path; do [ -n "$path" ] && { [ -e "./$path" ] || { echo "deletions.txt: $path nao existe" >&2; exit 1; }; rm -rf "./$path"; }; done < "$here/$NAME/deletions.txt"
fi
patch -s -p1 < "$here/$NAME/$NAME.patch"
}
lpc_pack() { # copia $NAME/files/ por cima da arvore e gera artifacts/build/-/--dist.tar.gz
cd "$out"
[ -d "$here/$NAME/files" ] && cp -R "$here/$NAME/files/." tree/
mv tree dist
find dist -exec touch -t 202611060000 {} +
find dist -type f | LC_ALL=C sort > files.txt
COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf - -T files.txt | gzip -n -9 > "$NAME-$TAG-dist.tar.gz"
rm files.txt
du -sh dist
rm -rf dist
shasum -a 256 "$out/$NAME-$TAG-dist.tar.gz"
}