#!/usr/bin/env bash # Gera o snake-quest.pyxapp do Snake Quest (Patrick Godau, MIT) a partir do commit 2725cbc do repositorio # godaup/snake, com mudancas nossas (publicadas junto): # snake-quest/omegaconf.py um substituto pequeno do OmegaConf (o real exige PyYAML e ANTLR, que o Pyodide do # site nao traz); le os arquivos .pylit abaixo # snake-quest/yaml-to-pylit.py converte os YAML do jogo (fases, campanha, settings) em literais Python, lidos com # o OmegaConf 2.4.0 de verdade (venv em artifacts/tools/venv-omegaconf) # snake-quest/web.patch sem o item QUIT, sem a tecla Q na tela de game over (so congelam a pagina), o # perfil (recordes, cores) vai para /saves/snake-quest (IndexedDB), e o credito do # OmegaConf sai da tela de creditos # snake-quest/main.py o ponto de entrada (o jogo usa a linha de comando) # O .pyxapp leva o pacote snake_quest (sem testes, tools nem docs) e o LICENSE; zip deterministico # (Builds/pyxapp.py): dois builds seguidos dao o mesmo sha256. # # src/FredGames.Bundler/Builds/build-snake-quest.sh # # Saida: artifacts/build/snake-quest-2725cbc/snake-quest.pyxapp set -euo pipefail COMMIT=2725cbc503b68f05f836b5aafbed170b82e501b0 SHA256=cfd86582c008cbbabbc402c3fa2bfe1b85f103fd75ac3da7f758e33443640f18 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/snake-quest-2725cbc" cache="$root/artifacts/build/cache" venv="$root/artifacts/tools/venv-omegaconf" if [ ! -x "$venv/bin/python" ]; then python3 -m venv "$venv" "$venv/bin/pip" install -q "omegaconf==2.4.0" fi mkdir -p "$cache" tarball="$cache/snake-quest-2725cbc.tar.gz" [ -f "$tarball" ] || curl -fsSL "https://github.com/godaup/snake/archive/$COMMIT.tar.gz" -o "$tarball" echo "$SHA256 $tarball" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" "$out/app/snake_quest" tar -xzf "$tarball" -C "$out/tree" --strip-components 1 patch -d "$out/tree" -p1 < "$here/snake-quest/web.patch" rm -f "$out/tree/src/snake_quest/levels/_temp.yaml" "$venv/bin/python" -I "$here/snake-quest/yaml-to-pylit.py" "$out/tree/src/snake_quest" "$out/tree/src/snake_quest/levels" cp -R "$out/tree/src/snake_quest" "$out/app/snake_quest/snake_quest" cp "$out/tree/LICENSE" "$here/snake-quest/omegaconf.py" "$here/snake-quest/main.py" "$out/app/snake_quest/" python3 -I "$here/pyxapp.py" "$out/app/snake_quest" main.py "$out/snake-quest.pyxapp" shasum -a 256 "$out/snake-quest.pyxapp"