diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index 983ff368e25..4284eb5bae3 100755 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -466,13 +466,23 @@ kube::golang::create_gopath_tree() { kube::golang::verify_go_version() { # default GO_VERSION to content of .go-version GO_VERSION="${GO_VERSION:-"$(cat "${KUBE_ROOT}/.go-version")"}" - # only setup go if we haven't set FORCE_HOST_GO, or `go version` doesn't match GO_VERSION - if ! ([ -n "${FORCE_HOST_GO:-}" ] || \ - (command -v go >/dev/null && [ "$(go version | cut -d' ' -f3)" = "go${GO_VERSION}" ])); then + if [ "${GOTOOLCHAIN:-auto}" != 'auto' ]; then + # no-op, just respect GOTOOLCHAIN + : + elif [ -n "${FORCE_HOST_GO:-}" ]; then + # ensure existing host version is used, like before GOTOOLCHAIN existed + export GOTOOLCHAIN='local' + else + # otherwise, we want to ensure the go version matches GO_VERSION + GOTOOLCHAIN="go${GO_VERSION}" + export GOTOOLCHAIN + # if go is either not installed or too old to respect GOTOOLCHAIN then use gimme + if ! (command -v go >/dev/null && [ "$(go version | cut -d' ' -f3)" = "${GOTOOLCHAIN}" ]); then export GIMME_ENV_PREFIX=${GIMME_ENV_PREFIX:-"${KUBE_OUTPUT}/.gimme/envs"} export GIMME_VERSION_PREFIX=${GIMME_VERSION_PREFIX:-"${KUBE_OUTPUT}/.gimme/versions"} # eval because the output of this is shell to set PATH etc. eval "$("${KUBE_ROOT}/third_party/gimme/gimme" "${GO_VERSION}")" + fi fi if [[ -z "$(command -v go)" ]]; then