#!/usr/bin/env bash # Compila o Sillage (jogo de esqui 3D low-poly de Alexandre Roudaut / Alex12062012; MIT) a partir do commit 68f7fd0 de # github.com/Alex12062012/sillage (2026-11-01): Vite 8 + three 0.186.1 (versoes do package-lock.json do autor, npm ci --ignore-scripts) e o # Node 24.21.0 de artifacts/tools. Mundo, esquiador, sons e musica sao gerados em codigo: nao ha arquivo de arte nem de audio. # # Mudancas (sillage/sillage-fredygames.patch): so as pistas geradas pelo jogo. O "Free ride" (relevo AWS/Mapzen e dados do OpenStreetMap das # estacoes Les Rousses e Avoriaz, ODbL/Licence Ouverte) sai do menu e da lista de estacoes, e o modo online (socket.io para um servidor de # terceiros) fica desligado, sem baixar o socket.io-client; o index.html ganha caminhos relativos e uma CSP que bloqueia qualquer conexao # fora do site. Os arquivos de dados das estacoes continuam no fonte publicado mas nao entram no JavaScript servido. # # src/FredGames.Bundler/Builds/build-sillage.sh # # Saida: artifacts/build/sillage-68f7fd0/sillage-68f7fd0-dist.tar.gz (dist/); tem que sair igual em dois builds. set -euo pipefail SLUG=sillage COMMIT=68f7fd022406bc6f0e618fe3e7576979ac49a4d0 SHA256=32cfbffc7305ac1668ff36f437c5ae114ec373b1a03799504cf63805cc43822f 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/Alex12062012/sillage/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 # nada da area real (Les Rousses, Avoriaz) pode ter ido para o JavaScript if grep -rlE 'Jouvenceaux|Super-Morzine|portail-io|onrender|openstreetmap' dist | grep -q .; then echo "Sobrou dado de estacao ou endereco externo em dist/:" >&2 grep -rlE 'Jouvenceaux|Super-Morzine|portail-io|onrender|openstreetmap' dist >&2 exit 1 fi mkdir -p "$out/dist" cp -R dist/. "$out/dist/" cp LICENSE "$out/LICENSE" # 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 202611010000 {} + ( 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"