#!/usr/bin/env bash # Compila o Boohu (roguelike coffee-break de Yon / anaseto, ISC) para a web a partir do fonte, # num commit fixo, com Go 1.18.10 (o jogo nao tem go.mod: so a biblioteca padrao; o README pede Go 1.11+): # GOOS=js GOARCH=wasm go build --tags js (como o README do autor) # Sem mudancas no jogo. A pagina que hospeda (canvas + wasm_exec.js) e nossa: Content/games/boohu/play.html. # # src/FredGames.Bundler/Builds/build-boohu.sh # # O jogo so usa a biblioteca padrao do Go (sem modulos). O wasm_exec.js e o do proprio # Go 1.18.10 (misc/wasm). Ferramentas em artifacts/tools/go-1.18.10. # Saida: artifacts/build/boohu-0c70f81/{main.wasm,wasm_exec.js,boohu-0c70f81.tar.gz}; # main.wasm tem que sair igual em dois builds seguidos. set -euo pipefail SLUG=boohu COMMIT=0c70f810f88a2c8697037b4d532ee788a97a572c SHA256=523637bf58b6c2abeff784cccdcfc02f966ba522583243f9691f8e6007ad2ce0 URL="https://github.com/anaseto/boohu/archive/$COMMIT.tar.gz" GO=1.18.10 GO_SHA256_ARM64=718b32cb2c1d203ba2c5e6d2fc3cf96a6952b38e389d94ff6cdb099eb959dade GO_SHA256_AMD64=5614904f2b0b546b1493f294122fea7d67b2fbfc2efe84b1ab560fb678502e1f here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/$SLUG-${COMMIT:0:7}" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" 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 - } case "$(uname -m)" in arm64) goarch=arm64; gosha=$GO_SHA256_ARM64 ;; *) goarch=amd64; gosha=$GO_SHA256_AMD64 ;; esac if [ ! -x "$tools/go-$GO/bin/go" ]; then fetch "https://go.dev/dl/go$GO.darwin-$goarch.tar.gz" "go$GO.darwin-$goarch.tar.gz" "$gosha" rm -rf "$tools/go-$GO.tmp"; mkdir -p "$tools/go-$GO.tmp" tar -xzf "$cache/go$GO.darwin-$goarch.tar.gz" -C "$tools/go-$GO.tmp" --strip-components 1 mv "$tools/go-$GO.tmp" "$tools/go-$GO" fi export GOROOT="$tools/go-$GO" export PATH="$GOROOT/bin:$PATH" export GOPATH="$cache/gopath-$SLUG" GOCACHE="$cache/gocache-$SLUG" export GOFLAGS=-modcacherw GOTOOLCHAIN=local CGO_ENABLED=0 GO111MODULE=off [ "$(go env GOVERSION)" = "go$GO" ] || { echo "Go inesperado: $(go version)"; exit 1; } fetch "$URL" "$SLUG-${COMMIT:0:7}.tar.gz" "$SHA256" rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/$SLUG-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 # Fonte publicado (sem alteracoes): o tarball do commit, regravado em tar deterministico. ( cd "$out/tree" && find . -type f | sed 's|^\./||' | LC_ALL=C sort > "$out/files.txt" ) ( cd "$out/tree" && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n \ -cf - -T "$out/files.txt" ) | gzip -n -9 > "$out/$SLUG-${COMMIT:0:7}.tar.gz" cd "$out/tree" GOOS=js GOARCH=wasm go build -trimpath -buildvcs=false -ldflags="-buildid=" --tags js -o "$out/main.wasm" . cp "$GOROOT/misc/wasm/wasm_exec.js" "$out/wasm_exec.js" ls -l "$out/main.wasm" "$out/wasm_exec.js" shasum -a 256 "$out/main.wasm" "$out/wasm_exec.js" "$out/$SLUG-${COMMIT:0:7}.tar.gz"