asdf-golang/bin/install
Sora Morimoto d8dec15ccc
Hygiene (#113)
* Add Makefile for Hygiene

Signed-off-by: Sora Morimoto <sora@morimoto.io>

* make format

Signed-off-by: Sora Morimoto <sora@morimoto.io>

---------

Signed-off-by: Sora Morimoto <sora@morimoto.io>
Co-authored-by: Kenny Parnell <k.parnell@gmail.com>
2023-07-19 09:32:53 -04:00

73 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu
[ "${BASH_VERSINFO[0]}" -ge 3 ] && set -o pipefail
PLUGIN_DIR="$(dirname "${BASH_SOURCE[0]}")/.."
# shellcheck source=/dev/null
source "$PLUGIN_DIR/lib/helpers.sh"
install_golang() {
local version="$1"
local download_path="$2"
local install_path="$3"
created_tmp="0"
if [ -z "$download_path" ]; then
download_path=$(mktemp -dt asdf-golang.XXXX)
created_tmp="1"
ASDF_INSTALL_VERSION="$version" ASDF_DOWNLOAD_PATH="$download_path" "$PLUGIN_DIR/bin/download"
fi
tar -C "$install_path" -xzf "${download_path}/archive.tar.gz"
if [ "1" = "$created_tmp" ]; then
rm -r "$download_path"
fi
}
install_default_go_pkgs() {
local go_path="$1/go/bin"
local default_go_pkgs="${ASDF_GOLANG_DEFAULT_PACKAGES_FILE:-${HOME}/.default-golang-pkgs}"
IFS=. read -r go_major_version go_minor_version <<<"${2}"
if [ ! -f "$default_go_pkgs" ]; then return; fi
while read -r line; do
name=$(echo "$line" |
sed 's|\(.*\) //.*$|\1|' |
sed -E 's|^[[:space:]]*//.*||') # the first sed is for comments after package names, the second for full line comments
# Skip empty lines
if [ -z "$name" ]; then continue; fi
echo -ne "\nInstalling \033[33m${name}\033[39m go pkg... " >&2
# if using go > 1.16 then use go install as the preferred donwload path
if [ "$go_major_version" -ge 2 ] || [ "${go_minor_version//[!0-9]*/}" -ge 16 ]; then
if [[ $name != *"@"* ]]; then
name="${name}@latest"
fi
GOROOT="$ASDF_INSTALL_PATH/go" \
GOPATH="$ASDF_INSTALL_PATH/packages" \
PATH="$go_path:$PATH" \
go install "$name" >/dev/null && rc=$? || rc=$?
else
GOROOT="$ASDF_INSTALL_PATH/go" \
GOPATH="$ASDF_INSTALL_PATH/packages" \
PATH="$go_path:$PATH" \
go get -u "$name" >/dev/null && rc=$? || rc=$?
fi
if [[ $rc -eq 0 ]]; then
msg "SUCCESS"
else
err "FAIL"
fi
done <"$default_go_pkgs"
}
install_golang "$ASDF_INSTALL_VERSION" "${ASDF_DOWNLOAD_PATH:-}" "$ASDF_INSTALL_PATH"
install_default_go_pkgs "$ASDF_INSTALL_PATH" "$ASDF_INSTALL_VERSION"