#!/bin/bash # Builds Go binaries with configurable CGO/native options # Usage: build-go.sh set -euo pipefail BUILD_TYPE=${1:-native} OS=${2:-linux} ARCH=${3:-amd64} SOURCE_PATH=${4:-cmd/api-server/main.go} LDFLAGS="-s -w -X main.BuildHash=$(git rev-parse --short HEAD) -X main.BuildTime=$(date -u +%Y%m%d.%H%M%S)" case $BUILD_TYPE in pure) export CGO_ENABLED=0 TAGS="" SUFFIX="_${OS}_${ARCH}_pure" ;; cgo) export CGO_ENABLED=1 TAGS="" SUFFIX="_${OS}_${ARCH}_cgo" ;; native) export CGO_ENABLED=1 TAGS="native_libs" SUFFIX="_${OS}_${ARCH}_native" ;; *) echo "Unknown build type: $BUILD_TYPE" echo "Usage: $0 " exit 1 ;; esac BINARY_NAME=$(basename "$SOURCE_PATH" .go) OUTPUT="dist/fetch_ml_${BINARY_NAME}_${OS}_${ARCH}${SUFFIX}" mkdir -p dist echo "Building ${BINARY_NAME} (${BUILD_TYPE}) for ${OS}/${ARCH}..." go build -tags="$TAGS" -ldflags="$LDFLAGS" -o "$OUTPUT" "$SOURCE_PATH" echo "✓ Built: $OUTPUT"