Files
aicli/scripts/build.sh
Jay 91c61ca4c8
All checks were successful
Release / release (push) Successful in 3m13s
Initial commit.
2025-10-25 21:23:20 -04:00

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}"