#!/usr/bin/env bash # Compila o Cargo Trek (gestao de caminhao de entregas de Deseteral, Ludum Dare 54; MIT; framework ponczek do proprio # autor, MIT; howler 2.2.3 e heapify 0.6.0, MIT) a partir do commit 027de27 de github.com/Deseteral/ludum-dare-54 e do # commit 64a68bb de github.com/Deseteral/ponczek (o submodulo que o jogo fixa), como o README do autor: yarn 1.22.22 # nas duas pastas (yarn.lock de cada uma, "--frozen-lockfile", sem os scripts de instalacao), a lista de assets # (scripts/generate-asset-list.ts) e "vite build", com o Node 24.21.0 de artifacts/tools. # # Mudanca (cargo-trek/cargo-trek-fredygames.patch): so o index.html ganha uma CSP que barra qualquer requisicao # fora do site. O codigo do jogo nao muda. # # src/FredGames.Bundler/Builds/build-cargo-trek.sh # # Saida: artifacts/build/cargo-trek-027de27/{cargo-trek-027de27-dist.tar.gz,licenses.txt}; o tar.gz (pasta dist/) # sai igual em dois builds seguidos. set -euo pipefail COMMIT=027de278a4642076a988c408ff79c8d881bff925 SHA256=aad999e73ca6e14c60e146f1360183401d7f1fe413b1af8cfb8a46a525615353 PONCZEK=64a68bb70309a67911292d5a11ef50ee18656c0e PONCZEK_SHA256=32caa9db00a0657e83aae9dbd595508290a2cfa78735dcbbdbd31de8fe1e6d93 NODE=24.21.0 YARN=1.22.22 YARN_SHA256=c17d3797fb9a9115bf375e31bfd30058cac6bc9c3b8807a3d8cb2094794b51ca here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/cargo-trek-${COMMIT:0:7}" cache="$root/artifacts/build/cache" nodebin="$root/artifacts/tools/node-v$NODE/bin" [ -x "$nodebin/node" ] && [ "$("$nodebin/node" -v)" = "v$NODE" ] || { echo "Precisa do Node $NODE em $nodebin." >&2; exit 1; } export PATH="$nodebin:$PATH" mkdir -p "$cache" fetch() { if [ ! -f "$cache/$2" ]; then curl -fsSL --retry 4 "$1" -o "$cache/$2.partial" && mv "$cache/$2.partial" "$cache/$2" fi echo "$3 $cache/$2" | shasum -a 256 -c - } fetch "https://github.com/Deseteral/ludum-dare-54/archive/$COMMIT.tar.gz" "cargo-trek-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://github.com/Deseteral/ponczek/archive/$PONCZEK.tar.gz" "ponczek-${PONCZEK:0:7}.tar.gz" "$PONCZEK_SHA256" fetch "https://registry.npmjs.org/yarn/-/yarn-$YARN.tgz" "yarn-$YARN.tgz" "$YARN_SHA256" rm -rf "$out" mkdir -p "$out/tree" "$out/yarn" tar -xzf "$cache/cargo-trek-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 rm -rf "$out/tree/ponczek"; mkdir -p "$out/tree/ponczek" tar -xzf "$cache/ponczek-${PONCZEK:0:7}.tar.gz" -C "$out/tree/ponczek" --strip-components 1 tar -xzf "$cache/yarn-$YARN.tgz" -C "$out/yarn" patch -s -p1 -d "$out/tree" < "$here/cargo-trek/cargo-trek-fredygames.patch" yarn() { node "$out/yarn/package/bin/yarn.js" "$@"; } cd "$out/tree" ( cd ponczek && yarn install --frozen-lockfile --ignore-scripts --silent --cache-folder "$cache/yarn-cargo-trek" 2>/dev/null ) yarn install --frozen-lockfile --ignore-scripts --silent --cache-folder "$cache/yarn-cargo-trek" 2>/dev/null node_modules/.bin/ts-node ./scripts/generate-asset-list.ts node_modules/.bin/vite build >"$out/vite.log" 2>&1 || { tail -30 "$out/vite.log"; exit 1; } [ -s dist/index.html ] cp -R dist "$out/dist" { echo "== Cargo Trek (LICENSE do repositorio, MIT)" cat LICENSE echo echo "== ponczek (LICENSE, MIT; commit $PONCZEK)" cat ponczek/LICENSE echo for pkg in howler heapify; do d=ponczek/node_modules/$pkg echo "== $pkg $(node -p "require('./$d/package.json').version") (entra no bundle)" for f in "$d"/LICENSE*; do [ -f "$f" ] && cat "$f"; done echo done } > "$out/licenses.txt" find "$out/dist" -exec touch -t 202511010000 {} + ( 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 > "cargo-trek-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) cd "$out" && rm -rf tree yarn ls -l "$out/cargo-trek-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/cargo-trek-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"