#!/bin/bash # Build Navis GUI for Apple Silicon (arm64) with auto-incremented build number. set -euo pipefail cd "$(dirname "$0")/.." BASE_VERSION="$(python3 - <<'PY' import re from pathlib import Path t = Path('internal/update/version.go').read_text() m = re.search(r'BaseVersion\s*=\s*"([^"]+)"', t) print(m.group(1) if m else '0.0.0') PY )" BUILD_NUM="$(tr -d '[:space:]' < buildnum.txt 2>/dev/null || echo 0)" if ! [[ "$BUILD_NUM" =~ ^[0-9]+$ ]]; then BUILD_NUM=0; fi BUILD_NUM=$((BUILD_NUM + 1)) echo "$BUILD_NUM" > buildnum.txt FULL_VERSION="${BASE_VERSION}.${BUILD_NUM}" echo "Building Navis ${FULL_VERSION} (arm64)..." # Keep source BuildNumber in sync for non-ldflags runs / IDE python3 - <${BUILD_NUM}\2', t) p.write_text(t2) PY # versioninfo.json (Windows metadata; also documents build) python3 - <', d['StringFileInfo']['FileVersion']) PY OUT="dist/navis-release/darwin-arm64" mkdir -p "$OUT" LDFLAGS="-s -w -X vpnclient/internal/update.BuildNumber=${BUILD_NUM}" CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \ go build -ldflags="$LDFLAGS" -trimpath -o "$OUT/Navis" ./cmd/vpnapp CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \ go build -ldflags="$LDFLAGS" -trimpath -o "$OUT/Navis-cli" ./cmd/vpnclient # Stamp plain-text version next to binaries printf '%s\n' "$FULL_VERSION" > "$OUT/VERSION" printf '%s\n' "$FULL_VERSION" > "$OUT/Navis.version" if command -v codesign >/dev/null 2>&1; then codesign -s - --force "$OUT/Navis" codesign -s - --force "$OUT/Navis-cli" fi go build -o tools/packmac/packmac ./tools/packmac tools/packmac/packmac \ -bin "$OUT/Navis" \ -out "$OUT" \ -version "$FULL_VERSION" \ -build "$BUILD_NUM" \ -arch arm64 # Rename release copies with version in filename (keep unversioned too) cp -f "$OUT/Navis.dmg" "$OUT/Navis-${FULL_VERSION}-arm64.dmg" cp -f "$OUT/Navis.app.zip" "$OUT/Navis-${FULL_VERSION}-arm64.app.zip" # update.json python3 - <', full) PY echo "" echo "Done: Navis ${FULL_VERSION}" ls -lh "$OUT" file "$OUT/Navis.dmg"