#!/usr/bin/env bash # Compila o gaarden (brinquedo-jardim de Jez Swanson/Jezzamonn, Ludum Dare 45; MIT; sons sintetizados no codigo com # Tone.js, MIT) a partir do commit 2b2ff90 de github.com/Jezzamonn/gaarden, como o package.json do autor: "npm ci" # (package-lock.json dele), webpack 3 + babel 6 (com o Node 24.21.0 de artifacts/tools e o provedor "legacy" do # OpenSSL, que o webpack 3 precisa para o hash md4) e a pagina de src/index.html. # # Mudancas (gaarden/gaarden-fredygames.patch): o index.html perde o Google Analytics, os favicons e as tags do # Facebook/Twitter (apontavam para o site do autor) e ganha uma CSP que barra qualquer requisicao fora do site. # O codigo do jogo nao muda. Bundle em producao (-p) e sem source map. # # src/FredGames.Bundler/Builds/build-gaarden.sh # # Saida: artifacts/build/gaarden-2b2ff90/{gaarden-2b2ff90-dist.tar.gz,licenses.txt}; o tar.gz (pasta dist/) sai # igual em dois builds seguidos. set -euo pipefail COMMIT=2b2ff90c5bfc5062f2a2a7a9c642965d9be11165 SHA256=5c6185d41d7404bde00d351824969c49e75d26894a952ae2dfd31a5f8b2b68a2 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/gaarden-${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/Jezzamonn/gaarden/archive/$COMMIT.tar.gz" "gaarden-${COMMIT:0:7}.tar.gz" "$SHA256" rm -rf "$out" mkdir -p "$out/tree" "$out/dist/js" "$out/dist/css" tar -xzf "$cache/gaarden-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/gaarden/gaarden-fredygames.patch" cd "$out/tree" export npm_config_cache="$cache/npm-gaarden" npm_config_update_notifier=false npm ci --ignore-scripts --no-audit --no-fund --loglevel=error NODE_OPTIONS=--openssl-legacy-provider npx webpack -p --devtool false >"$out/webpack.log" 2>&1 || { tail -30 "$out/webpack.log"; exit 1; } [ -s build/web/js/main.bundle.js ] cp build/web/js/main.bundle.js "$out/dist/js/" cp src/css/styles.css "$out/dist/css/" cp src/index.html "$out/dist/index.html" { echo "== gaarden (LICENSE do repositorio, MIT)" cat LICENSE echo echo "== Tone.js $(node -p "require('./node_modules/tone/package.json').version") (LICENSE.md do pacote, MIT)" cat node_modules/tone/LICENSE.md echo echo "== random-js $(node -p "require('./node_modules/random-js/package.json').version") (LICENSE do pacote, MIT)" cat node_modules/random-js/LICENSE } > "$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 > "gaarden-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) cd "$out" && rm -rf tree ls -l "$out/gaarden-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/gaarden-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"