#!/bin/bash set -e # ============================================================ # Verstak build script # Usage: ./scripts/build.sh [gui|server|extensions|all] # ============================================================ BUILD_DIR="build" # --- GUI binary --- build_gui() { echo "==> Building GUI binary..." # Build frontend cd frontend && npm run build && cd .. # Copy frontend dist to Wails embed directory rm -rf cmd/verstak-gui/frontend-dist mkdir -p cmd/verstak-gui/frontend-dist cp -r frontend/dist/. cmd/verstak-gui/frontend-dist/ # Build Go binary with Wails v2 # Tags: webkit2_41 required for WebKitGTK 2.41+, desktop/production for Wails go build -tags "webkit2_41 desktop production" -ldflags="-s -w" -o "$BUILD_DIR/verstak-gui-linux-amd64" ./cmd/verstak-gui/ echo "==> GUI binary: $BUILD_DIR/verstak-gui-linux-amd64" } # --- Server binary --- build_server() { echo "==> Building server binary..." go build -ldflags="-s -w" -o "$BUILD_DIR/verstak-server-linux-amd64" ./cmd/verstak-server/ echo "==> Server binary: $BUILD_DIR/verstak-server-linux-amd64" } # --- Chrome extension --- build_chrome_extension() { echo "==> Building Chrome extension..." local ext_dir="extension" local out_file="$BUILD_DIR/verstak-bridge-chrome.zip" if [ ! -d "$ext_dir" ]; then echo "ERROR: $ext_dir/ directory not found" return 1 fi # Create a clean zip: manifest.json, background.js, popup/* # Exclude any hidden files, icons (not needed for dev install), and OS junk cd "$ext_dir" zip -r "../$out_file" \ manifest.json \ background.js \ popup/ \ -x "*/.DS_Store" "*/Thumbs.db" "*/__MACOSX/*" "*/.git/*" cd .. echo "==> Chrome extension: $out_file" } # --- Firefox extension --- build_firefox_extension() { echo "==> Building Firefox extension..." local ext_dir="extension-firefox" local out_file="$BUILD_DIR/verstak-bridge-firefox.xpi" if [ ! -d "$ext_dir" ]; then echo "ERROR: $ext_dir/ directory not found" return 1 fi # Firefox xpi is a zip with .xpi extension # Must include manifest.json at root cd "$ext_dir" zip -r "../$out_file" \ manifest.json \ background.js \ popup/ \ -x "*/.DS_Store" "*/Thumbs.db" "*/__MACOSX/*" "*/.git/*" cd .. echo "==> Firefox extension: $out_file" } # --- All extensions --- build_extensions() { mkdir -p "$BUILD_DIR" build_chrome_extension build_firefox_extension echo "==> Extensions built." ls -lh "$BUILD_DIR"/verstak-bridge-* } # --- Everything --- build_all() { mkdir -p "$BUILD_DIR" build_gui build_server build_chrome_extension build_firefox_extension echo "" echo "==> All builds complete." ls -lh "$BUILD_DIR/" } # --- Main --- case "${1:-all}" in gui) build_gui ;; server) build_server ;; extensions) build_extensions ;; chrome) mkdir -p "$BUILD_DIR"; build_chrome_extension ;; firefox) mkdir -p "$BUILD_DIR"; build_firefox_extension ;; all) build_all ;; *) echo "Usage: $0 [gui|server|extensions|chrome|firefox|all]" exit 1 ;; esac