#!/usr/bin/env bash # Compila o Ricochlime (adil192, AGPL-3.0; github.com/adil192/ricochlime, Flutter + Flame) para a web com o # Flutter 3.47.1 oficial (flutter-web/env.sh instala em artifacts/tools/flutter), em dart2js + CanvasKit # completo auto-hospedado (sem CDN do Google, sem Google Fonts em tempo de execucao, sem service worker). # # src/FredGames.Bundler/Builds/build-ricochlime.sh # # Mudancas no jogo (ricochlime/ricochlime-fredygames.patch, sao as do patches/foss.sh do autor): # - sai o in_app_purchase (compras de moedas) e entra a classe vazia _iap_foss.dart do proprio autor; # - pubspec.lock sem os pacotes do in_app_purchase (a build usa pub get --enforce-lockfile); # - volumes de musica e efeitos comecam em 50% (o original comeca mudo e o jogador nao saberia onde ligar). # A pasta web/ do projeto (PWA, manifest, icones, pagina de privacidade do autor) e trocada pelas pecas de # flutter-web/ (index.html com CSP, bootstrap sem service worker, isolamento do localStorage). # # Saida: artifacts/build/ricochlime-/{ricochlime-web.tar.gz, ricochlime-.tar.gz (o fonte # exato do autor), ricochlime-web.sha256}, conferidos pelo bundle.yaml do jogo. set -euo pipefail COMMIT=c85173213f6028af3c5e003d637da70da5fbec2d SHA256=1da57823238260bf74c2b59d2ec5635f0509b5de664f62a1b675adddfc3ea7de here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/ricochlime-${COMMIT:0:7}" cache="$root/artifacts/build/cache" mkdir -p "$cache" # shellcheck source=flutter-web/env.sh source "$here/flutter-web/env.sh" if [ ! -f "$cache/ricochlime-${COMMIT:0:7}.tar.gz" ]; then curl -fsSL --retry 4 "https://codeload.github.com/adil192/ricochlime/tar.gz/$COMMIT" \ -o "$cache/ricochlime-${COMMIT:0:7}.tar.gz.partial" && mv "$cache/ricochlime-${COMMIT:0:7}.tar.gz.partial" "$cache/ricochlime-${COMMIT:0:7}.tar.gz" fi echo "$SHA256 $cache/ricochlime-${COMMIT:0:7}.tar.gz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/project" tar -xzf "$cache/ricochlime-${COMMIT:0:7}.tar.gz" -C "$out/project" --strip-components 1 cd "$out/project" patch -s -E -p1 < "$here/ricochlime/ricochlime-fredygames.patch" # web/ do projeto: so o que o build precisa (o index.html final sai do post.sh). rm -rf web mkdir web cp "$here/flutter-web/flutter_bootstrap.js" web/flutter_bootstrap.js cp "$here/flutter-web/index.html.in" web/index.html flutter pub get --enforce-lockfile > "$out/pub-get.log" 2>&1 || { tail -30 "$out/pub-get.log" >&2; exit 1; } flutter build web --release --no-web-resources-cdn --no-source-maps --no-wasm-dry-run > "$out/build.log" 2>&1 || { tail -40 "$out/build.log" >&2; exit 1; } "$here/flutter-web/post.sh" build/web "$out/web" ricochlime Ricochlime '#10140f' '#e6e0e9' \ ' ' ( cd "$out" && find web -type f | LC_ALL=C sort > "$out/web-files.txt" ) ( cd "$out" && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n \ -cf - -T "$out/web-files.txt" ) | gzip -n -9 > "$out/ricochlime-web.tar.gz" cp "$cache/ricochlime-${COMMIT:0:7}.tar.gz" "$out/ricochlime-${COMMIT:0:7}.tar.gz" ( cd "$out" && shasum -a 256 ricochlime-web.tar.gz ricochlime-${COMMIT:0:7}.tar.gz && cd web && find . -type f -print0 | LC_ALL=C sort -z | xargs -0 shasum -a 256 ) > "$out/SHA256SUMS" head -2 "$out/SHA256SUMS" du -sh "$out/web"