#!/usr/bin/env bash # Compila The Great Train Robbery (Ondrej Zara, 7DRL 2026, MIT) a partir do commit e10b356 de # github.com/ondras/great-train-robbery, com o Deno 2.9.7 (binario do release oficial, sha256 conferido, em artifacts/tools/). # O index.js do autor e gerado por "deno bundle --minify src/index.ts"; sem mudancas, o nosso sai byte a byte igual # ao dele (as dependencias face e rl-display vem do jsDelivr nos commits do deno.lock do autor, que o Deno confere). # Mudancas em great-train-robbery/no-external.patch: sai a arte ASCII do trem da tela de abertura (o CREDITS.md # credita a "intro image" a um usuario do YouTube), o link/atalho [7] para o GitHub (window.open) e o link do GitHub # da ajuda. A fonte Cascadia Mono (woff2, SIL OFL 1.1) ja vem no repositorio. # # src/FredGames.Bundler/Builds/build-great-train-robbery.sh # # Saida: artifacts/build/great-train-robbery-e10b356/great-train-robbery-e10b356-dist.tar.gz (pasta dist/; igual em dois builds). set -euo pipefail COMMIT=e10b3564be5ca1ce89b61dcc99c82c2a1bd3561b SHA256=0fff748f76eb1615f4c6eb4fd13d1f1795c9fbd13b03ead84f43766bd4949225 DENO=2.9.7 DENO_SHA256=5cd46d6268f6f78f5d88bdc7159d20bd44cdaa4b3303474839f87ec6fe7ae25c here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/great-train-robbery-${COMMIT:0:7}" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools/deno-$DENO" tarball="great-train-robbery-${COMMIT:0:7}.tar.gz" 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 } mkdir -p "$cache" "$tools" fetch "https://github.com/ondras/great-train-robbery/archive/$COMMIT.tar.gz" "$SHA256" "$tarball" fetch "https://github.com/denoland/deno/releases/download/v$DENO/deno-aarch64-apple-darwin.zip" "$DENO_SHA256" "deno-$DENO-aarch64-apple-darwin.zip" [ -x "$tools/deno" ] || unzip -oq "$cache/deno-$DENO-aarch64-apple-darwin.zip" -d "$tools" rm -rf "$out" mkdir -p "$out/tree" "$out/dist/css" tar -xzf "$cache/$tarball" -C "$out/tree" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/great-train-robbery/no-external.patch" ( cd "$out/tree" && DENO_DIR="$out/deno-cache" DENO_NO_UPDATE_CHECK=1 "$tools/deno" bundle --minify src/index.ts -o "$out/dist/index.js" >/dev/null 2>&1 ) for f in index.html LICENSE.md; do cp "$out/tree/$f" "$out/dist/$f"; done cp "$out/tree/css/"* "$out/dist/css/" ! grep -q "https\?://" "$out/dist/index.js" || { grep -o "https\?://[^\"' )]*" "$out/dist/index.js" | sort -u; } find "$out/dist" -exec touch -t 202510300000 {} + ( 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 > "great-train-robbery-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$out/tree" "$out/deno-cache" ls -l "$out/great-train-robbery-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/great-train-robbery-${COMMIT:0:7}-dist.tar.gz"