#!/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 "<title>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"