#!/usr/bin/env bash # Pecas comuns dos builds de jogos de Sprig do fredygames.com (ver a secao "Sprig" da skill bundler). # Nao e executado direto: Builds/build-sprig.sh (ou um build-.sh) faz `. "$here/sprig-web/common.sh"` e chama sprig_build. # # O Sprig (Hack Club, github.com/hackclub/sprig) tem o engine em TypeScript (engine/src, MIT) e os jogos da galeria em # games/*.js, contribuidos por pull request ao mesmo repositorio (licenca MIT do repo = a dos jogos, decisao do # usuario em 2026-11-10; jogo que declare outra licenca ou venha de outro lugar segue a regra normal). # O engine e compilado com o TypeScript 5.9.3 do package-lock.json (npm ci, sem scripts) para ES modules em # artifacts/build/sprig-engine-/ (tsconfig do proprio engine, sem sourcemaps e sem .d.ts), e cada jogo vira # artifacts/build/sprig-/{index.html,game.js,.js,source tarball}. Tudo vem do tarball do commit pinado (sha256). # # Variaveis que o build-.sh define antes de chamar sprig_build: # SLUG pasta do jogo em Content/games e da saida # GAME_FILE nome do arquivo em games/ do commit pinado (ex.: Snake.js; maiusculas e minusculas contam) # TITLE titulo da pagina (o @title do cabecalho) SPRIG_COMMIT=1ad2050606db804158725a19f614cc70d1c6f441 SPRIG_SHA256=53d5425f3b73a8383688481ca0440dd359e571c6f908382c6df904cf36a4f620 sprig_here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" sprig_root="$(git -C "$sprig_here" rev-parse --show-toplevel 2>/dev/null || pwd)" sprig_cache="$sprig_root/artifacts/cache/sprig" sprig_ts="$sprig_root/artifacts/tools/sprig-ts" sprig_engine_dir="$sprig_root/artifacts/build/sprig-engine-${SPRIG_COMMIT:0:7}" sprig_engine() { local tarball="$sprig_cache/sprig-${SPRIG_COMMIT:0:7}.tar.gz" if [ ! -f "$tarball" ]; then mkdir -p "$sprig_cache" curl -fsSL -o "$tarball.part" "https://github.com/hackclub/sprig/archive/$SPRIG_COMMIT.tar.gz" mv "$tarball.part" "$tarball" fi echo "$SPRIG_SHA256 $tarball" | shasum -a 256 -c - >&2 if [ ! -x "$sprig_ts/node_modules/.bin/tsc" ]; then mkdir -p "$sprig_ts" cp "$sprig_here/package.json" "$sprig_here/package-lock.json" "$sprig_ts/" (cd "$sprig_ts" && npm ci --ignore-scripts --no-audit --no-fund >&2) fi [ "$("$sprig_ts/node_modules/.bin/tsc" -v)" = "Version 5.9.3" ] || { echo "TypeScript 5.9.3 esperado em $sprig_ts" >&2; return 1; } local work="$sprig_root/artifacts/build/sprig-engine-work" rm -rf "$work" "$sprig_engine_dir" mkdir -p "$work" "$sprig_engine_dir" tar xzf "$tarball" -C "$work" --strip-components=1 \ "sprig-$SPRIG_COMMIT/engine/src" "sprig-$SPRIG_COMMIT/engine/tsconfig.json" "sprig-$SPRIG_COMMIT/engine/package.json" \ "sprig-$SPRIG_COMMIT/engine/LICENSE" "sprig-$SPRIG_COMMIT/LICENSE" (cd "$work/engine" && "$sprig_ts/node_modules/.bin/tsc" -p tsconfig.json --outDir "$sprig_engine_dir" \ --incremental false --declaration false --declarationMap false --sourceMap false >&2) # Fonte do engine: o que o tsc leu, mais as licencas (o jogo vai a parte, em sprig_build). python3 -I "$sprig_here/pack-source.py" "$sprig_engine_dir.src.tar.gz" "$work" engine LICENSE mv "$sprig_engine_dir.src.tar.gz" "$sprig_root/artifacts/build/sprig-engine-${SPRIG_COMMIT:0:7}-src.tar.gz" cp "$work/LICENSE" "$sprig_root/artifacts/build/sprig-engine-${SPRIG_COMMIT:0:7}-LICENSE" rm -rf "$work" } sprig_build() { [ -d "$sprig_engine_dir" ] && [ -f "$sprig_root/artifacts/build/sprig-engine-${SPRIG_COMMIT:0:7}-src.tar.gz" ] || sprig_engine local tarball="$sprig_cache/sprig-${SPRIG_COMMIT:0:7}.tar.gz" local out="$sprig_root/artifacts/build/sprig-$SLUG" rm -rf "$out" mkdir -p "$out" tar xzf "$tarball" -C "$out" --strip-components=2 "sprig-$SPRIG_COMMIT/games/$GAME_FILE" node "$sprig_here/wrap-game.mjs" "$out/$GAME_FILE" "$out/game.js" sed -e "s|@TITLE@|$TITLE|g" "$sprig_here/index.html.in" > "$out/index.html" local eng="$sprig_root/artifacts/build/sprig-engine-${SPRIG_COMMIT:0:7}" echo "# Cole em bundle.yaml (web.files e sources):" echo "index.html $(shasum -a 256 < "$out/index.html" | cut -c1-64)" echo "game.js $(shasum -a 256 < "$out/game.js" | cut -c1-64)" echo "$GAME_FILE $(shasum -a 256 < "$out/$GAME_FILE" | cut -c1-64)" (cd "$eng" && find . -name '*.js' | sed 's|^\./||' | sort | while read -r f; do echo "engine/$f $(shasum -a 256 < "$f" | cut -c1-64)"; done) echo "engine-src.tar.gz $(shasum -a 256 < "$sprig_root/artifacts/build/sprig-engine-${SPRIG_COMMIT:0:7}-src.tar.gz" | cut -c1-64)" }