#!/usr/bin/env bash # Compila o Echo Chamber (roguelike de submarino, 7DRL 2026, de scarf005; AGPL-3.0; Preact + rot.js + Vite) para a # web a partir do fonte, num commit fixo, com o Deno 2.9.7 (o mesmo do build-great-train-robbery.sh) e o # deno.lock do autor, exatamente como o "deno task build" dele (lingui extract + vite build). # Mudancas no jogo (Builds/echo-chamber/echo-chamber-fredygames.patch): o index.html perde as tags og:/twitter: # que apontavam para o itch.io e o GitHub Pages do autor, e o volume das explosoes e limitado a 1 (o jogo usava # 1.38, que o navegador rejeita com IndexSizeError: a explosao ficava muda). # AGPL: o fonte do commit, o patch e este script vao junto, ao lado do jogo. # # src/FredGames.Bundler/Builds/build-echo-chamber.sh # # Saida: artifacts/build/echo-chamber-66b4368/{site.tar.gz,echo-chamber-66b4368.tar.gz,licenses/}; # site.tar.gz (a pasta do jogo) tem que sair igual em dois builds seguidos. set -euo pipefail SLUG=echo-chamber COMMIT=66b4368cb3e4cf00c1a29d62294a96bf621349c7 SHA256=c7558b5ce51cb198e80096ee46d863c493f3516075322e6665fb25cb549079d0 URL="https://github.com/scarf005/echo-chamber/archive/$COMMIT.tar.gz" DENO=2.9.7 DENO_SHA256=$(grep -m1 '^DENO_SHA256=' "$(dirname "${BASH_SOURCE[0]}")/build-great-train-robbery.sh" | cut -d= -f2) STD_COMMIT=f834d0223364361169314833e3c7a8f62ce11d58 # so para o texto da licenca dos pacotes @std STD_LICENSE_SHA256=0961f97da6619d5fe9ddb98649191d5ca6e958856ea5252f4cce7c9b85513819 MTIME=202609171716 # data do commit 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" tools="$root/artifacts/tools/deno-$DENO" mkdir -p "$cache" "$tools" fetch() { # url sha256 arquivo [ -f "$cache/$3" ] || curl -fsSL --retry 4 "$1" -o "$cache/$3" echo "$2 $cache/$3" | shasum -a 256 -c - >/dev/null } fetch "$URL" "$SHA256" "$SLUG-${COMMIT:0:7}.tar.gz" fetch "https://github.com/denoland/deno/releases/download/v$DENO/deno-aarch64-apple-darwin.zip" "$DENO_SHA256" "deno-$DENO-aarch64-apple-darwin.zip" fetch "https://raw.githubusercontent.com/denoland/std/$STD_COMMIT/LICENSE" "$STD_LICENSE_SHA256" "denostd-LICENSE-${STD_COMMIT:0:7}" [ -x "$tools/deno" ] || unzip -oq "$cache/deno-$DENO-aarch64-apple-darwin.zip" -d "$tools" export PATH="$tools:$PATH" DENO_DIR="$cache/deno-$SLUG" # o plugin do Vite procura o "deno" no PATH [ "$(deno --version | head -1 | cut -d' ' -f2)" = "$DENO" ] || { echo "Deno inesperado"; exit 1; } 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): o tarball do commit, regravado 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" patch -s -p1 -d "$out/tree" < "$here/echo-chamber/echo-chamber-fredygames.patch" cd "$out/tree" deno task build >/dev/null mv "$out/tree/dist" "$out/site" site="$out/site" rm -f "$site/vite-deno.svg" # sobra do template do Vite, nenhuma pagina usa find "$site" -exec touch -t "$MTIME" {} + ( cd "$out" && find site -type f | LC_ALL=C sort > "$out/site-files.txt" ) ( cd "$out" && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n \ -cf - -T "$out/site-files.txt" ) | gzip -n -9 > "$out/site.tar.gz" # Licencas dos pacotes que entram no bundle (o proprio jogo e AGPL-3.0: LICENSE do repositorio). mkdir -p "$out/licenses" for d in preact@ @preact+signals@ @preact+signals-core@ @lingui+core@ @lingui+react@ @lingui+message-utils@ rot-js@; do dir=$(ls -d node_modules/.deno/$d* | head -1) pkg=$(basename "$dir") echo "== npm $pkg" for f in "$dir"/node_modules/*/LICEN[CS]E* "$dir"/node_modules/*/*/LICEN[CS]E* "$dir"/node_modules/*/license*; do [ -f "$f" ] && { echo "-- ${f#$dir/node_modules/}"; cat "$f"; echo; } done done > "$out/licenses/npm.txt" { echo "== jsr @std/random, @std/collections, @std/async, @std/internal (denoland/std)"; cat "$cache/denostd-LICENSE-${STD_COMMIT:0:7}"; } > "$out/licenses/jsr-std.txt" ls -l "$out/site.tar.gz" shasum -a 256 "$out/site.tar.gz" "$out/$SLUG-${COMMIT:0:7}.tar.gz"