#!/usr/bin/env bash # Compila o r33 (puzzle de Ramsey, de riidom; MIT, "no assets used"; KAPLAY 4000.0.0-alpha.21, MIT; Vite + TypeScript) # a partir do commit ed117c4 de github.com/riidom/r33, como o package.json do autor manda: "npm ci" (package-lock.json # dele, com os hashes de integridade do npm) e "vite build", com o Node 24.21.0 de artifacts/tools. # # Mudancas no jogo (r33/r33-fredygames.patch): o plugin do vite.config.ts que imprime os links do Discord e do # OpenCollective do KAPLAY sai, o build sai sem source maps e o index.html ganha uma CSP que bloqueia conexoes fora # da propria origem. O KAPLAY embute alguns desenhos e uma fonte proprios (sprites bean/ka/boom e a fonte "happy", # do repositorio do KAPLAY, MIT); nenhum arquivo de audio entra no build. # # src/FredGames.Bundler/Builds/build-r33.sh # # Saida: artifacts/build/r33-ed117c4/{r33-ed117c4-dist.tar.gz,licenses.txt}; o tar.gz (pasta dist/) tem que sair # igual em dois builds seguidos. set -euo pipefail COMMIT=ed117c4b42fecd972625b2355ce6e8721e6fc2aa SHA256=8afe57c338e1b123911cd098031649904ef5422e40de1e0750b2eef916e67947 NODE=24.21.0 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/r33-${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" if [ ! -f "$cache/r33-${COMMIT:0:7}.tar.gz" ]; then curl -fsSL --retry 4 "https://github.com/riidom/r33/archive/$COMMIT.tar.gz" -o "$cache/r33-${COMMIT:0:7}.tar.gz.partial" \ && mv "$cache/r33-${COMMIT:0:7}.tar.gz.partial" "$cache/r33-${COMMIT:0:7}.tar.gz" fi echo "$SHA256 $cache/r33-${COMMIT:0:7}.tar.gz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/r33-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/r33/r33-fredygames.patch" cd "$out/tree" export npm_config_cache="$cache/npm-r33" npm_config_update_notifier=false npm ci --ignore-scripts --no-audit --no-fund --loglevel=error npx vite build 2>&1 | tail -5 [ -f dist/index.html ] { echo "== Licenca do r33 (LICENSE.md do repositorio, texto original): $(cat LICENSE.md)" echo echo "== kaplay $(node -p "require('./node_modules/kaplay/package.json').version"): LICENSE" cat node_modules/kaplay/LICENSE } > "$out/licenses.txt" # dist/ vira um tar.gz deterministico (datas fixas, ordem fixa, sem dono). cp -R dist "$out/dist" find "$out/dist" -exec touch -t 202509040000 {} + ( 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 > "r33-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$out/tree" ls -l "$out/r33-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/r33-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"