#!/usr/bin/env bash # Build the games binary, bundle it with deploy files into a tarball, # base64-encode it, and split into 25MB chunks for transfer. set -euo pipefail REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)" cd "$REPO_DIR" TIMESTAMP=$(date +%Y%m%d-%H%M%S) TARBALL="games-deploy-${TIMESTAMP}.tar.gz" BASE64_FILE="games-deploy-${TIMESTAMP}_b64.txt" #============================================================================== # Clean previous artifacts #============================================================================== echo "--- Cleaning old artifacts ---" rm -f ./games games-deploy-*.tar.gz games-deploy-*_b64*.txt #============================================================================== # Build #============================================================================== echo "--- Building CSS ---" go tool gotailwind -i assets/css/input.css -o assets/css/output.css --minify echo "--- Building binary (linux/amd64) ---" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o games . #============================================================================== # Verify required files #============================================================================== echo "--- Verifying files ---" REQUIRED_FILES=( games deploy/setup.sh deploy/deploy.sh deploy/reassemble.sh deploy/games.service ) for f in "${REQUIRED_FILES[@]}"; do if [[ ! -f "$f" ]]; then echo "ERROR: Missing required file: $f" >&2 exit 1 fi echo " OK $f" done #============================================================================== # Create tarball #============================================================================== echo "--- Creating tarball ---" tar -czf "/tmp/${TARBALL}" --transform 's,^,games/,' \ games \ deploy/setup.sh \ deploy/deploy.sh \ deploy/reassemble.sh \ deploy/games.service mv "/tmp/${TARBALL}" . echo " -> ${TARBALL} ($(du -h "${TARBALL}" | cut -f1))" #============================================================================== # Base64 encode and split #============================================================================== echo "--- Base64 encoding ---" base64 "${TARBALL}" > "${BASE64_FILE}" echo " -> ${BASE64_FILE} ($(du -h "${BASE64_FILE}" | cut -f1))" echo "--- Splitting into 25MB chunks ---" split -b 25M -d --additional-suffix=.txt "${BASE64_FILE}" "games-deploy-${TIMESTAMP}_b64_part" rm -f "${BASE64_FILE}" CHUNKS=(games-deploy-${TIMESTAMP}_b64_part*.txt) echo " -> ${#CHUNKS[@]} chunk(s):" for chunk in "${CHUNKS[@]}"; do echo " $chunk ($(du -h "$chunk" | cut -f1))" done #============================================================================== # Done #============================================================================== echo "" echo "=== Package Complete ===" echo "" echo "Transfer the chunk files to the target server, then run:" echo " ./reassemble.sh" echo " cd ~/games && sudo ./deploy/setup.sh # first time only" echo " cd ~/games && sudo ./deploy/deploy.sh"