#!/usr/bin/env bash # Compila o Furball Catacombs (Lauren Hetherington, 7DRL 2021, MIT; repositorio laurheth/cat-roguelike) a partir do # commit 348bc3c, como o package.json do autor manda: "npm ci" (package-lock.json dele, hashes de integridade do npm; # webpack 5.24.3, ts-loader 8, TypeScript 4.2.3, roguelike-pumpkin-patch 1.0.0, MIT, da mesma autora) e # "webpack --mode production", com o Node 24.21.0 de artifacts/tools (o webpack 5.24 precisa de # NODE_OPTIONS=--openssl-legacy-provider, por causa do hash md4). # # Mudancas no jogo (furball-catacombs/no-external.patch): sem o Google Fonts; a Ubuntu Mono (Ubuntu Font Licence 1.0) # e a Work Sans (SIL OFL 1.1) vao junto, do google/fonts no commit pinado, via @font-face. # # src/FredGames.Bundler/Builds/build-furball-catacombs.sh # # Saida: artifacts/build/furball-catacombs-348bc3c/furball-catacombs-348bc3c-dist.tar.gz (pasta dist/ = game/ compilada; # igual em dois builds seguidos). set -euo pipefail COMMIT=348bc3cd95c95f0a0bc9716998f756c37792995b SHA256=96501eb41f35678d9280955b109ea7cfe7e34eeb609b3722c85bb1453a2f3391 NODE=24.21.0 GF=https://raw.githubusercontent.com/google/fonts/9862abc066c9b83bf84c3e8ed1fc2d8d48f9bbf0 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/furball-catacombs-${COMMIT:0:7}" cache="$root/artifacts/build/cache" nodebin="$root/artifacts/tools/node-v$NODE/bin" tarball="furball-catacombs-${COMMIT:0:7}.tar.gz" [ -x "$nodebin/node" ] && [ "$("$nodebin/node" -v)" = "v$NODE" ] || { echo "Precisa do Node $NODE em $nodebin." >&2; exit 1; } export PATH="$nodebin:$PATH" fetch() { # url sha256 arquivo [ -f "$cache/$3" ] || curl -fsSL --retry 4 "$1" -o "$cache/$3" echo "$2 $cache/$3" | shasum -a 256 -c - >/dev/null } mkdir -p "$cache" fetch "https://github.com/laurheth/cat-roguelike/archive/$COMMIT.tar.gz" "$SHA256" "$tarball" fetch "$GF/ufl/ubuntumono/UbuntuMono-Regular.ttf" b35dd9d2131d5d83a9b87fe9ad22c6288fa3d17688d43302c14da29812417d63 gf-ubuntumono-UbuntuMono-Regular.ttf fetch "$GF/ufl/ubuntumono/UbuntuMono-Bold.ttf" 11f15c3a6bbd998a8695fdefb3475931c3789aa035d7546f2efe78e83b352f6b gf-ubuntumono-UbuntuMono-Bold.ttf fetch "$GF/ufl/ubuntumono/UFL.txt" 2f0015108d68627bd788d313f529c21ff4da2c2c42a5e1f3883acc83480f9002 gf-ubuntumono-UFL.txt fetch "$GF/ofl/worksans/WorkSans%5Bwght%5D.ttf" f50f61f2ba738e239442d40bf1069adb195c224b6a5a73a581fc2f3ed62a9f63 gf-worksans-WorkSans-var.ttf fetch "$GF/ofl/worksans/OFL.txt" 749aca05078664ce682dce1b1b10096ac397cb088c1a6df4e1bb56f0092a9272 gf-worksans-OFL.txt rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/$tarball" -C "$out/tree" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/furball-catacombs/no-external.patch" cd "$out/tree" export npm_config_cache="$cache/npm-furball-catacombs" npm_config_update_notifier=false npm ci --ignore-scripts --no-audit --no-fund --loglevel=error NODE_OPTIONS=--openssl-legacy-provider npx webpack --mode production 2>&1 | tail -3 [ -f game/script.js ] cp -R game "$out/dist" mkdir -p "$out/dist/fonts" cp "$cache/gf-ubuntumono-UbuntuMono-Regular.ttf" "$out/dist/fonts/UbuntuMono-Regular.ttf" cp "$cache/gf-ubuntumono-UbuntuMono-Bold.ttf" "$out/dist/fonts/UbuntuMono-Bold.ttf" cp "$cache/gf-ubuntumono-UFL.txt" "$out/dist/fonts/UbuntuMono-UFL.txt" cp "$cache/gf-worksans-WorkSans-var.ttf" "$out/dist/fonts/WorkSans.ttf" cp "$cache/gf-worksans-OFL.txt" "$out/dist/fonts/WorkSans-OFL.txt" cp LICENSE "$out/dist/LICENSE" cp node_modules/roguelike-pumpkin-patch/LICENSE "$out/dist/roguelike-pumpkin-patch.LICENSE" find "$out/dist" -exec touch -t 202510300000 {} + ( cd "$out" && 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 > "furball-catacombs-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) cd "$root" rm -rf "$out/tree" ls -l "$out/furball-catacombs-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/furball-catacombs-${COMMIT:0:7}-dist.tar.gz"