#!/usr/bin/env bash # Monta o Snakelike (roguelike de cobra de Lee Reilly, MIT; Phaser 3.90.0, MIT) a partir do commit ca8ddac de # github.com/leereilly/snakelike. Nao ha etapa de build no projeto: o index.html carregava o Phaser do cdnjs, e # aqui o phaser.min.js vem do pacote phaser@3.90.0 do npm (byte a byte igual ao do cdnjs). # # Mudancas no jogo (snakelike/snakelike-fredygames.patch): o placar online (snakelike-leaderboard.vercel.app) # vira um placar local, guardado no localStorage do navegador; o Phaser e local; uma CSP bloqueia qualquer # conexao fora da propria origem. # # src/FredGames.Bundler/Builds/build-snakelike.sh # # Saida: artifacts/build/snakelike-ca8ddac/{snakelike-ca8ddac-dist.tar.gz,licenses.txt}; o tar.gz (pasta dist/) sai # igual em dois builds seguidos. set -euo pipefail COMMIT=ca8ddacf31632f186e17bb44196cc3bfc7db7731 SHA256=4b765752a0fd0b8b7f7cf2bc9940a19560d3758ff6403b9209bc847135ea9767 PHASER=3.90.0 PHASER_SHA256=c4e3a8da498ab94aa8859c7a32cb89140d94bfd95d769bee36a98cdef1bea6e6 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/snakelike-${COMMIT:0:7}" cache="$root/artifacts/build/cache" 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/leereilly/snakelike/archive/$COMMIT.tar.gz" "snakelike-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://registry.npmjs.org/phaser/-/phaser-$PHASER.tgz" "phaser-$PHASER.tgz" "$PHASER_SHA256" rm -rf "$out" mkdir -p "$out/tree" "$out/dist" "$out/phaser" tar -xzf "$cache/snakelike-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 tar -xzf "$cache/phaser-$PHASER.tgz" -C "$out/phaser" --strip-components 1 package/dist/phaser.min.js package/LICENSE.md patch -s -p1 -d "$out/tree" < "$here/snakelike/snakelike-fredygames.patch" cp "$out/tree/index.html" "$out/tree/game.js" "$out/dist/" cp "$out/phaser/dist/phaser.min.js" "$out/dist/" { echo "== phaser $PHASER: LICENSE.md"; cat "$out/phaser/LICENSE.md"; } > "$out/licenses.txt" # dist/ vira um tar.gz deterministico (datas fixas, ordem fixa, sem dono). find "$out/dist" -exec touch -t 202604200000 {} + ( 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 > "snakelike-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$out/tree" "$out/phaser" ls -l "$out/snakelike-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/snakelike-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"