#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")/.." GO="${GO:-/usr/local/go/bin/go}" MAC_HOST="${MAC_HOST:-johanjongsma@192.168.1.14}" MAC_PROJECT="${MAC_PROJECT:-~/dev/clavitor/clavis/clavis-vault}" OUT="dist" VERSION=$(git describe --tags --always --dirty 2>/dev/null || echo dev) COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo unknown) DATE=$(date -u +%Y%m%d-%H%M) LDFLAGS="-s -w -X main.version=${VERSION} -X main.commit=${COMMIT} -X main.buildDate=${DATE}" mkdir -p "$OUT" echo "=== Clavitor release build ===" echo " version: ${VERSION} (${COMMIT}) ${DATE}" echo "" # --- Linux amd64 (native) --- echo "[1/4] linux/amd64 ..." CGO_ENABLED=1 GOOS=linux GOARCH=amd64 GOFIPS140=latest \ $GO build -ldflags "$LDFLAGS" -o "${OUT}/clavitor-linux-amd64" ./cmd/clavitor echo " done" # --- Linux arm64 (cross) --- echo "[2/4] linux/arm64 ..." if ! command -v aarch64-linux-gnu-gcc &>/dev/null; then echo " aarch64-linux-gnu-gcc not found." echo " Install with: sudo apt install gcc-aarch64-linux-gnu" echo " SKIPPED" else CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc GOFIPS140=latest \ $GO build -ldflags "$LDFLAGS" -o "${OUT}/clavitor-linux-arm64" ./cmd/clavitor echo " done" fi # --- Darwin arm64 + amd64 (via SSH to Mac) --- echo "[3/4] darwin/arm64 (via Mac SSH) ..." echo "[4/4] darwin/amd64 (via Mac SSH) ..." if ssh -o ConnectTimeout=5 -o BatchMode=yes "$MAC_HOST" true 2>/dev/null; then ssh "$MAC_HOST" bash -s </dev/null || true VERSION=\$(git describe --tags --always --dirty 2>/dev/null || echo dev) COMMIT=\$(git rev-parse --short HEAD 2>/dev/null || echo unknown) DATE=\$(date -u +%Y%m%d-%H%M) LDFLAGS="-s -w -X main.version=\${VERSION} -X main.commit=\${COMMIT} -X main.buildDate=\${DATE}" CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 \ go build -ldflags "\$LDFLAGS" -o /tmp/clavitor-darwin-arm64 ./cmd/clavitor CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 \ go build -ldflags "\$LDFLAGS" -o /tmp/clavitor-darwin-amd64 ./cmd/clavitor REMOTE scp "$MAC_HOST":/tmp/clavitor-darwin-arm64 "${OUT}/clavitor-darwin-arm64" scp "$MAC_HOST":/tmp/clavitor-darwin-amd64 "${OUT}/clavitor-darwin-amd64" echo " done" else echo " Mac unreachable at ${MAC_HOST} — SKIPPED" fi # --- Summary --- echo "" echo "=== Built artifacts ===" for f in "${OUT}"/clavitor-*; do [ -f "$f" ] || continue size=$(du -h "$f" | cut -f1) arch=$(file -b "$f" | head -c 80) printf " %-30s %6s %s\n" "$(basename "$f")" "$size" "$arch" done