#!/usr/bin/env bash # build-installer.sh # Builds livetrace-3.3.2-setup.exe on Linux — natively or via Docker. # # Usage: # ./installer/build-installer.sh # requires: apt install nsis # ./installer/build-installer.sh --docker # requires: docker set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" VERSION="3.3.2" OUTPUT="livetrace-${VERSION}-setup.exe" # ── Docker build ─────────────────────────────────────────────────────────── if [[ "${1:-}" == "--docker" ]]; then echo ">>> Building installer via Docker …" docker build \ -f "${SCRIPT_DIR}/Dockerfile.installer" \ -t livetrace-installer \ "${PROJECT_ROOT}" docker run --rm \ -v "${PROJECT_ROOT}/dist":/out \ livetrace-installer echo "" echo "✓ Done: ${PROJECT_ROOT}/dist/${OUTPUT}" exit 0 fi # ── Native build ─────────────────────────────────────────────────────────── if ! command -v makensis &>/dev/null; then echo "ERROR: makensis not found." echo " Install: sudo apt install nsis" echo " Or run: $0 --docker" exit 1 fi SRC_EXE="${PROJECT_ROOT}/dist/livetrace-windows-amd64.exe" if [[ ! -f "${SRC_EXE}" ]]; then echo "ERROR: ${SRC_EXE} not found." echo " Run your Go build first, e.g.:" echo " GOOS=windows GOARCH=amd64 go build -o dist/livetrace-windows-amd64.exe ./src" exit 1 fi echo ">>> Building installer with makensis …" # Copy binary next to the .nsi script so NSIS can find it cp "${SRC_EXE}" "${SCRIPT_DIR}/livetrace-windows-amd64.exe" cd "${SCRIPT_DIR}" makensis livetrace-installer.nsi # Move the output to dist/ mv "${SCRIPT_DIR}/${OUTPUT}" "${PROJECT_ROOT}/dist/${OUTPUT}" rm -f "${SCRIPT_DIR}/livetrace-windows-amd64.exe" echo "" echo "✓ Done: ${PROJECT_ROOT}/dist/${OUTPUT}" echo " Size: $(du -sh "${PROJECT_ROOT}/dist/${OUTPUT}" | cut -f1)"