#!/usr/bin/env bash # Build distributable desktop executables with the Godot export pipeline. # # Requirements: # - Godot 4.7.2 (or the version in project.godot `config/features`) on PATH, # with export templates installed (see docs/RELEASING.md). # - Run from the repository root. # # Produces: # build/gig-line-linux-.x86_64 # build/gig-line-windows-.exe # build/gig-line-macos-.zip # build/gig-line-web-.zip (Godot web build: static hosting, no threads) # build/gig-line-desktop-hq-.zip (optional Forward+ Linux/Windows) # set -euo pipefail GODOT="${GODOT:-godot}" VERSION="$(grep -oP 'config/version="\K[^"]+' project.godot)" PLAYER_DOCS=( "CREDITS.md" "PRIVACY.md" "docs/accessibility.md" "docs/known-limitations.md" ) mkdir -p build # Presets now embed the PCK into a single binary; drop stale .pck leftovers. rm -f build/*.pck echo "==> Exporting Linux (x86_64)" "$GODOT" --headless --export-release "Linux" "build/gig-line-linux-${VERSION}.x86_64" echo "==> Exporting Windows Desktop" "$GODOT" --headless --export-release "Windows Desktop" "build/gig-line-windows-${VERSION}.exe" echo "==> Exporting macOS" "$GODOT" --headless --export-release "macOS" "build/gig-line-macos-${VERSION}.zip" echo "==> Exporting Web (no threads, static-hosting friendly)" rm -rf build/web mkdir -p build/web "$GODOT" --headless --export-release "Web" "build/web/index.html" for doc in "${PLAYER_DOCS[@]}"; do cp "$doc" "build/web/$(basename "$doc")" done # Ship the web build as a single zip so it can be downloaded and served as-is. rm -f "build/gig-line-web-${VERSION}.zip" if command -v zip >/dev/null 2>&1; then (cd build/web && zip -q -r "../gig-line-web-${VERSION}.zip" .) else python3 - "$PWD/build/web" "$PWD/build/gig-line-web-${VERSION}.zip" <<'PYZIP' import os, sys, zipfile src, out = sys.argv[1], sys.argv[2] with zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED) as archive: for root, _dirs, files in os.walk(src): for name in files: path = os.path.join(root, name) archive.write(path, os.path.relpath(path, src)) PYZIP fi echo "==> Packaging optional Desktop HQ build (Forward+)" HQ_DIR="build/desktop-hq" rm -rf "$HQ_DIR" mkdir -p "$HQ_DIR" cp "build/gig-line-linux-${VERSION}.x86_64" "$HQ_DIR/" cp "build/gig-line-windows-${VERSION}.exe" "$HQ_DIR/" cp packaging/desktop_hq/override.cfg "$HQ_DIR/" cp packaging/desktop_hq/README.txt "$HQ_DIR/" for doc in "${PLAYER_DOCS[@]}"; do cp "$doc" "$HQ_DIR/$(basename "$doc")" done rm -f "build/gig-line-desktop-hq-${VERSION}.zip" if command -v zip >/dev/null 2>&1; then (cd "$HQ_DIR" && zip -q -r "../gig-line-desktop-hq-${VERSION}.zip" .) else python3 - "$PWD/$HQ_DIR" "$PWD/build/gig-line-desktop-hq-${VERSION}.zip" <<'PYZIP' import os, sys, zipfile src, out = sys.argv[1], sys.argv[2] with zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED) as archive: for root, _dirs, files in os.walk(src): for name in files: path = os.path.join(root, name) archive.write(path, os.path.relpath(path, src)) PYZIP fi rm -rf "$HQ_DIR" echo "" echo "Artifacts:" ls -la build/*"${VERSION}"* echo "" echo "Upload to: https://git.allucanget.biz/zwitschi/security-game/releases" echo "See docs/RELEASING.md for the full release checklist."