#!/usr/bin/env bash # Compila o Halma (Marvin / Crazy-Marvin e Martin / mmelnizky, Apache-2.0; github.com/Crazy-Marvin/Halma, Java + # libGDX 1.14.2) para a web com o modulo html do proprio projeto (GWT 2.10.0), JDK 17 do artifacts/tools e o Gradle # wrapper do projeto com GRADLE_USER_HOME em artifacts/build/cache/gradle-halma: # # src/FredGames.Bundler/Builds/build-halma.sh # # Mudancas (halma/halma-fredygames.patch + halma/fix-assets.py): # - localWorkers = 1 no compilador do GWT e a JVM com -XX:hashCode=3 (jw_det_hash): sem isso o JavaScript muda de uma # build para outra; # - so os modulos core e html entram na build (sem android nem desktop) e o Gradle do wrapper desce de 9.6.1 para 8.14.3 # (o gwt-gradle-plugin 1.1.16 usa JavaPluginConvention, que o Gradle 9 removeu); sha256 da distribuicao pinado; # - sem a tela Settings (so tinha a dificuldade, que o jogo nunca usa): a abertura vai direto ao menu; # - sai o Sentry (relatorio de erros para um servidor externo): ErrorMonitoring vira no-op, a dependencia sai e o botao # "Error & performance monitoring" some das configuracoes; # - sem links para outros sites (tela Sobre so com texto e botao de voltar); sem o seletor Online/Offline, que nao faz # nada; ajuda e tela de vitoria em ingles (eram em alemao; o texto das regras vinha de um manual de jogo), voltando ao # menu novo; so o idioma ingles; # - recursos: as tres fontes bitmap que estavam dentro do atlas (HALMA, uma exportacao da Arial, e as duas do skin Flat # Earth, de fonte de origem nao nomeada) viram Arimo, EB Garamond e Arvo Bold (SIL OFL 1.1; fix-assets.py as gera em # BMFont); saem a imagem da # Wikimedia (800px-Halma4.svg.png), um botao de outro jogo (b&w_DodgeGame_playButton.png), os skins antigos e as # traducoes. # index.html e nosso (java-web/index-gwt.html.in: CSP so desta origem, com 'unsafe-eval' que o carregador do GWT exige). # # Saida: artifacts/build/halma-/halma-web.tar.gz (o projeto extraido e patchado fica em project/). set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$here/java-web/env.sh" halma 17 jw_det_hash # sem isso o JavaScript do GWT muda de uma build para outra (hash de identidade dos objetos) COMMIT=0a258152994b1e6f373463ad4564fc9cb3adacdc SHA256=94cd86044f4d3bc955d53b3089d7b78dc2164b968b1cde69c2697962689f2d31 out="$root/artifacts/build/halma-${COMMIT:0:7}" py="$root/artifacts/tools/venv/bin/python" jw_fetch "https://codeload.github.com/Crazy-Marvin/Halma/tar.gz/$COMMIT" "$SHA256" "halma-${COMMIT:0:7}.tar.gz" ( cd "$here/halma" && shasum -a 256 -c - >/dev/null ) <<'SUMS' e43898b143ec826ac8cb4034816458a7047fbe0836558de2a1f8c6223ae3e0ca Arimo.ttf ef9512f92f6d579e5dc75af59a5a4b1b8b47d2eda89e00b954d44520e5369027 EBGaramond.ttf 6239b2edee762db0ab99343137c9ba15ae81fc843da2e76a0a395781748cc21f Arvo-Bold.ttf SUMS rm -rf "$out"; mkdir -p "$out/project" tar -xzf "$cache/halma-${COMMIT:0:7}.tar.gz" -C "$out/project" --strip-components 1 cd "$out/project" patch -s -E -p1 < "$here/halma/halma-fredygames.patch" "$py" -I "$here/halma/fix-assets.py" assets "$here/halma" jw_gradle :html:dist > "$out/gradle.log" 2>&1 || { tail -40 "$out/gradle.log" >&2; exit 1; } # GWT: html/html.nocache.js carrega o .cache.js; o resto de html/ (devmode, chrome, mapas) fica de fora jw_post html/build/dist "$out/web" halma Halma '#ffffff' '#202020' html/html.nocache.js gwt rm -rf "$out/web/html/gwt" "$out/web/html/html.devmode.js" "$out/web/html/compilation-mappings.txt" printf 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGNgYGD4DwABBAEAHnOcQAAAAABJRU5ErkJggg==' | base64 -d > "$out/web/html/logo.png" find "$out/web" -exec touch -t 202001010000 {} + cd "$out" jw_pack web halma-web.tar.gz cp "$cache/halma-${COMMIT:0:7}.tar.gz" "halma-${COMMIT:0:7}.tar.gz" ( shasum -a 256 halma-web.tar.gz "halma-${COMMIT:0:7}.tar.gz"; cd web && find . -type f -print0 | sort -z | xargs -0 shasum -a 256 ) > SHA256SUMS head -2 SHA256SUMS; du -sh web