#!/usr/bin/env bash # Compila o Asteroid Capitalist (nave espacial, tiros com o mouse, Open Jam 2019, de Sidaroth e Garlov, MIT; Phaser 3 + matter-js) a partir # do commit f86d05e de github.com/Sidaroth/Asteroid.Capitalist. O projeto do autor usa webpack 4 + node-sass 4, que nao rodam no Node 24: # aqui o esbuild 0.28.1 junta o codigo com as mesmas bibliotecas nas versoes do package-lock.json do autor (phaser 3.24.1, matter-js 0.14.2, # immutable 3.8.2; fixadas por asteroid-capitalist/package-lock.json, "npm ci"), usando o phaser/dist/phaser.min.js oficial do pacote, com # os mesmos apelidos de caminho do webpack (configs, core, scenes...). A folha de estilo SCSS do autor so usa CSS comum. # # Mudancas (asteroid-capitalist/asteroid-capitalist-fredygames.patch): sem o painel de desenvolvimento dat.gui e o medidor stats-js (so rodavam com # DEBUG ligado; o patch tira os imports de UI.js, e o bundle nao os traz); resizeCanvas.js avisa o Phaser do novo tamanho do canvas (sem isso o Play nao recebe cliques com a janela menor que 1920x1080); index.html proprio, com CSP que bloqueia qualquer requisicao externa # (o do autor vem de um template do html-webpack-plugin) e main.css no lugar do main.scss. As pastas assets/ (imagens, audio e fontes) vao como estao, # sem os projetos do TexturePacker (.tps). # # src/FredGames.Bundler/Builds/build-asteroid-capitalist.sh # # Saida: artifacts/build/asteroid-capitalist-f86d05e/{asteroid-capitalist-f86d05e-dist.tar.gz,licenses.txt}; o tar.gz tem que sair igual em dois builds. set -euo pipefail COMMIT=f86d05e84ad84edff49251f5b3e8fdfaefdfc09a SHA256=624b39f693c5f031cf7abc03a8457aa9b83212c09027ac2e511a35bac6976970 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/asteroid-capitalist-${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" if [ ! -f "$cache/Asteroid.Capitalist-${COMMIT:0:7}.tar.gz" ]; then curl -fsSL --retry 4 "https://github.com/Sidaroth/Asteroid.Capitalist/archive/$COMMIT.tar.gz" -o "$cache/Asteroid.Capitalist-${COMMIT:0:7}.tar.gz.partial" \ && mv "$cache/Asteroid.Capitalist-${COMMIT:0:7}.tar.gz.partial" "$cache/Asteroid.Capitalist-${COMMIT:0:7}.tar.gz" fi echo "$SHA256 $cache/Asteroid.Capitalist-${COMMIT:0:7}.tar.gz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" "$out/tools" "$out/dist" tar -xzf "$cache/Asteroid.Capitalist-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/asteroid-capitalist/asteroid-capitalist-fredygames.patch" cp "$here/asteroid-capitalist/package.json" "$here/asteroid-capitalist/package-lock.json" "$out/tools/" ( cd "$out/tools" && npm_config_cache="$cache/npm-ac" npm_config_update_notifier=false npm ci --ignore-scripts --no-audit --no-fund --loglevel=error ) nm="$out/tools/node_modules" cd "$out/tree" "$nm/.bin/esbuild" src/index.js --bundle --minify --platform=browser --target=es2018 --format=iife --legal-comments=none \ --define:CANVAS_RENDERER=true --define:WEBGL_RENDERER=true --define:PRODUCTION=true \ --alias:phaser="$nm/phaser/dist/phaser.min.js" --alias:matter-js="$nm/matter-js" --alias:immutable="$nm/immutable" \ --alias:configs=./src/configs --alias:core=./src/core --alias:scenes=./src/scenes --alias:entities=./src/entities \ --alias:components=./src/components --alias:utils=./src/utils --alias:root=./src --alias:src=./src --alias:math=./src/math \ --outfile="$out/dist/bundle.js" --log-level=warning [ -s "$out/dist/bundle.js" ] if grep -q "dat.gui\|dat\.GUI\|stats-js" "$out/dist/bundle.js"; then echo "bundle ainda tem dat.gui/stats" >&2; exit 1; fi cp index.html styles/main.css "$out/dist/" mkdir -p "$out/dist/assets" ( cd assets && find . -type f ! -path './texturepacker/*' | LC_ALL=C sort | while IFS= read -r f; do mkdir -p "$out/dist/assets/$(dirname "$f")"; cp "$f" "$out/dist/assets/$f"; done ) { echo "== Asteroid Capitalist (LICENSE do repositorio, MIT)" cat LICENSE echo echo "== Phaser $(node -p "require('$nm/phaser/package.json').version") (entra no bundle; LICENSE.md)" cat "$nm/phaser/LICENSE.md" echo echo "== matter-js $(node -p "require('$nm/matter-js/package.json').version") (entra no bundle; LICENSE)" cat "$nm/matter-js/LICENSE" echo echo "== immutable $(node -p "require('$nm/immutable/package.json').version") (entra no bundle; LICENSE)" cat "$nm/immutable/LICENSE" echo } > "$out/licenses.txt" find "$out/dist" -exec touch -t 202611020000 {} + ( 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 > "asteroid-capitalist-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) du -sh "$out/dist" cd "$out" && rm -rf tree tools ls -l "$out/asteroid-capitalist-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/asteroid-capitalist-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"