From 91238f8b4436c3a83bbe84d12c1ec686fdf75199 Mon Sep 17 00:00:00 2001 From: James DeFelice Date: Wed, 10 Jun 2015 20:30:10 +0000 Subject: [PATCH] Make building contrib code optional --- build/common.sh | 28 +++++++++++++++----- hack/lib/golang.sh | 65 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 66 insertions(+), 27 deletions(-) diff --git a/build/common.sh b/build/common.sh index 70970f3d37f..764006c0bec 100644 --- a/build/common.sh +++ b/build/common.sh @@ -304,10 +304,9 @@ function kube::build::ensure_golang() { } } -# Set up the context directory for the kube-build image and build it. -function kube::build::build_image() { - local -r build_context_dir="${LOCAL_OUTPUT_IMAGE_STAGING}/${KUBE_BUILD_IMAGE}" - local -r source=( +# The set of source targets to include in the kube-build image +function kube::build::source_targets() { + local targets=( api build cmd @@ -323,11 +322,22 @@ function kube::build::build_image() { test third_party ) + if [ -n "${KUBERNETES_CONTRIB:-}" ]; then + for contrib in "${KUBERNETES_CONTRIB}"; do + targets+=($(eval "kube::contrib::${contrib}::source_targets")) + done + fi + echo "${targets[@]}" +} + +# Set up the context directory for the kube-build image and build it. +function kube::build::build_image() { + local -r build_context_dir="${LOCAL_OUTPUT_IMAGE_STAGING}/${KUBE_BUILD_IMAGE}" kube::build::build_image_cross mkdir -p "${build_context_dir}" - tar czf "${build_context_dir}/kube-source.tar.gz" "${source[@]}" + tar czf "${build_context_dir}/kube-source.tar.gz" $(kube::build::source_targets) kube::version::get_version_vars kube::version::save_version_vars "${build_context_dir}/kube-version-defs" @@ -412,8 +422,12 @@ function kube::build::run_build_command() { local -a docker_run_opts=( "--name=${KUBE_BUILD_CONTAINER_NAME}" - "${DOCKER_MOUNT_ARGS[@]}" - ) + "${DOCKER_MOUNT_ARGS[@]}" + ) + + if [ -n "${KUBERNETES_CONTRIB:-}" ]; then + docker_run_opts+=(-e "KUBERNETES_CONTRIB=${KUBERNETES_CONTRIB}") + fi # If we have stdin we can run interactive. This allows things like 'shell.sh' # to work. However, if we run this way and don't have stdin, then it ends up diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index 97aff8e394d..e2c83a9db79 100644 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -18,16 +18,32 @@ readonly KUBE_GO_PACKAGE=github.com/GoogleCloudPlatform/kubernetes readonly KUBE_GOPATH="${KUBE_OUTPUT}/go" +# Load contrib target functions +if [ -n "${KUBERNETES_CONTRIB:-}" ]; then + for contrib in "${KUBERNETES_CONTRIB}"; do + source "${KUBE_ROOT}/contrib/${contrib}/target.sh" + done +fi + # The set of server targets that we are only building for Linux -readonly KUBE_SERVER_TARGETS=( - cmd/kube-proxy - cmd/kube-apiserver - cmd/kube-controller-manager - cmd/kubelet - cmd/hyperkube - cmd/kubernetes - plugin/cmd/kube-scheduler -) +kube::golang::server_targets() { + local targets=( + cmd/kube-proxy + cmd/kube-apiserver + cmd/kube-controller-manager + cmd/kubelet + cmd/hyperkube + cmd/kubernetes + plugin/cmd/kube-scheduler + ) + if [ -n "${KUBERNETES_CONTRIB:-}" ]; then + for contrib in "${KUBERNETES_CONTRIB}"; do + targets+=($(eval "kube::contrib::${contrib}::server_targets")) + done + fi + echo "${targets[@]}" +} +readonly KUBE_SERVER_TARGETS=($(kube::golang::server_targets)) readonly KUBE_SERVER_BINARIES=("${KUBE_SERVER_TARGETS[@]##*/}") # The server platform we are building on. @@ -43,17 +59,26 @@ readonly KUBE_CLIENT_BINARIES=("${KUBE_CLIENT_TARGETS[@]##*/}") readonly KUBE_CLIENT_BINARIES_WIN=("${KUBE_CLIENT_BINARIES[@]/%/.exe}") # The set of test targets that we are building for all platforms -readonly KUBE_TEST_TARGETS=( - cmd/integration - cmd/gendocs - cmd/genman - cmd/genbashcomp - cmd/genconversion - cmd/gendeepcopy - examples/k8petstore/web-server - github.com/onsi/ginkgo/ginkgo - test/e2e/e2e.test -) +kube::golang::test_targets() { + local targets=( + cmd/integration + cmd/gendocs + cmd/genman + cmd/genbashcomp + cmd/genconversion + cmd/gendeepcopy + examples/k8petstore/web-server + github.com/onsi/ginkgo/ginkgo + test/e2e/e2e.test + ) + if [ -n "${KUBERNETES_CONTRIB:-}" ]; then + for contrib in "${KUBERNETES_CONTRIB}"; do + targets+=($(eval "kube::contrib::${contrib}::test_targets")) + done + fi + echo "${targets[@]}" +} +readonly KUBE_TEST_TARGETS=($(kube::golang::test_targets)) readonly KUBE_TEST_BINARIES=("${KUBE_TEST_TARGETS[@]##*/}") readonly KUBE_TEST_BINARIES_WIN=("${KUBE_TEST_BINARIES[@]/%/.exe}") readonly KUBE_TEST_PORTABLE=(