#!/usr/bin/env bash # Compila o Four in a Row (MIT), de Kenrick (kenrick95/c4, "c4"), a partir do commit 8280381, sem o modo # online. O repositorio nao traz a build (o deploy do autor roda o Vite); este script faz o mesmo que # .github/workflows/deploy.yml: "yarn install --immutable" com o yarn.lock e o yarn-4.14.1.cjs do proprio # commit, e "vite build" do workspace browser (Vite 8), com --base=./ para o jogo rodar de qualquer pasta. # Antes de compilar aplicamos four-in-a-row.patch, mais a remocao dos arquivos do modo online: # - tira o modo "Online" (WebSocket para wss://c4-server.fly.dev/, link de convite, botao Share), os # arquivos browser/src/game/game-online-2p.ts, core/src/game/game-online/ e core/src/player/player-shadow.ts; # - troca o nome visivel "Connect Four" (marca registrada) por "Four in a Row", tira o canonical e o # Open Graph do GitHub Pages, o link da Wikipedia e os links externos do rodape. # # src/FredGames.Bundler/Builds/build-four-in-a-row.sh # # Precisa do Node (usa artifacts/tools/node-v24.21.0) e de rede para o yarn baixar os pacotes do npm (o # yarn.lock confere o hash de cada um). enableScripts: false no .yarnrc.yml do autor: nenhum script de # instalacao roda. Saida: artifacts/build/four-in-a-row-8280381/{index.html,logo.svg,assets/*}, que o # bundle.yaml do jogo confere pelo SHA-256. Dois builds seguidos dao os mesmos bytes. set -euo pipefail COMMIT=8280381de261b13eee42f7d83d3693cb1d981ad0 SHA256=20c1db475891db1bdd12a95ac9e2154009465258a0cbd25c60c7b8495b1810f3 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/four-in-a-row-${COMMIT:0:7}" cache="$root/artifacts/build/cache" nodedir="$root/artifacts/tools/node-v24.21.0/bin" tarball="c4-$COMMIT.tar.gz" [ -x "$nodedir/node" ] || { echo "Precisa do Node em $nodedir." >&2; exit 1; } mkdir -p "$cache" [ -f "$cache/$tarball" ] || curl -fsSL --retry 6 "https://github.com/kenrick95/c4/archive/$COMMIT.tar.gz" -o "$cache/$tarball" echo "$SHA256 $cache/$tarball" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" "$out/home" tar -xzf "$cache/$tarball" -C "$out/tree" --strip-components 1 cd "$out/tree" rm -rf browser/src/game/game-online-2p.ts core/src/game/game-online core/src/player/player-shadow.ts patch -s -p1 < "$here/four-in-a-row.patch" # Ambiente isolado: so o Node fixo no PATH e o cache do yarn dentro da pasta de saida. export PATH="$nodedir:/usr/bin:/bin" export HOME="$out/home" YARN_ENABLE_TELEMETRY=0 YARN_CACHE_FOLDER="$out/home/yarn-cache" CI=1 node .yarn/releases/yarn-4.14.1.cjs workspaces focus @kenrick95/c4-browser (cd browser && node ../node_modules/vite/bin/vite.js build --base=./ --outDir "$out/dist") # Fica so o que a pagina usa: o index.html, o logo e os assets (o demo/ do autor e um redirecionamento # para o GitHub Pages dele). rm -rf "$out/dist/demo" mkdir -p "$out/site" cp -R "$out/dist/." "$out/site/" cd "$out" rm -rf tree home dist mv site/* . && rmdir site find . -type f | LC_ALL=C sort | xargs shasum -a 256