k3s/hack/config-go.sh

153 lines
5.1 KiB
Bash
Raw Normal View History

#!/bin/bash
2014-06-06 23:40:48 +00:00
# Copyright 2014 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This script sets up a go workspace locally and builds all go components.
# You can 'source' this file if you want to set up GOPATH in your local shell.
Grab complete version information from git This replaces the gitcommit() shell function with kube::version_ldflags() which prepares a string suitable for Go's -ldflags parameter that fills in the git version fields in pkg/version/base.go. The gitCommit is now a full 40-character SHA1, the gitVersion will be filled from `git describe` output (which will only be available once we have annotated git tags) and gitTreeState will be filled with either "clean" or "dirty" depending on the tree status at the time of the build. Use a kube:: "namespace" (there's really no such a thing in shell, but the illusion still makes it nice) in order to make this nice to import into existing shell scripts or on a shell session. (In the future, I'm planning to introduce more functions and convert some of the top-level commands into other kube::* shell functions.) There's a difference now that -version will report a full SHA1, this will be improved in a follow up change which will improve the Go code for -version handling to give a more meaningful string that should be enough to identify the origin of the binary in git. Tested: - Built it and checked output of -version: $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 - Ran the release script and checked output of the common.sls file: $ release/build-release.sh TESTINSTANCE $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: TESTINSTANCE-minion go_opt: -ldflags '-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 -X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitTreeState clean' - Successful run of hack/e2e-test.sh end-to-end tests. Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-27 20:17:52 +00:00
# --- Helper Functions ---
# Function kube::version_ldflags() prints the value that needs to be passed to
# the -ldflags parameter of go build in order to set the Kubernetes based on the
# git tree status.
kube::version_ldflags() {
(
# Run this in a subshell to prevent settings/variables from leaking.
set -o errexit
set -o nounset
set -o pipefail
unset CDPATH
cd "${KUBE_REPO_ROOT}"
declare -a ldflags=()
if git_commit=$(git rev-parse "HEAD^{commit}" 2>/dev/null); then
ldflags+=(-X "${KUBE_GO_PACKAGE}/pkg/version.gitCommit" "${git_commit}")
# Check if the tree is dirty.
if git_status=$(git status --porcelain) && [[ -z "${git_status}" ]]; then
git_tree_state="clean"
else
git_tree_state="dirty"
fi
ldflags+=(-X "${KUBE_GO_PACKAGE}/pkg/version.gitTreeState" "${git_tree_state}")
# Use git describe to find the version based on annotated tags.
if git_version=$(git describe --abbrev=14 "${git_commit}^{commit}" 2>/dev/null); then
if [[ "${git_tree_state}" == "dirty" ]]; then
# git describe --dirty only considers changes to existing files, but
# that is problematic since new untracked .go files affect the build,
# so use our idea of "dirty" from git status instead.
git_version+="-dirty"
fi
Grab complete version information from git This replaces the gitcommit() shell function with kube::version_ldflags() which prepares a string suitable for Go's -ldflags parameter that fills in the git version fields in pkg/version/base.go. The gitCommit is now a full 40-character SHA1, the gitVersion will be filled from `git describe` output (which will only be available once we have annotated git tags) and gitTreeState will be filled with either "clean" or "dirty" depending on the tree status at the time of the build. Use a kube:: "namespace" (there's really no such a thing in shell, but the illusion still makes it nice) in order to make this nice to import into existing shell scripts or on a shell session. (In the future, I'm planning to introduce more functions and convert some of the top-level commands into other kube::* shell functions.) There's a difference now that -version will report a full SHA1, this will be improved in a follow up change which will improve the Go code for -version handling to give a more meaningful string that should be enough to identify the origin of the binary in git. Tested: - Built it and checked output of -version: $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 - Ran the release script and checked output of the common.sls file: $ release/build-release.sh TESTINSTANCE $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: TESTINSTANCE-minion go_opt: -ldflags '-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 -X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitTreeState clean' - Successful run of hack/e2e-test.sh end-to-end tests. Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-27 20:17:52 +00:00
ldflags+=(-X "${KUBE_GO_PACKAGE}/pkg/version.gitVersion" "${git_version}")
Set gitMajor and gitMinor from hack/build-go.sh Set the values of major and minor version based on the output of the `git describe` command, which uses annotated tags as source of versioning information. Minor will get a "+" appended whenever the annotated tag does not match the tree exactly (including when the tree is dirty.) So that only official releases will have a "bare" minor version, all others will have a "+" to indicate the binaries contain changes from the released version in minor. (This is similar to how versions of development builds of the Linux kernel work.) Tested: - With no annotated tags: $ hack/build-go.sh $ _output/go/bin/kubecfg -version=raw version.Info{Major:"0", Minor:"1+", GitVersion:"v0.1+", GitCommit:"7d29873bdee87efacaace30ab3602297cacf1b4f", GitTreeState:"clean"} - Tagging current version on a clean git tree: $ git tag -a -m 'Test tag v2.3' v2.3 $ hack/build-go.sh $ _output/go/bin/kubecfg -version=raw version.Info{Major:"2", Minor:"3", GitVersion:"v2.3", GitCommit:"7d29873bdee87efacaace30ab3602297cacf1b4f", GitTreeState:"clean"} - Tagging current version on a dirty git tree: $ git tag -a -m 'Test tag v2.3' v2.3 $ touch test.txt # this is enough to mark the tree as dirty $ hack/build-go.sh $ _output/go/bin/kubecfg -version=raw version.Info{Major:"2", Minor:"3+", GitVersion:"v2.3-dirty", GitCommit:"7d29873bdee87efacaace30ab3602297cacf1b4f", GitTreeState:"dirty"} - Tagging a previous version on a clean tree: $ git tag -a -m 'Test tag v2.3' v2.3 HEAD~5 $ hack/build-go.sh $ _output/go/bin/kubecfg -version=raw version.Info{Major:"2", Minor:"3+", GitVersion:"v2.3-6-g7d29873bdee87e", GitCommit:"7d29873bdee87efacaace30ab3602297cacf1b4f", GitTreeState:"clean"} Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-30 06:33:18 +00:00
# Try to match the "git describe" output to a regex to try to extract
# the "major" and "minor" versions and whether this is the exact tagged
# version or whether the tree is between two tagged versions.
if [[ "${git_version}" =~ ^v([0-9]+)\.([0-9]+)([.-].*)?$ ]]; then
git_major=${BASH_REMATCH[1]}
git_minor=${BASH_REMATCH[2]}
if [[ -n "${BASH_REMATCH[3]}" ]]; then
git_minor+="+"
fi
ldflags+=(
-X "${KUBE_GO_PACKAGE}/pkg/version.gitMajor" "${git_major}"
-X "${KUBE_GO_PACKAGE}/pkg/version.gitMinor" "${git_minor}"
)
fi
Grab complete version information from git This replaces the gitcommit() shell function with kube::version_ldflags() which prepares a string suitable for Go's -ldflags parameter that fills in the git version fields in pkg/version/base.go. The gitCommit is now a full 40-character SHA1, the gitVersion will be filled from `git describe` output (which will only be available once we have annotated git tags) and gitTreeState will be filled with either "clean" or "dirty" depending on the tree status at the time of the build. Use a kube:: "namespace" (there's really no such a thing in shell, but the illusion still makes it nice) in order to make this nice to import into existing shell scripts or on a shell session. (In the future, I'm planning to introduce more functions and convert some of the top-level commands into other kube::* shell functions.) There's a difference now that -version will report a full SHA1, this will be improved in a follow up change which will improve the Go code for -version handling to give a more meaningful string that should be enough to identify the origin of the binary in git. Tested: - Built it and checked output of -version: $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 - Ran the release script and checked output of the common.sls file: $ release/build-release.sh TESTINSTANCE $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: TESTINSTANCE-minion go_opt: -ldflags '-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 -X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitTreeState clean' - Successful run of hack/e2e-test.sh end-to-end tests. Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-27 20:17:52 +00:00
fi
2014-08-25 13:21:03 +00:00
fi
Grab complete version information from git This replaces the gitcommit() shell function with kube::version_ldflags() which prepares a string suitable for Go's -ldflags parameter that fills in the git version fields in pkg/version/base.go. The gitCommit is now a full 40-character SHA1, the gitVersion will be filled from `git describe` output (which will only be available once we have annotated git tags) and gitTreeState will be filled with either "clean" or "dirty" depending on the tree status at the time of the build. Use a kube:: "namespace" (there's really no such a thing in shell, but the illusion still makes it nice) in order to make this nice to import into existing shell scripts or on a shell session. (In the future, I'm planning to introduce more functions and convert some of the top-level commands into other kube::* shell functions.) There's a difference now that -version will report a full SHA1, this will be improved in a follow up change which will improve the Go code for -version handling to give a more meaningful string that should be enough to identify the origin of the binary in git. Tested: - Built it and checked output of -version: $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 - Ran the release script and checked output of the common.sls file: $ release/build-release.sh TESTINSTANCE $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: TESTINSTANCE-minion go_opt: -ldflags '-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 -X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitTreeState clean' - Successful run of hack/e2e-test.sh end-to-end tests. Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-27 20:17:52 +00:00
# The -ldflags parameter takes a single string, so join the output.
echo "${ldflags[*]-}"
Grab complete version information from git This replaces the gitcommit() shell function with kube::version_ldflags() which prepares a string suitable for Go's -ldflags parameter that fills in the git version fields in pkg/version/base.go. The gitCommit is now a full 40-character SHA1, the gitVersion will be filled from `git describe` output (which will only be available once we have annotated git tags) and gitTreeState will be filled with either "clean" or "dirty" depending on the tree status at the time of the build. Use a kube:: "namespace" (there's really no such a thing in shell, but the illusion still makes it nice) in order to make this nice to import into existing shell scripts or on a shell session. (In the future, I'm planning to introduce more functions and convert some of the top-level commands into other kube::* shell functions.) There's a difference now that -version will report a full SHA1, this will be improved in a follow up change which will improve the Go code for -version handling to give a more meaningful string that should be enough to identify the origin of the binary in git. Tested: - Built it and checked output of -version: $ hack/build-go.sh $ output/go/bin/kubelet -version Kubernetes version 0.1+, build 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 - Ran the release script and checked output of the common.sls file: $ release/build-release.sh TESTINSTANCE $ cat output/release/master-release/src/saltbase/pillar/common.sls instance_prefix: TESTINSTANCE-minion go_opt: -ldflags '-X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitCommit 3ff7ee4b8c843c7767cd856fbf7d3027cd5410e6 -X github.com/GoogleCloudPlatform/kubernetes/pkg/version.gitTreeState clean' - Successful run of hack/e2e-test.sh end-to-end tests. Signed-off-by: Filipe Brandenburger <filbranden@google.com>
2014-08-27 20:17:52 +00:00
)
2014-08-25 13:21:03 +00:00
}
# kube::setup_go_environment will check that the `go` commands is available in
# ${PATH}. If not running on Travis, it will also check that the Go version is
# good enough for the Kubernetes build.
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 <filbranden@google.com>
2014-08-27 23:56:08 +00:00
#
# 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
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 <filbranden@google.com>
2014-08-27 23:56:08 +00:00
# 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
# Set GOPATH to point to the tree maintained by `godep`.
GOPATH="${KUBE_TARGET}:${KUBE_REPO_ROOT}/Godeps/_workspace"
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 <filbranden@google.com>
2014-08-27 23:56:08 +00:00
export GOPATH
# Unset GOBIN in case it already exsits in the current session.
unset GOBIN
}
2014-06-18 17:54:23 +00:00
# --- Environment Variables ---
# KUBE_REPO_ROOT - Path to the top of the build tree.
# KUBE_TARGET - Path where output Go files are saved.
# KUBE_GO_PACKAGE - Full name of the Kubernetes Go package.
# Make ${KUBE_REPO_ROOT} an absolute path.
KUBE_REPO_ROOT=$(
set -eu
unset CDPATH
scripts_dir=$(dirname "${BASH_SOURCE[0]}")
cd "${scripts_dir}"
cd ..
pwd
)
export KUBE_REPO_ROOT
2014-07-13 04:46:28 +00:00
KUBE_TARGET="${KUBE_REPO_ROOT}/_output/go"
2014-06-06 23:40:48 +00:00
mkdir -p "${KUBE_TARGET}"
export KUBE_TARGET
2014-06-06 23:40:48 +00:00
KUBE_GO_PACKAGE=github.com/GoogleCloudPlatform/kubernetes
export KUBE_GO_PACKAGE
(
# Create symlink named ${KUBE_GO_PACKAGE} under _output/go/src.
# So that Go knows how to import Kubernetes sources by full path.
# Use a subshell to avoid leaking these variables.
2014-06-06 23:40:48 +00:00
set -eu
go_pkg_dir="${KUBE_TARGET}/src/${KUBE_GO_PACKAGE}"
go_pkg_basedir=$(dirname "${go_pkg_dir}")
mkdir -p "${go_pkg_basedir}"
rm -f "${go_pkg_dir}"
# TODO: This symlink should be relative.
ln -s "${KUBE_REPO_ROOT}" "${go_pkg_dir}"
)