#!/bin/bash # build-cloudinit.sh — Compile the cloud-init binary as a static Linux binary set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" CACHE_DIR="${CACHE_DIR:-$PROJECT_ROOT/build/cache}" CLOUDINIT_SRC="$PROJECT_ROOT/cloud-init" OUTPUT="$CACHE_DIR/kubesolo-cloudinit" echo "==> Building cloud-init binary..." if ! command -v go >/dev/null 2>&1; then echo "ERROR: Go is not installed. Install Go 1.22+ to build cloud-init." echo " https://go.dev/dl/" exit 1 fi mkdir -p "$CACHE_DIR" cd "$CLOUDINIT_SRC" # Run tests first echo " Running tests..." go test ./... -count=1 || { echo "ERROR: Tests failed. Fix tests before building." exit 1 } # Build static binary for Linux amd64 echo " Compiling (CGO_ENABLED=0 GOOS=linux GOARCH=amd64)..." CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags='-s -w' \ -o "$OUTPUT" \ ./cmd/ echo " Built: $OUTPUT ($(du -h "$OUTPUT" | cut -f1))" echo ""