#!/usr/bin/env bash # Compila o PepperTown (jogo ocioso com tema de RPG, de Cong Xu, MIT; Phaser 3.55.2 + webpack 5) a partir do commit d02b6e1 de # github.com/cxong/PepperTown, com o yarn.lock do autor (yarn 1.22.22 --frozen-lockfile, Node 24.21.0). O webpack.production.config.js # do autor usa a API antiga do clean-webpack-plugin/copy-webpack-plugin e nao roda com as versoes do yarn.lock: o patch traz um # webpack.fredygames.config.js equivalente. # # Mudancas (peppertown/peppertown-fredygames.patch), todas por licenca/origem: # - sem a musica (assets/music/overworld.*, "Adorable Ache" de Dragor, CC BY-NC-SA 3.0, nao comercial) nem o codigo que a carrega e toca; # - sem os quatro retratos das lojas (portrait-*.png) e sem a imagem do titulo (title.png, com falas de quadrinho): o README credita # "Dialog by StarNavigator" sem licenca e sem link verificavel, e esses sao os unicos arquivos que poderiam ser isso; o titulo passa a # ser texto com a fonte bitmap do jogo; # - sem as animacoes de impacto break01.png e splash04.png, que o README nao credita; # - CSP no index.html que bloqueia qualquer requisicao fora da pasta. # Ficam as artes e sons creditados no README (CC BY 4.0, CC BY 3.0, CC BY-SA 3.0, OGA-BY 3.0, CC0): creditos no LICENSE.txt do jogo. # # src/FredGames.Bundler/Builds/build-peppertown.sh # # Saida: artifacts/build/peppertown-d02b6e1/{peppertown-d02b6e1-dist.tar.gz,licenses.txt}; o tar.gz tem que sair igual em dois builds. set -euo pipefail COMMIT=d02b6e1a399e3bd39b7b7fe025a55a86472305a2 SHA256=25812017c51517548fc3a770b34d0fe1b92a2775522752dea92a686ad7b6e02e NODE=24.21.0 YARN=1.22.22 YARN_SHA256=c17d3797fb9a9115bf375e31bfd30058cac6bc9c3b8807a3d8cb2094794b51ca here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/peppertown-${COMMIT:0:7}" cache="$root/artifacts/build/cache" nodebin="$root/artifacts/tools/node-v$NODE/bin" [ -x "$nodebin/node" ] && [ "$("$nodebin/node" -v)" = "v$NODE" ] || { echo "Precisa do Node $NODE em $nodebin." >&2; exit 1; } export PATH="$nodebin:$PATH" mkdir -p "$cache" fetch() { if [ ! -f "$cache/$2" ]; then curl -fsSL --retry 4 "$1" -o "$cache/$2.partial" && mv "$cache/$2.partial" "$cache/$2" fi echo "$3 $cache/$2" | shasum -a 256 -c - } fetch "https://github.com/cxong/PepperTown/archive/$COMMIT.tar.gz" "PepperTown-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://registry.npmjs.org/yarn/-/yarn-$YARN.tgz" "yarn-$YARN.tgz" "$YARN_SHA256" rm -rf "$out" mkdir -p "$out/tree" "$out/yarn" tar -xzf "$cache/PepperTown-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 tar -xzf "$cache/yarn-$YARN.tgz" -C "$out/yarn" patch -s -p1 -d "$out/tree" < "$here/peppertown/peppertown-fredygames.patch" yarn() { node "$out/yarn/package/bin/yarn.js" "$@"; } cd "$out/tree" yarn install --frozen-lockfile --ignore-scripts --silent --cache-folder "$cache/yarn-peppertown" 2>/dev/null node_modules/.bin/webpack --config webpack.fredygames.config.js > "$out/webpack.log" 2>&1 || { tail -30 "$out/webpack.log"; exit 1; } [ -s build/js/bundle.js ] && [ -s build/index.html ] [ ! -e build/assets/music ] && ! ls build/assets/images | grep -qE 'portrait|^title|break01|splash04' if grep -qE "overworld" build/js/bundle.js; then echo "bundle ainda cita a musica" >&2; exit 1; fi { echo "== PepperTown (LICENSE.md do repositorio, MIT)" cat LICENSE.md echo echo "== Phaser $(node -p "require('./node_modules/phaser/package.json').version") (entra no bundle; LICENSE.md)" cat node_modules/phaser/LICENSE.md echo } > "$out/licenses.txt" cp -R build "$out/dist" find "$out/dist" -exec touch -t 202611020000 {} + ( 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 > "peppertown-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) du -sh "$out/dist" cd "$out" && rm -rf tree yarn ls -l "$out/peppertown-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/peppertown-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"