#!/usr/bin/env bash # Compila o Candy Box 2 (codigo GPL-3.0-or-later, arte ASCII CC BY-SA 3.0), de aniwey, a partir do commit # 35301d4 de candybox2/candybox2.github.io. O repositorio nao traz o JavaScript compilado (a GitHub # Action do autor o gera a cada push); este script faz o mesmo que .github/workflows/deploy.yml desse # commit: genAscii.py e genText.py geram code/gen/ a partir de ascii/ e text/, e o TypeScript 1.7.5 # (o pacote do npm, conferido pelo SHA-256) compila tudo com --target ES5. Diferencas: o JavaScript nao # e minificado (o autor passa o terser; aqui ele vai legivel, com o aviso de licenca no topo, como o # candybox2_uncompressed.js do autor), e antes de compilar aplicamos candybox2-fredygames.patch # (links de "carregar slot" e do modo dificil apontam para a propria pagina, nao para # candybox2.github.io; index.html e faq.html sem conteudo de outros sites; ver o patch). # # src/FredGames.Bundler/Builds/build-candybox2.sh # # Precisa do Node (usa artifacts/tools/node-v24.21.0) e do python3. Saida: # artifacts/build/candybox2-35301d4/{candybox2.js,index.html,faq.html}, que o bundle.yaml do jogo # confere pelo SHA-256. Dois builds seguidos dao os mesmos bytes. set -euo pipefail COMMIT=35301d438aa2c1e58e8cb3ea215b0af323bddf9b SHA256=ce45f19192ddfa30a9563ae38bacd3290a808ea0a1b007f5620b2c65c92e7f55 TS_VERSION=1.7.5 TS_SHA256=54dc3865c8aff5bfbdbb470514c8e01c9adbd175ef5746e77441bdfbc231f518 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/candybox2-${COMMIT:0:7}" cache="$root/artifacts/build/cache" node="$root/artifacts/tools/node-v24.21.0/bin/node" tarball="candybox2-$COMMIT.tar.gz" tstgz="typescript-$TS_VERSION.tgz" [ -x "$node" ] || { echo "Precisa do Node em $node." >&2; exit 1; } mkdir -p "$cache" [ -f "$cache/$tarball" ] || curl -fsSL --retry 6 "https://github.com/candybox2/candybox2.github.io/archive/$COMMIT.tar.gz" -o "$cache/$tarball" echo "$SHA256 $cache/$tarball" | shasum -a 256 -c - [ -f "$cache/$tstgz" ] || curl -fsSL --retry 6 "https://registry.npmjs.org/typescript/-/$tstgz" -o "$cache/$tstgz" echo "$TS_SHA256 $cache/$tstgz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/tree" "$out/typescript" tar -xzf "$cache/$tarball" -C "$out/tree" --strip-components 1 tar -xzf "$cache/$tstgz" -C "$out/typescript" --strip-components 1 patch -s -d "$out/tree" -p1 < "$here/candybox2-fredygames.patch" (cd "$out/tree/pythonScripts" && mkdir -p ../code/gen && PYTHONUTF8=1 python3 genAscii.py && PYTHONUTF8=1 python3 genText.py) # A ordem dos arquivos na linha de comando muda a ordem do JavaScript gerado (e um arquivo usado antes # de definido quebra o jogo). A GitHub Action do autor recebe os globs em ordem de bytes (LC_ALL=C); # o bash do macOS, com locale en_US.UTF-8, entrega outra ordem e o jogo quebra. A lista vem de # candybox2-file-order.py (confere com o candybox2_uncompressed.js que o autor publica). files=() while IFS= read -r f; do files+=("$f"); done < <(cd "$out/tree" && python3 "$here/candybox2-file-order.py" \ './libs/*.ts' './code/main/*.ts' './code/gen/*.ts' './code/arena/*/*.ts') (cd "$out/tree" && "$node" "$out/typescript/lib/tsc.js" "${files[@]}" --out ./candybox2_compiled.js --target ES5) cat "$out/tree/candybox2_sourceCodeLicense.txt" "$out/tree/candybox2_compiled.js" > "$out/candybox2.js" cp "$out/tree/index.html" "$out/tree/faq.html" "$out/" rm -rf "$out/tree" "$out/typescript" (cd "$out" && shasum -a 256 candybox2.js index.html faq.html)