#!/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"