#!/usr/bin/env bash
# Compila o Spider Solitaire (MIT, Lee Kelly / lklynet; React 19 + zustand + Vite 7) a partir do commit 51aee4f
# de github.com/lklynet/spider-solitaire, com o "npm ci" do package-lock.json do autor (hashes de integridade do
# npm) e "vite build --base=./", com o Node 24.21.0 de artifacts/tools. Unica mudanca: o
do index.html
# ("spider-solitaire" vira "Spider Solitaire"). O jogo e todo CSS (cartas, naipes e icones saem de codigo e de um
# spider.svg do autor) e nao faz nenhuma requisicao externa.
#
# src/FredGames.Bundler/Builds/build-spider-solitaire.sh
#
# Saida: artifacts/build/spider-solitaire-51aee4f/spider-solitaire-51aee4f-site.tar.gz (pasta site/); dois builds
# seguidos dao os mesmos bytes.
set -euo pipefail
COMMIT=51aee4f68fa68150b84c6621f41841c25c1e9ea4
SHA256=afefe9b02f77f2f2f4f911b87ddf796253c82921c6804dcf657fcc93b072d8fa
NODE=24.21.0
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)"
slug=spider-solitaire
out="$root/artifacts/build/$slug-${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:/usr/bin:/bin"
mkdir -p "$cache"
tarball="$cache/$slug-${COMMIT:0:7}.tar.gz"
[ -f "$tarball" ] || curl -fsSL --retry 4 "https://github.com/lklynet/spider-solitaire/archive/$COMMIT.tar.gz" -o "$tarball"
echo "$SHA256 $tarball" | shasum -a 256 -c -
rm -rf "$out"
mkdir -p "$out/tree"
tar -xzf "$tarball" -C "$out/tree" --strip-components 1
cd "$out/tree"
python3 -I - <<'PY'
p = "index.html"
s = open(p, encoding="utf-8").read()
assert "spider-solitaire" in s
open(p, "w", encoding="utf-8", newline="").write(s.replace("spider-solitaire", "Spider Solitaire"))
PY
export npm_config_cache="$cache/npm-$slug" npm_config_update_notifier=false
npm ci --ignore-scripts --no-audit --no-fund --loglevel=error
node node_modules/vite/bin/vite.js build --base=./ --outDir "$out/site" > "$out/build.log" 2>&1 || { tail -30 "$out/build.log"; exit 1; }
if grep -rIlE "https?://[a-z0-9.-]+" "$out/site" --include=index.html --include=*.css | grep .; then echo "endereco externo no HTML/CSS" >&2; exit 1; fi
cd "$out"
find site -exec touch -t 202611010000 {} +
find site -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 > "$slug-${COMMIT:0:7}-site.tar.gz"
cat files.txt; rm -rf files.txt tree site build.log
shasum -a 256 "$slug-${COMMIT:0:7}-site.tar.gz"