#!/usr/bin/env bash # Monta o Tiles Collector (puzzle de pares de cores de Dimitri Masson, Ludum Dare 58, MIT; p5.js 2.0.5, LGPL-2.1; # Bootstrap 5.3.8, MIT) a partir do commit 7987615 de github.com/dhmmasson/tilesCollector. O autor publica o jogo # como um site Quarto (index.qmd + libraries/ + src/ + assets/); aqui entra so o jogo, numa pagina nossa # (tiles-collector/index.html) com os mesmos scripts do index.qmd, na mesma ordem. # # Mudancas no jogo (tiles-collector/tiles-collector-fredygames.patch): o placar dos desafios diarios (dreamlo.com, com # as chaves privadas no codigo) vira um placar local no localStorage, com os mesmos nomes de funcao e campos; sem o # carregamento da fonte do Google Fonts (o sketch nao a usava: nenhum textFont); o menu perde a secao "Settings" # (chamava Game.setPalette/setColorblindMode/showLeaderboard e colorPalettes, que nao existem neste commit) e # "Tutoriel" vira "Tutorial". O Bootstrap vem do pacote bootstrap@5.3.8 do npm (o jogo so usa botoes, modal e grade); # o p5.sound do repositorio nao e usado (o jogo e mudo) e fica de fora. O p5.min.js e o do repositorio, igual byte a byte # ao lib/p5.min.js de p5@2.0.5. # # O p5.js e LGPL: o fonte da versao servida (tag v2.0.5 de processing/p5.js) vai junto, como "sources" do bundle. # # src/FredGames.Bundler/Builds/build-tiles-collector.sh # # Saida: artifacts/build/tiles-collector-7987615/{tiles-collector-7987615-dist.tar.gz,licenses.txt}; o tar.gz (pasta dist/) # sai igual em dois builds seguidos. set -euo pipefail COMMIT=798761526c7c8d768351700ef8813cbd3cc0b730 SHA256=43bcb324b13781f5a252cdeffa4af8566697431d90e526856dc5915b080004eb P5=2.0.5 P5_NPM_SHA256=1e0239f5f89d15597d8a610594629393b6bdd535d5a775b76790c2843d84af58 P5_MIN_SHA256=a250322491486141efe4f07c518a0262d5e2d75a84dd6351338e4dc2ac031b0b P5_SRC_SHA256=4834ba9b31da718b6dc84253738d22f737cef7cdbe141312b6501825ea5f51fe BOOTSTRAP=5.3.8 BOOTSTRAP_SHA256=8b02d4a7482e0f0a2b1da58f1c9c86830e96cc2f77f094f89e4681b19886bc38 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/tiles-collector-${COMMIT:0:7}" cache="$root/artifacts/build/cache" 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/dhmmasson/tilesCollector/archive/$COMMIT.tar.gz" "tilescollector-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://registry.npmjs.org/p5/-/p5-$P5.tgz" "p5-$P5.tgz" "$P5_NPM_SHA256" fetch "https://github.com/processing/p5.js/archive/refs/tags/v$P5.tar.gz" "p5js-$P5-src.tar.gz" "$P5_SRC_SHA256" fetch "https://registry.npmjs.org/bootstrap/-/bootstrap-$BOOTSTRAP.tgz" "bootstrap-$BOOTSTRAP.tgz" "$BOOTSTRAP_SHA256" rm -rf "$out" mkdir -p "$out/tree" "$out/boot" "$out/dist/vendor" "$out/dist/libraries/p5" "$out/dist/stylesheets" "$out/dist/assets" tar -xzf "$cache/tilescollector-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 tar -xzf "$cache/bootstrap-$BOOTSTRAP.tgz" -C "$out/boot" --strip-components 1 package/dist/css/bootstrap.min.css package/dist/js/bootstrap.bundle.min.js package/LICENSE echo "$P5_MIN_SHA256 $out/tree/libraries/p5/p5.min.js" | shasum -a 256 -c - tar -xzOf "$cache/p5-$P5.tgz" package/lib/p5.min.js | shasum -a 256 | grep -q "^$P5_MIN_SHA256" patch -s -p1 -d "$out/tree" < "$here/tiles-collector/tiles-collector-fredygames.patch" cp "$here/tiles-collector/index.html" "$out/dist/index.html" cp "$out/boot/dist/css/bootstrap.min.css" "$out/boot/dist/js/bootstrap.bundle.min.js" "$out/dist/vendor/" cp "$out/tree/libraries/p5/p5.min.js" "$out/dist/libraries/p5/" cp -R "$out/tree/src" "$out/dist/src" cp "$out/tree/stylesheets/styles.css" "$out/dist/stylesheets/" cp "$out/tree/assets/favicon.png" "$out/tree/assets/menu.html" "$out/tree/assets/sandboxModal.html" \ "$out/tree/assets/tutorial1.png" "$out/tree/assets/tutorial2_end.png" "$out/tree/assets/tutorial3.png" "$out/dist/assets/" { echo "== Tiles Collector (LICENSE do repositorio, MIT)" cat "$out/tree/LICENSE" echo echo "== p5.js $P5 (libraries/p5/p5.min.js): license.txt do fonte" tar -xzOf "$cache/p5js-$P5-src.tar.gz" "p5.js-$P5/license.txt" echo echo "== Bootstrap $BOOTSTRAP (vendor/): LICENSE" cat "$out/boot/LICENSE" } > "$out/licenses.txt" # dist/ vira um tar.gz deterministico (datas fixas, ordem fixa, sem dono). find "$out/dist" -exec touch -t 202510070000 {} + ( 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 > "tiles-collector-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$out/tree" "$out/boot" ls -l "$out/tiles-collector-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/tiles-collector-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"