#!/usr/bin/env bash # Compila o Block Drop (Brandon Dick / brandonp2412, MIT; github.com/brandonp2412/BlockDrop, 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-block-drop.sh # # Mudancas no jogo (block-drop/block-drop-fredygames.patch + as pastas apagadas abaixo): # - sai o multiplayer inteiro (LAN, Wi-Fi Direct, QR: lan_network/wifi_direct/qr_flutter/flutter_zxing, lib/multiplayer/, # as telas multiplayer_*, opponent_board), o aviso de versao nova (update_notice*, whats_new_screen, package_info_plus, # assets/changelogs), a escolha de audio proprio (file_picker, path_provider), os links da tela About (url_launcher), # o botao Quit e o Talker (talker_flutter vira uma classe minima com as mesmas chamadas); # - na web o audio usa os .mp3 (o .ogg nao toca no Safari) e nenhum Platform.isX roda fora de !kIsWeb; # - pubspec.lock acompanha (a build usa pub get --enforce-lockfile); dev_dependencies de teste/ferramentas saem. # A pasta web/ do projeto (PWA, manifest, icones, service worker) e trocada pelas pecas de flutter-web/. As pastas das # outras plataformas, os testes, o AGENTS.md (instrucoes do autor para agentes de IA) e o submodulo flutter/ nao vao # na build; o tar.gz do fonte que fica ao lado do jogo e o do autor, exato. # # Saida: artifacts/build/block-drop-/{block-drop-web.tar.gz, block-drop-.tar.gz, SHA256SUMS}, conferidos # pelo bundle.yaml do jogo. set -euo pipefail COMMIT=360ab5500ae712e9287824f41e2046b7253b887d SHA256=726397279d62ec3e462d573cd907bb528044d753ab9ed3333e2dc0f790179109 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/block-drop-${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/block-drop-${COMMIT:0:7}.tar.gz" ]; then curl -fsSL --retry 4 "https://codeload.github.com/brandonp2412/BlockDrop/tar.gz/$COMMIT" \ -o "$cache/block-drop-${COMMIT:0:7}.tar.gz.partial" && mv "$cache/block-drop-${COMMIT:0:7}.tar.gz.partial" "$cache/block-drop-${COMMIT:0:7}.tar.gz" fi echo "$SHA256 $cache/block-drop-${COMMIT:0:7}.tar.gz" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/project" tar -xzf "$cache/block-drop-${COMMIT:0:7}.tar.gz" -C "$out/project" --strip-components 1 cd "$out/project" # Fora da build: outras plataformas, testes, CI, instrucoes de agente, o submodulo do Flutter e o que so o multiplayer, # o aviso de versao e a escolha de audio usavam. rm -rf android ios macos windows linux snap fastlane metadata .github .vscode flutter docs scripts \ test integration_test patrol_test test_driver debug_tcp_server.dart devtools_options.yaml Gemfile Gemfile.lock \ AGENTS.md CONTRIBUTING.md \ lib/multiplayer assets/changelogs lib/terminal_columns_io.dart lib/terminal_columns_stub.dart \ lib/update_notice.dart lib/update_notice_snackbar.dart lib/screens/whats_new_screen.dart \ lib/screens/multiplayer_*.dart lib/widgets/opponent_board.dart patch -s -E -p1 < "$here/block-drop/block-drop-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" block-drop "Block Drop" '#121212' '#ffffff' ( 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/block-drop-web.tar.gz" cp "$cache/block-drop-${COMMIT:0:7}.tar.gz" "$out/block-drop-${COMMIT:0:7}.tar.gz" ( cd "$out" && shasum -a 256 block-drop-web.tar.gz block-drop-${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"