67 lines
1.5 KiB
Bash
Executable File
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"
|