#!/usr/bin/env bash # Compila o Clean Line (puzzle de trilhos e lixo de Jesus Gonzalez, Ludum Dare 58; zlib; fonte Kenney Pixel, CC0; # macroquad 0.4.14, MIT ou Apache-2.0) em WebAssembly, a partir do commit 6b3d800 de github.com/jesusmgg/train-ld58, # como o README do autor: "cargo build --release --target wasm32-unknown-unknown" (Cargo.lock dele, "--locked", # Rust 1.92.0 de artifacts/tools). Ele nao precisa de wasm-bindgen: o macroquad roda com o mq_js_bundle.js do proprio # crate (js/mq_js_bundle.js, a mesma versao do macroquad). A pagina (clean-line/index.html) e nossa; o codigo do jogo nao # e alterado. As imagens estao no Git LFS do autor (o tarball so traz ponteiros): clean-line/lfs-fetch.py baixa os # objetos reais da API LFS dele e confere o sha256 de cada um. # # src/FredGames.Bundler/Builds/build-clean-line.sh # # Saida: artifacts/build/clean-line-6b3d800/{dist/,clean-line-6b3d800-dist.tar.gz,licenses.txt}; o .tar.gz # (pasta dist/) tem que sair igual em dois builds seguidos. set -euo pipefail COMMIT=6b3d8004afe4738a9a091ca4eeec6bdbf1a8966b SHA256=6c7dcee0b86955789393e2ff584c86079dcea752d0bf76a5892aa4000915237d TOOLCHAIN=1.92.0 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/clean-line-${COMMIT:0:7}" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" export RUSTUP_HOME="$tools/rustup" CARGO_HOME="$tools/cargo" export PATH="$CARGO_HOME/bin:$PATH" mkdir -p "$cache" if [ ! -f "$cache/clean-line-${COMMIT:0:7}.tar.gz" ]; then curl -fsSL --retry 4 "https://github.com/jesusmgg/train-ld58/archive/$COMMIT.tar.gz" -o "$cache/clean-line-${COMMIT:0:7}.tar.gz.partial" mv "$cache/clean-line-${COMMIT:0:7}.tar.gz.partial" "$cache/clean-line-${COMMIT:0:7}.tar.gz" fi echo "$SHA256 $cache/clean-line-${COMMIT:0:7}.tar.gz" | shasum -a 256 -c - rustup toolchain install "$TOOLCHAIN" --profile minimal --target wasm32-unknown-unknown >/dev/null 2>&1 export RUSTUP_TOOLCHAIN="$TOOLCHAIN" rm -rf "$out"; mkdir -p "$out/tree" "$out/dist" tar -xzf "$cache/clean-line-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 tree="$out/tree" # As imagens (assets/**/*.png) estao no Git LFS do autor: o tarball so traz ponteiros. lfs-fetch.py baixa os objetos # da API LFS do repositorio dele e confere o sha256 de cada um (o oid do ponteiro). python3 -I "$here/clean-line/lfs-fetch.py" jesusmgg/train-ld58 "$tree/assets" ( cd "$tree" 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; } cargo metadata --locked --format-version 1 --filter-platform wasm32-unknown-unknown 2>/dev/null \ | python3 -I "$here/gridbugs/rust-licenses.py" clean_line "$out/crates.txt" ) # O mq_js_bundle.js e o que o proprio macroquad 0.4.14 publica (js/ do crate, conferido pelo sha256); o do template do # jogo e outra versao do arquivo, que da "register_plugin is not defined" no modo estrito. MQ_JS_SHA256=f4189c03de0b10cef3b710bdcadb22df7b835ccab5de52a3714e896e4fc48cd7 mq_js="$(ls "$CARGO_HOME"/registry/src/*/macroquad-0.4.14/js/mq_js_bundle.js)" echo "$MQ_JS_SHA256 $mq_js" | shasum -a 256 -c - cp "$tree/target/wasm32-unknown-unknown/release/clean_line.wasm" "$mq_js" "$out/dist/" cp "$here/clean-line/index.html" "$out/dist/index.html" cp -R "$tree/assets" "$out/dist/assets" { echo "== Clean Line (LICENSE do repositorio, zlib)" cat "$tree/LICENSE" echo echo "== CREDITS.md do repositorio" cat "$tree/CREDITS.md" echo echo "========================================================================" cat "$out/crates.txt" } > "$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 > "clean-line-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$tree" ls -l "$out/clean-line-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/clean-line-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"