Files
provision/scripts/golang.sh
2025-11-23 09:07:39 -08:00

67 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/common.sh"
GO_VERSION="1.23.3"
GO_INSTALL_DIR="/usr/local/go"
log_info "Installing Go ${GO_VERSION}"
if [ -d "$GO_INSTALL_DIR" ] && [ -f "$GO_INSTALL_DIR/bin/go" ]; then
CURRENT_VERSION=$($GO_INSTALL_DIR/bin/go version | awk '{print $3}' | sed 's/go//')
if [ "$CURRENT_VERSION" = "$GO_VERSION" ]; then
log_success "Go ${GO_VERSION} already installed"
exit 0
else
log_info "Upgrading Go from ${CURRENT_VERSION} to ${GO_VERSION}"
maybe_sudo rm -rf "$GO_INSTALL_DIR"
fi
fi
# Detect architecture
ARCH=$(uname -m)
case "$ARCH" in
x86_64)
GO_ARCH="amd64"
;;
aarch64|arm64)
GO_ARCH="arm64"
;;
*)
log_error "Unsupported architecture: $ARCH"
exit 1
;;
esac
# Detect OS
if is_macos; then
GO_OS="darwin"
else
GO_OS="linux"
fi
GO_TARBALL="go${GO_VERSION}.${GO_OS}-${GO_ARCH}.tar.gz"
GO_URL="https://go.dev/dl/${GO_TARBALL}"
log_info "Downloading Go from ${GO_URL}"
TEMP_DIR=$(mktemp -d)
cd "$TEMP_DIR"
if ! curl -fsSL -o "$GO_TARBALL" "$GO_URL"; then
log_error "Failed to download Go"
rm -rf "$TEMP_DIR"
exit 1
fi
log_info "Extracting Go to ${GO_INSTALL_DIR}"
maybe_sudo tar -C /usr/local -xzf "$GO_TARBALL"
cd -
rm -rf "$TEMP_DIR"
log_success "Go ${GO_VERSION} installed to ${GO_INSTALL_DIR}"
log_info "Add to PATH: export PATH=\$PATH:/usr/local/go/bin"