#!/usr/bin/env bash # Compila o Signalworks (quebra-cabeca de assembly, de Charlie Krug, MIT; TypeScript + Vite) a partir do commit # 63554ea de github.com/ctkrug/signalworks: "npm ci" com o package-lock.json do autor (Node 24.21.0 de # artifacts/tools) e "vite build" (base relativa, saida em dist/). Mudancas nossas (signalworks/signalworks-fredygames.patch): # - index.html: sem as fontes do Google Fonts (preconnect + stylesheet), sem o rodape com links para o GitHub e o # portfolio do autor, sem o twitter:card e sem a citacao de jogos de terceiros (TIS-100, EXAPUNKS, Zachtronics) # no texto de descricao e na secao "about"; # - src/styles.css: @font-face das fontes OFL (JetBrains Mono e Space Grotesk, arquivos originais do google/fonts no # commit 2fe1e8c), copiadas para src/fonts/ e empacotadas pelo Vite. # # src/FredGames.Bundler/Builds/build-signalworks.sh # # Saida: artifacts/build/signalworks-63554ea/{signalworks-63554ea-dist.tar.gz,licenses.txt}; o tar.gz tem que sair # igual em dois builds. set -euo pipefail COMMIT=63554ea348e425c27fe02a9b886e2c5b1daf5c10 SHA256=32fb0f1cec197901483435b98dfafdcccf90e652f8cc7b21274d9dbc25fc9f2a NODE=24.21.0 FONTS=2fe1e8c6b137fb13041a7cfca6fdcd8a910ea4dc JB_SHA256=48715a42ec242c21e9f02692891e147d022299a52e48d5e413e1a942193ffeda JB_OFL_SHA256=b2fe5e8987594e9ffd1d2ca52a2f5d73eb8335243893c5d6254b5ad69269591d SG_SHA256=acad6de1fc93436f5c0f1f4137751ef04f1aea3063e7036535970ffcfbd79f72 SG_OFL_SHA256=564ce565c371c5e5bbf286006565a7c9aa55a9f56e7ca58d56e05d649dd61a72 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/signalworks-${COMMIT:0:7}" cache="$root/artifacts/build/cache" nodebin="$root/artifacts/tools/node-v$NODE/bin" [ -x "$nodebin/node" ] && [ "$("$nodebin/node" -v)" = "v$NODE" ] || { echo "Precisa do Node $NODE em $nodebin." >&2; exit 1; } export PATH="$nodebin:$PATH" mkdir -p "$cache" fetch() { if [ ! -f "$cache/$2" ]; then curl -fsSL --retry 4 "$1" -o "$cache/$2.partial" && mv "$cache/$2.partial" "$cache/$2" fi echo "$3 $cache/$2" | shasum -a 256 -c - } gf="https://raw.githubusercontent.com/google/fonts/$FONTS/ofl" fetch "https://github.com/ctkrug/signalworks/archive/$COMMIT.tar.gz" "signalworks-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "$gf/jetbrainsmono/JetBrainsMono%5Bwght%5D.ttf" "JetBrainsMono-Variable-$FONTS.ttf" "$JB_SHA256" fetch "$gf/jetbrainsmono/OFL.txt" "JetBrainsMono-OFL-$FONTS.txt" "$JB_OFL_SHA256" fetch "$gf/spacegrotesk/SpaceGrotesk%5Bwght%5D.ttf" "SpaceGrotesk-Variable-$FONTS.ttf" "$SG_SHA256" fetch "$gf/spacegrotesk/OFL.txt" "SpaceGrotesk-OFL-$FONTS.txt" "$SG_OFL_SHA256" rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/signalworks-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 cd "$out/tree" patch -s -p1 < "$here/signalworks/signalworks-fredygames.patch" mkdir -p src/fonts cp "$cache/JetBrainsMono-Variable-$FONTS.ttf" src/fonts/JetBrainsMono-Variable.ttf cp "$cache/SpaceGrotesk-Variable-$FONTS.ttf" src/fonts/SpaceGrotesk-Variable.ttf npm ci --ignore-scripts --no-audit --no-fund --cache "$cache/npm-signalworks" > "$out/install.log" 2>&1 || { tail -20 "$out/install.log"; exit 1; } NO_COLOR=1 node_modules/.bin/tsc --noEmit NO_COLOR=1 node_modules/.bin/vite build > "$out/vite.log" 2>&1 || { tail -30 "$out/vite.log"; exit 1; } [ -s dist/index.html ] && [ -d dist/assets ] if grep -rqE "https?://(fonts\.|apps\.|github\.com|www\.google)" dist; then echo "o build ainda cita um servico de terceiros" >&2; exit 1 fi { echo "== Signalworks (LICENSE do repositorio, MIT)" cat LICENSE echo echo "== JetBrains Mono (SIL Open Font License 1.1; arquivo original do google/fonts no commit ${FONTS:0:7})" cat "$cache/JetBrainsMono-OFL-$FONTS.txt" echo echo "== Space Grotesk (SIL Open Font License 1.1; arquivo original do google/fonts no commit ${FONTS:0:7})" cat "$cache/SpaceGrotesk-OFL-$FONTS.txt" } > "$out/licenses.txt" cp -R dist "$out/dist" find "$out/dist" -exec touch -t 202611040000 {} + ( cd "$out" && find dist -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 > "signalworks-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) du -sh "$out/dist" cd "$out" && rm -rf tree ls -l "$out/signalworks-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/signalworks-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"