#!/usr/bin/env bash # Compila o Tri Peaks Neue (Oguz Tas / mimoguz, AGPL-3.0; github.com/mimoguz/tripeaks_neue, Flutter) 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 service worker). # # src/FredGames.Bundler/Builds/build-tripeaks-neue.sh # # Mudancas no jogo (tripeaks-neue/tripeaks-neue-fredygames.patch + as pastas apagadas abaixo): # - sem os 9 sons (sounds/*.mp3, que o repositorio nao credita um a um): o pacote audioplayers sai, "som ligado" vira # silencio e o botao e a opcao de som somem das telas; # - sem handy_window, file_picker, path_provider e xdg_desktop_portal (so desktop/mobile): a gravacao sempre usa o # web_io.dart do proprio autor (localStorage) e a importacao/exportacao das estatisticas usa o navegador (campo de # arquivo e link de download, via package:web) em vez do file_picker; # - dev_dependencies de geracao de codigo saem (os .g.dart ja estao no repositorio); pubspec.lock acompanha (a build # usa pub get --enforce-lockfile). # A pasta web/ do projeto (PWA, manifest, icones, service worker) e trocada pelas pecas de flutter-web/. As pastas das # outras plataformas, os testes e os scripts de empacotamento nao vao na build; o tar.gz do fonte que fica ao lado do # jogo e o do autor, exato. # # Saida: artifacts/build/tripeaks-neue-/{tripeaks-neue-web.tar.gz, tripeaks-neue-.tar.gz, SHA256SUMS}, # conferidos pelo bundle.yaml do jogo. set -euo pipefail COMMIT=d701d4b143f45821b601395849ce3baa8cad8edd SHA256=871db4e723c7024380102885b1916c355ed187f75eed3b4a14621d60b8b1b909 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/tripeaks-neue-${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/tripeaks-neue-${COMMIT:0:7}.tar.gz" ]; then curl -fsSL --retry 4 "https://codeload.github.com/mimoguz/tripeaks_neue/tar.gz/$COMMIT" \ -o "$cache/tripeaks-neue-${COMMIT:0:7}.tar.gz.partial" && mv "$cache/tripeaks-neue-${COMMIT:0:7}.tar.gz.partial" "$cache/tripeaks-neue-${COMMIT:0:7}.tar.gz" fi echo "$SHA256 $cache/tripeaks-neue-${COMMIT:0:7}.tar.gz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/project" tar -xzf "$cache/tripeaks-neue-${COMMIT:0:7}.tar.gz" -C "$out/project" --strip-components 1 cd "$out/project" # Fora da build: outras plataformas, testes, CI, empacotamento, os 9 sons e o armazenamento em arquivo (so desktop/mobile). rm -rf android ios macos windows linux test .github .vscode metadata sounds AppImageBuilder.yml build-apk.sh \ build-bundle.sh build-web.sh devtools_options.yaml lint-metainfo.sh set-flutter-version.sh release_checklist.md \ privacy_policy.md lib/util/local_io.dart patch -s -E -p1 < "$here/tripeaks-neue/tripeaks-neue-fredygames.patch" 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" tripeaks-neue "Tri Peaks Neue" '#1b1b1f' '#e3e2e6' ( 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/tripeaks-neue-web.tar.gz" cp "$cache/tripeaks-neue-${COMMIT:0:7}.tar.gz" "$out/tripeaks-neue-${COMMIT:0:7}.tar.gz" ( cd "$out" && shasum -a 256 tripeaks-neue-web.tar.gz tripeaks-neue-${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"