#!/usr/bin/env bash # Compila o Dig Escape (TanTanDev; Rust + good-web-game; Apache-2.0) para WebAssembly, no commit 3ebbf66, como o # utils/wasm/build.sh do autor (cargo build --target wasm32-unknown-unknown --release; resources.tar embutido no .wasm). # O repositorio nao traz Cargo.lock e depende de ramos git sem versao (good-web-game "audio", mais quad-snd e # miniquad_text_rusttype, que o proprio good-web-game puxa do ramo principal), entao fixamos tudo: # dig-escape/pin-good-web-game.patch troca branch = "audio" por rev = 2685d96 (a ponta do ramo, de 2020-05-21) # dig-escape/Cargo.lock resolvido com quad-snd em e12ecbb (2020-05-01, o ultimo antes do jogo) e # miniquad_text_rusttype em bd4477a (2020-05-07, a ponta); crates.io na epoca da build # O resources.tar (mapas, texturas, sons e so a fonte Kenney Mini + a licenca dela; o jogo nao usa as outras fontes) e # gerado aqui, deterministico. A pagina (dig-escape/index.html, start.js) e nossa; gl.js e audio.js sao os do # utils/wasm do jogo, sem mudanca. O codigo do jogo nao muda. # # src/FredGames.Bundler/Builds/build-dig-escape.sh # # Saida: artifacts/build/dig-escape/{dist/, dig-escape--dist.tar.gz, dig-escape-licenses.txt}; o .tar.gz tem que # sair igual em dois builds seguidos (CODEGEN_UNITS=1, caminhos remapeados). set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" mkdir -p "$cache" export RUSTUP_HOME="$tools/rustup" CARGO_HOME="$tools/cargo" export PATH="$CARGO_HOME/bin:$PATH" TOOLCHAIN=1.92.0 COMMIT=3ebbf665263c8103c7ea43d779f567c972ddbe12 SHA256=f72b11b983242b933cd2570b639781c2d071760d059341bedd0502c99273485e fetch() { # url arquivo sha256 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 - >/dev/null } slug=dig-escape out="$root/artifacts/build/$slug" tree="$root/artifacts/build/$slug/tree" fetch "https://github.com/TanTanDev/DigEscape/archive/$COMMIT.tar.gz" "$slug-${COMMIT:0:7}.tar.gz" "$SHA256" rustup toolchain install "$TOOLCHAIN" --profile minimal --target wasm32-unknown-unknown >/dev/null 2>&1 export RUSTUP_TOOLCHAIN="$TOOLCHAIN" rm -rf "$out"; mkdir -p "$tree" "$out/dist" tar -xzf "$cache/$slug-${COMMIT:0:7}.tar.gz" -C "$tree" --strip-components 1 ( cd "$tree" patch -p1 < "$here/dig-escape/pin-good-web-game.patch" >/dev/null cp "$here/dig-escape/Cargo.lock" Cargo.lock ( cd resources find maps textures sounds "kenny_fontpackage/Fonts/Kenney Mini.ttf" kenny_fontpackage/License.txt -type f | LC_ALL=C sort > ../files.txt COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf ../src/resources.tar -T ../files.txt ) CARGO_INCREMENTAL=0 CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 \ RUSTFLAGS="--remap-path-prefix=$tree=/src --remap-path-prefix=$CARGO_HOME=/cargo" \ cargo build --locked --release --target wasm32-unknown-unknown 2> "$out/cargo.log" \ || { tail -40 "$out/cargo.log"; exit 1; } cp target/wasm32-unknown-unknown/release/dig_escape.wasm "$out/dist/" cp utils/wasm/gl.js utils/wasm/audio.js "$out/dist/" cargo metadata --locked --format-version 1 --filter-platform wasm32-unknown-unknown 2>/dev/null > "$out/metadata.json" python3 -I "$here/gridbugs/rust-licenses.py" dig_escape "$out/crates.txt" < "$out/metadata.json" ) cp "$here/dig-escape/index.html" "$here/dig-escape/start.js" "$out/dist/" { echo "Dig Escape - licences of the build" echo "==================================" echo echo "Source: https://github.com/TanTanDev/DigEscape at commit $COMMIT, licensed under the Apache License 2.0 (file LICENSE)." echo "The game's font is Kenney Mini (CC0, Kenney, www.kenney.nl); its licence file is embedded in the game's resources." echo echo "------------------------------------------------------------------------" echo "LICENSE" echo "------------------------------------------------------------------------" cat "$tree/LICENSE"; echo echo "------------------------------------------------------------------------" echo "resources/kenny_fontpackage/License.txt" echo "------------------------------------------------------------------------" cat "$tree/resources/kenny_fontpackage/License.txt"; echo echo "========================================================================" cat "$out/crates.txt" } > "$out/$slug-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 > "$slug-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$tree" "$out/metadata.json" ls -l "$out/$slug-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/$slug-${COMMIT:0:7}-dist.tar.gz" "$out/$slug-licenses.txt" "$out/dist/dig_escape.wasm"