#!/usr/bin/env bash # Compila o Space Pirates (demo 3D de combate espacial do time do Babylon.js, Apache-2.0; TypeScript + Babylon.js 5.3.0, webpack 5) # a partir do commit 8abceef de github.com/BabylonJS/SpacePirates, com o Node 24.21.0 de artifacts/tools. # # O repositorio nao tem package-lock.json (o .gitignore o exclui): os dois lockfiles gerados por nos na primeira build ficam # versionados em space-pirates/ e entram na arvore antes do "npm ci". Mudancas (space-pirates/space-pirates.patch): sem o kit de # fontes do Typekit (Adobe), o caminho dos assets sai do diretorio da pagina (a original supoe a raiz do site), titulo da pagina # sem a marca "made with Babylon.js"; os caminhos de UI/ viram relativos (a original supoe a raiz do site). O arquivo # UI/madeWithBabylon.svg (o logo da marca, que o codigo nao usa) fica de fora, e o logo que o desenhista deixou dentro de # UI/bottomBarRight.svg (a moldura do menu) e cortado por space-pirates/strip-babylon-logo.py. # # src/FredGames.Bundler/Builds/build-space-pirates.sh # # Saida: artifacts/build/space-pirates-8abceef/space-pirates-8abceef-dist.tar.gz (dist/); o tar.gz tem que sair igual em dois builds. set -euo pipefail COMMIT=8abceefbda9176be192e74ceb7030f5bd31d7ea5 SHA256=01759539e69641b264f1b5dfe447eb3dae42f1614b3972180a2d31582776acef NODE=24.21.0 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/space-pirates-${COMMIT:0:7}" cache="$root/artifacts/build/cache" tgz="$cache/SpacePirates-${COMMIT:0:7}.tar.gz" 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" if [ ! -f "$tgz" ]; then curl -fsSL --retry 4 "https://github.com/BabylonJS/SpacePirates/archive/$COMMIT.tar.gz" -o "$tgz.partial" && mv "$tgz.partial" "$tgz" fi echo "$SHA256 $tgz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$tgz" -C "$out/tree" --strip-components 1 cd "$out/tree" patch -s -p1 < "$here/space-pirates/space-pirates.patch" cp "$here/space-pirates/app_package-package-lock.json" app_package/package-lock.json cp "$here/space-pirates/test_package-package-lock.json" test_package/package-lock.json export npm_config_cache="$cache/npm-space-pirates" export NO_COLOR=1 ( cd app_package && npm ci --ignore-scripts --no-audit --no-fund > "$out/install-app.log" 2>&1 && npx tsc -p . > "$out/tsc.log" 2>&1 ) || { tail -20 "$out"/install-app.log "$out"/tsc.log; exit 1; } ( cd test_package && npm ci --ignore-scripts --no-audit --no-fund > "$out/install-test.log" 2>&1 && npx webpack --config webpack.build.config.js > "$out/webpack.log" 2>&1 ) || { tail -30 "$out"/install-test.log "$out"/webpack.log; exit 1; } [ -s dist/index.html ] && [ -s dist/bundle.js ] cp -R test_package/public/assets dist/assets rm dist/assets/UI/madeWithBabylon.svg python3 -I "$here/space-pirates/strip-babylon-logo.py" dist/assets/UI/bottomBarRight.svg mv dist "$out/dist" if grep -qE 'typekit|use\.typekit|googleapis|droidsans' "$out/dist/bundle.js" "$out/dist/index.html" 2>/dev/null; then grep -noE 'typekit|googleapis|droidsans.{0,60}' "$out/dist/bundle.js" >&2 || true echo "Sobrou referencia externa." >&2 fi find "$out/dist" -exec touch -t 202205100000 {} + ( cd "$out" && find dist -type f | LC_ALL=C sort > list.txt \ && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf - -T list.txt \ | gzip -n -9 > "space-pirates-${COMMIT:0:7}-dist.tar.gz" && rm list.txt ) rm -rf "$out/tree" ls -l "$out/space-pirates-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/space-pirates-${COMMIT:0:7}-dist.tar.gz"