87 lines
2.2 KiB
Bash
87 lines
2.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Build script for AICLI
|
|
# This script builds binaries for multiple platforms and architectures
|
|
|
|
# Set default values if not provided by environment
|
|
: "${VERSION:="dev"}"
|
|
: "${PACKAGE:="git.wisehodl.dev/jay/aicli"}"
|
|
: "${DATE:=$(date -u +"%Y-%m-%dT%H:%M:%SZ")}"
|
|
: "${COMMIT:=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")}"
|
|
|
|
# Output directories
|
|
DIST_DIR="$(pwd)/dist"
|
|
mkdir -p "$DIST_DIR"
|
|
|
|
# Build info
|
|
LDFLAGS="-s -w -X '${PACKAGE}/version.Version=${VERSION}' -X '${PACKAGE}/version.CommitHash=${COMMIT}' -X '${PACKAGE}/version.BuildDate=${DATE}'"
|
|
|
|
echo "Building AICLI version ${VERSION} (${COMMIT}) built at ${DATE}"
|
|
|
|
TARGETS=(
|
|
"linux/amd64"
|
|
"linux/arm64"
|
|
"linux/386"
|
|
"linux/arm/7" # ARMv7
|
|
"linux/arm/6" # ARMv6
|
|
"darwin/amd64"
|
|
"darwin/arm64"
|
|
"windows/amd64"
|
|
"windows/386"
|
|
"freebsd/amd64"
|
|
"openbsd/amd64"
|
|
"netbsd/amd64"
|
|
"solaris/amd64"
|
|
)
|
|
|
|
# Build all targets
|
|
for target in "${TARGETS[@]}"; do
|
|
os=$(echo "$target" | cut -d/ -f1)
|
|
arch=$(echo "$target" | cut -d/ -f2)
|
|
arm_version=""
|
|
|
|
# Handle ARM version if specified
|
|
if [[ "$target" == */* && "$target" != */amd64 && "$target" != */386 && "$target" != */arm64 ]]; then
|
|
arm_version=$(echo "$target" | cut -d/ -f3)
|
|
echo "Building for ${os}/${arch} (ARM version ${arm_version})"
|
|
else
|
|
echo "Building for ${os}/${arch}"
|
|
fi
|
|
|
|
# Set output filename
|
|
if [[ "$os" == "windows" ]]; then
|
|
output="${DIST_DIR}/aicli-${os}-${arch}.exe"
|
|
elif [[ -n "$arm_version" ]]; then
|
|
output="${DIST_DIR}/aicli-${os}-armv${arm_version}"
|
|
else
|
|
output="${DIST_DIR}/aicli-${os}-${arch}"
|
|
fi
|
|
|
|
# Set GOOS, GOARCH, and GOARM
|
|
export GOOS=$os
|
|
export GOARCH=$arch
|
|
if [[ -n "$arm_version" ]]; then
|
|
export GOARM=$arm_version
|
|
else
|
|
unset GOARM
|
|
fi
|
|
|
|
# Build the binary
|
|
echo "Building ${output}..."
|
|
go build -ldflags "${LDFLAGS}" -o "$output" .
|
|
|
|
# Make binary executable
|
|
if [[ "$os" != "windows" ]]; then
|
|
chmod +x "$output"
|
|
fi
|
|
done
|
|
|
|
echo "All binaries built to ${DIST_DIR}"
|
|
|
|
# Generate checksums
|
|
echo "Generating checksums..."
|
|
(cd "$DIST_DIR" && sha256sum ./* >SHA256SUMS)
|
|
|
|
echo "Build complete! Binaries and checksums available in ${DIST_DIR}"
|