#!/usr/bin/env bash # Monta o Seven Towers (tower defense de Amelia Clarke, MIT; repositorio selenebun/towerdefense, commit 78075b1): HTML + JavaScript # puro com p5.js 0.5.16 (LGPL-2.1), p5.sound 0.3.7 (MIT) e lz-string 1.4.4 (WTFPL), sem etapa de build. Mudancas # (seven-towers/seven-towers.patch): nome novo na interface, sem o link para o editor de mapas externo, e sem tres sons que o autor # tirou de um site sem licenca declarada (boom, railgun, spark; os arquivos nao entram no bundle e o codigo passa a ignora-los). # Os arquivos .wav restantes (missile, pop, taunt: CC BY 3.0; sniper: dominio publico) e o README de creditos ficam. # # O p5.js e LGPL: o fonte da versao servida (tag 0.5.16 de processing/p5.js) vai junto, como "sources" do bundle. # # src/FredGames.Bundler/Builds/build-seven-towers.sh # # Saida: artifacts/build/seven-towers-78075b1/{seven-towers-78075b1-dist.tar.gz,licenses.txt}; o tar.gz (pasta dist/) sai igual em # dois builds seguidos. set -euo pipefail COMMIT=78075b15324c774094868efcb40447b072be999f SHA256=bb1c283af5cffc0ccdc601908c9d941e93087ba5164ba739e4c1b78be54a2266 P5=0.5.16 P5_NPM_SHA256=ed61db8b0424c8a888361d88fde7fcb622fd0e6d7b91aaf9ef454d483aeea2b4 P5_MIN_SHA256=6d73d4f87bed477b4fd486076551051f3119f69e73918f062cf9ce9c95d6ebb9 P5_060_NPM_SHA256=89b80415525e144dc37fc2888c0a1f31cec8f8689a0d02e34505afa7301ac5ee P5SOUND_MIN_SHA256=dcc067023b09a9f771f6b7f3c09d6490028c79a61c6c990e386c545fd2e04e87 P5SOUND_COMMIT=f17b5c0b1f4a7236e1603b55b8160232fdd1ee10 P5SOUND_SHA256=90191f32c71fb6886bd8e1f67a718068b33b50f3209aca1033200ee47f3fe894 LZ=1.4.4 LZ_NPM_SHA256=461a7efc50783b0070fcb7b80cea183c4483cd99a724de6ba6d4c74583f9f52e LZ_MIN_SHA256=9d1a0ef07a2ea5faa8cd4afb60a0518075e6771e341e5ff4e0e481cefedeecbf FONTS_COMMIT=9862abc066c9b83bf84c3e8ed1fc2d8d48f9bbf0 SCP_OFL_SHA256=cb30d3086a8b3ce0b9e3690bf48d6620402b61160bc658076f95180ccd9e9dae SCP_TTF_SHA256=2967dd73df838d2a2d390a638c6d7cfe9cd60c5ee2e162d8a1c10a70ea742b5c here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/seven-towers-${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/selenebun/towerdefense/archive/$COMMIT.tar.gz" "towerdefense-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://registry.npmjs.org/p5/-/p5-$P5.tgz" "p5-$P5.tgz" "$P5_NPM_SHA256" fetch "https://registry.npmjs.org/p5/-/p5-0.6.0.tgz" "p5-0.6.0.tgz" "$P5_060_NPM_SHA256" fetch "https://github.com/processing/p5.js-sound/archive/$P5SOUND_COMMIT.tar.gz" "p5sound-${P5SOUND_COMMIT:0:7}.tar.gz" "$P5SOUND_SHA256" fetch "https://registry.npmjs.org/lz-string/-/lz-string-$LZ.tgz" "lz-string-$LZ.tgz" "$LZ_NPM_SHA256" fetch "https://raw.githubusercontent.com/google/fonts/$FONTS_COMMIT/ofl/sourcecodepro/OFL.txt" "OFL-sourcecodepro-${FONTS_COMMIT:0:7}.txt" "$SCP_OFL_SHA256" rm -rf "$out" mkdir -p "$out/tree" "$out/dist" tar -xzf "$cache/towerdefense-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 cd "$out/tree" # as bibliotecas do repositorio sao as dos pacotes oficiais, byte a byte echo "$P5_MIN_SHA256 scripts/lib/p5.min.js" | shasum -a 256 -c - echo "$P5SOUND_MIN_SHA256 scripts/lib/p5.sound.min.js" | shasum -a 256 -c - echo "$LZ_MIN_SHA256 scripts/lib/lz-string.min.js" | shasum -a 256 -c - echo "$SCP_TTF_SHA256 fonts/SourceCodePro-Regular.ttf" | shasum -a 256 -c - tar -xzOf "$cache/p5-$P5.tgz" package/lib/p5.min.js | shasum -a 256 | grep -q "^$P5_MIN_SHA256" tar -xzOf "$cache/p5-0.6.0.tgz" package/lib/addons/p5.sound.min.js | shasum -a 256 | grep -q "^$P5SOUND_MIN_SHA256" tar -xzOf "$cache/lz-string-$LZ.tgz" package/libs/lz-string.min.js | shasum -a 256 | grep -q "^$LZ_MIN_SHA256" patch -s -p1 < "$here/seven-towers/seven-towers.patch" rm sounds/boom.wav sounds/railgun.wav sounds/spark.wav cd "$out" cp -R tree/index.html tree/style.css tree/scripts tree/fonts tree/sounds "$out/dist/" if grep -rhE 'https?://' dist/index.html dist/style.css dist/scripts/*.js | grep -vE '^\s*//'; then echo "Sobrou referencia externa (acima)." >&2 exit 1 fi { echo "== p5.js $P5 (scripts/lib/p5.min.js): license.txt of the p5 package" tar -xzOf "$cache/p5-$P5.tgz" package/license.txt echo echo "== p5.sound 0.3.7 (scripts/lib/p5.sound.min.js): LICENSE of processing/p5.js-sound at ${P5SOUND_COMMIT:0:7}" tar -xzOf "$cache/p5sound-${P5SOUND_COMMIT:0:7}.tar.gz" "p5.js-sound-$P5SOUND_COMMIT/LICENSE" echo echo "== lz-string $LZ (scripts/lib/lz-string.min.js): LICENSE.txt of the lz-string package" tar -xzOf "$cache/lz-string-$LZ.tgz" package/LICENSE.txt echo echo "== Source Code Pro (fonts/SourceCodePro-Regular.ttf): OFL.txt" cat "$cache/OFL-sourcecodepro-${FONTS_COMMIT:0:7}.txt" } > "$out/licenses.txt" # dist/ vira um tar.gz deterministico (datas fixas, ordem fixa, sem dono). find "$out/dist" -exec touch -t 202012070000 {} + ( 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 > "seven-towers-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$out/tree" ls -l "$out/seven-towers-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/seven-towers-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"