From 6e25f602882196d22340a31fb05b24384e907d71 Mon Sep 17 00:00:00 2001 From: Filipe Brandenburger Date: Wed, 27 Aug 2014 16:56:08 -0700 Subject: [PATCH] Move go detection and environment setup into its own function This way hack/config-go.sh can be used in environments where Go is not available, such as running release/build-release.sh for Vagrant. (The intention is to make config-go.sh a general library of helper functions and import it from most other shell scripts.) Fixes Issue #1057. Tested: - Built it and made sure it works. $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 0766e7a411c7-dirty - Ran unit tests. $ hack/test-go.sh ok github.com/GoogleCloudPlatform/kubernetes/examples 1.105s coverage: 0.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/api 6.188s coverage: 86.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors 1.015s coverage: 81.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver 1.806s coverage: 85.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/client 1.211s coverage: 67.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/client/cache 1.115s coverage: 95.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/gce 1.052s coverage: 7.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/vagrant 1.045s coverage: 76.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/constraint 1.038s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/controller 1.559s coverage: 78.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/conversion 3.440s coverage: 72.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/election 1.034s coverage: 71.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/health 1.043s coverage: 94.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/healthz 1.034s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/httplog 1.027s coverage: 82.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubecfg 6.081s coverage: 58.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet 1.400s coverage: 72.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/config 1.139s coverage: 90.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/labels 1.041s coverage: 98.7% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/master 1.033s coverage: 33.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/proxy 1.095s coverage: 86.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/proxy/config 1.038s coverage: 39.2% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/binding 1.046s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/controller 1.039s coverage: 43.6% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/endpoint 1.029s coverage: 25.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/etcd 1.110s coverage: 79.5% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/minion 1.048s coverage: 72.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/pod 1.052s coverage: 62.1% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/registry/service 1.054s coverage: 80.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/scheduler 1.030s coverage: 90.4% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/service 1.363s coverage: 83.8% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/tools 1.136s coverage: 81.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util 1.049s coverage: 83.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util/config 1.036s coverage: 92.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/util/wait 1.029s coverage: 86.7% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/volume 1.032s coverage: 83.3% of statements ok github.com/GoogleCloudPlatform/kubernetes/pkg/watch 1.040s coverage: 100.0% of statements ok github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler 1.026s coverage: 90.9% of statements ok github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler/factory 1.075s coverage: 85.4% of statements ? github.com/GoogleCloudPlatform/kubernetes/test/integration [no test files] - Ran release/build-release.sh without go or godep in my $PATH. $ PATH=... $ which go $ which godep $ release/build-release.sh MYTEST Building release tree ~/devel/kubernetes ~/devel/kubernetes ~/devel/kubernetes Packaging release $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: MYTEST-minion go_opt: -ldflags "-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit '0766e7a411c7-dirty'" $ find output/release/master-release/ | wc -l 598 Signed-off-by: Filipe Brandenburger --- hack/build-go.sh | 3 +++ hack/config-go.sh | 66 +++++++++++++++++++++++++++-------------------- hack/test-go.sh | 6 +++++ 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/hack/build-go.sh b/hack/build-go.sh index 9c6411a2e25..0ef121f04ea 100755 --- a/hack/build-go.sh +++ b/hack/build-go.sh @@ -28,6 +28,9 @@ hackdir=$(CDPATH="" cd $(dirname $0); pwd) # Go to the top of the tree. cd "${KUBE_REPO_ROOT}" +# Check for `go` binary and set ${GOPATH}. +kube::setup_go_environment + # Fetch the version. version=$(gitcommit) diff --git a/hack/config-go.sh b/hack/config-go.sh index f445e292752..5e990e981d3 100644 --- a/hack/config-go.sh +++ b/hack/config-go.sh @@ -40,30 +40,46 @@ function gitcommit() { return 0 } -if [[ -z "$(which go)" ]]; then - echo "Can't find 'go' in PATH, please fix and retry." >&2 - echo "See http://golang.org/doc/install for installation instructions." >&2 - exit 1 -fi - -if [[ -z "$(which godep)" ]]; then - echo "Can't find 'godep' in PATH, please fix and retry." >&2 - echo "See https://github.com/GoogleCloudPlatform/kubernetes#godep-and-dependency-management" >&2 - exit 1 -fi - -# Travis continuous build uses a head go release that doesn't report -# a version number, so we skip this check on Travis. Its unnecessary -# there anyway. -if [[ "${TRAVIS:-}" != "true" ]]; then - GO_VERSION=($(go version)) - if [[ "${GO_VERSION[2]}" < "go1.2" ]]; then - echo "Detected go version: ${GO_VERSION[*]}." >&2 - echo "Kubernetes requires go version 1.2 or greater." >&2 - echo "Please install Go version 1.2 or later" >&2 +# kube::setup_go_environment will check that `go` and `godep` commands are +# available in ${PATH}. If not running on Travis, it will also check that the Go +# version is good enough for the Kubernetes build. +# +# Also set ${GOPATH} and environment variables needed by Go. +kube::setup_go_environment() { + if [[ -z "$(which go)" ]]; then + echo "Can't find 'go' in PATH, please fix and retry." >&2 + echo "See http://golang.org/doc/install for installation instructions." >&2 exit 1 fi -fi + + if [[ -z "$(which godep)" ]]; then + echo "Can't find 'godep' in PATH, please fix and retry." >&2 + echo "See https://github.com/GoogleCloudPlatform/kubernetes#godep-and-dependency-management" >&2 + exit 1 + fi + + # Travis continuous build uses a head go release that doesn't report + # a version number, so we skip this check on Travis. Its unnecessary + # there anyway. + if [[ "${TRAVIS:-}" != "true" ]]; then + local go_version + go_version=($(go version)) + if [[ "${go_version[2]}" < "go1.2" ]]; then + echo "Detected go version: ${go_version[*]}." >&2 + echo "Kubernetes requires go version 1.2 or greater." >&2 + echo "Please install Go version 1.2 or later" >&2 + exit 1 + fi + fi + + # TODO: get rid of this after PR #1054 gets rid of godep. + GOPATH="${KUBE_TARGET}:$(godep path)" + export GOPATH + + # Unset GOBIN in case it already exsits in the current session. + unset GOBIN +} + KUBE_REPO_ROOT=$(dirname "${BASH_SOURCE:-$0}")/.. if [[ "${OSTYPE:-}" == *darwin* ]]; then @@ -87,9 +103,3 @@ mkdir -p "${KUBE_GO_PACKAGE_BASEDIR}" # Create symlink under output/go/src. ln -snf "${KUBE_REPO_ROOT}" "${KUBE_GO_PACKAGE_DIR}" - -GOPATH="${KUBE_TARGET}:$(godep path)" -export GOPATH - -# Unset GOBIN in case it already exsits in the current session. -unset GOBIN diff --git a/hack/test-go.sh b/hack/test-go.sh index d70d4cf1061..c4b4085e9b5 100755 --- a/hack/test-go.sh +++ b/hack/test-go.sh @@ -19,6 +19,12 @@ set -e source $(dirname $0)/config-go.sh +# Go to the top of the tree. +cd "${KUBE_REPO_ROOT}" + +# Check for `go` binary and set ${GOPATH}. +kube::setup_go_environment + find_test_dirs() { cd src/${KUBE_GO_PACKAGE}