#!/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"