#!/usr/bin/env bash # Prepara tres paciencias de milsaware ("ozboware"), em JavaScript e CSS puros, sem imagens: Golf (GPL-2.0, commit # 7dcd837), Aces Up (GPL-3.0, commit 796f7cb) e Clock Patience (GPL-3.0, commit 7e7111d). O jogo sai igual ao do # repositorio, com duas mudancas no index.html: o que aponta para o avatar do autor no # avatars.githubusercontent.com (requisicao a terceiro) e o titulo, que perde o prefixo "Javascript". # # src/FredGames.Bundler/Builds/build-milsaware-solitaires.sh # # Saida: artifacts/build/milsaware--/--site.tar.gz (pasta site/ com index.html e assets/). # Dois builds seguidos dao os mesmos bytes. set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" cache="$root/artifacts/build/cache" mkdir -p "$cache" build() { # repo commit sha256 slug "Titulo velho" "Titulo novo" local repo=$1 commit=$2 sha=$3 slug=$4 old=$5 new=$6 local tarball="$cache/$repo-${commit:0:7}.tar.gz" [ -f "$tarball" ] || curl -fsSL --retry 4 "https://github.com/milsaware/$repo/archive/$commit.tar.gz" -o "$tarball" echo "$sha $tarball" | shasum -a 256 -c - local out="$root/artifacts/build/milsaware-$slug-${commit:0:7}" rm -rf "$out"; mkdir -p "$out" tar -xzf "$tarball" -C "$out" --strip-components 1 rm -rf "$out/README.md" "$out/.git"* python3 -I - "$out/index.html" "$old" "$new" <<'PY' import sys p, old, new = sys.argv[1:] s = open(p, encoding="utf-8").read() icon = '\t\n' assert icon in s s = s.replace(icon, '\t\n') assert s.count(old) >= 1 s = s.replace(old, new) open(p, "w", encoding="utf-8", newline="").write(s) PY rm -f "$out/LICENSE" mkdir "$out/site" && mv "$out/index.html" "$out/assets" "$out/site/" find "$out/site" -exec touch -t 202611010000 {} + ( cd "$out" && find site -type f | LC_ALL=C sort > files.txt \ && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf - -T files.txt \ | gzip -n -9 > "$slug-${commit:0:7}-site.tar.gz" && rm -rf files.txt site \ && shasum -a 256 "$slug-${commit:0:7}-site.tar.gz" ) } build Javascript-Golf-Solitaire 7dcd837a788ecd727b5bd89145b138713f100c53 638f01f504e058654d67ad54c066289481eead8afda614d70e4a701b791b9f96 golf "Javascript Golf Solitaire" "Golf Solitaire" build Javascript-Aces-Up-Solitaire 796f7cb78731f0f35797976fa1f2166dcd231d73 019557983c4a7f2161135cc57b6939118a315eb44c90b4685b021e56adc89fec aces-up "Javascript Aces Up Solitaire" "Aces Up Solitaire" build Javascript-Clock-Patience-Solitaire 7e7111dd4310fe9fd3aef44304d60d455b50af60 eddf19a0efc73c99d131cd99b65f9d3a7a87187bff7e46524ea6b0aa01275d18 clock-patience "Javascript Clock Patience Solitaire" "Clock Patience Solitaire"