#!/usr/bin/env bash # Compila o Vibe Basketball (basquete de rua 1v1 e Concurso de Tres Pontos em Three.js, de mike007jd; MIT) a partir do commit 184a5b2 de # github.com/mike007jd/vibebasketball (2026-08-28): Vite 6 + three 0.170.0, com o package-lock.json do autor (npm ci --ignore-scripts, sem o # download de navegadores do Playwright) e o Node 24.21.0 de artifacts/tools. Os jogadores, a quadra e os sons sao gerados em codigo; o # unico arquivo de dados e o GLB dos props do concurso (feito pelo autor em tools/blender/contest_props.py). # # Mudancas no jogo (vibe-basketball/vibe-basketball-fredygames.patch): o GLB e carregado por caminho relativo (a pagina fica numa subpasta) e # a pagina ganha uma CSP que bloqueia qualquer conexao fora do proprio site. Build com --base ./ (todos os caminhos relativos). # # src/FredGames.Bundler/Builds/build-vibe-basketball.sh # # Saida: artifacts/build/vibe-basketball-184a5b2/vibe-basketball-184a5b2-dist.tar.gz (dist/); tem que sair igual em dois builds. set -euo pipefail SLUG=vibe-basketball COMMIT=184a5b27ee259869744f0b32de9954ab7983c1bb SHA256=d405164be2c92918799e1e4631d4076dc606e64d234830c5e1ac07380a0de9c0 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/$SLUG-${COMMIT:0:7}" cache="$root/artifacts/build/cache" export PATH="$root/artifacts/tools/node-v24.21.0/bin:$PATH" mkdir -p "$cache" fetch() { # url dest sha256 if [ ! -f "$2" ]; then curl -fsSL --retry 4 "$1" -o "$2.partial" && mv "$2.partial" "$2"; fi echo "$3 $2" | shasum -a 256 -c - } fetch "https://github.com/mike007jd/vibebasketball/archive/$COMMIT.tar.gz" "$cache/$SLUG-${COMMIT:0:7}.tar.gz" "$SHA256" rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/$SLUG-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 # Fonte publicado (sem alteracoes), em tar deterministico. ( cd "$out/tree" && find . -type f | sed 's|^\./||' | LC_ALL=C sort > "$out/files.txt" ) ( cd "$out/tree" && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n \ -cf - -T "$out/files.txt" ) | gzip -n -9 > "$out/$SLUG-${COMMIT:0:7}.tar.gz" rm "$out/files.txt" cd "$out/tree" patch -s -p1 < "$here/$SLUG/$SLUG-fredygames.patch" npm ci --ignore-scripts --no-audit --no-fund --cache "$cache/npm-$SLUG" >/dev/null npx vite build --base ./ >/dev/null rm -rf dist/models/contest/previews dist/models/contest/*.md mkdir -p "$out/dist" cp -R dist/. "$out/dist/" cp LICENSE "$out/LICENSE" cp THIRD_PARTY_NOTICES.md "$out/THIRD_PARTY_NOTICES.md" # licencas das dependencias que entram no JavaScript (three e o que ele puxa) node -p "require('./node_modules/three/package.json').version" > "$out/three-version.txt" cp node_modules/three/LICENSE "$out/three-LICENSE" find "$out/dist" -exec touch -t 202608280000 {} + ( 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 > "$SLUG-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) cd "$root" rm -rf "$out/tree" ls -l "$out/$SLUG-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/$SLUG-${COMMIT:0:7}-dist.tar.gz" "$out/$SLUG-${COMMIT:0:7}.tar.gz"