diff --git a/Makefile b/Makefile index 1d2e641e1b..1a58e01e12 100755 --- a/Makefile +++ b/Makefile @@ -22,6 +22,9 @@ ISO_VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).0 VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) DEB_VERSION ?= $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) RPM_VERSION ?= $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_BUILD) +# used by hack/jenkins/release_build_and_upload.sh and KVM_BUILD_IMAGE, see also BUILD_IMAGE below +GO_VERSION ?= 1.12.8 + INSTALL_SIZE ?= $(shell du out/minikube-windows-amd64.exe | cut -f1) BUILDROOT_BRANCH ?= 2018.05.3 REGISTRY?=gcr.io/k8s-minikube @@ -31,8 +34,8 @@ COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) COMMIT ?= $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}") HYPERKIT_BUILD_IMAGE ?= karalabe/xgo-1.12.x -# NOTE: "latest" as of 2019-07-12. kube-cross images aren't updated as often as Kubernetes -BUILD_IMAGE ?= k8s.gcr.io/kube-cross:v1.12.7-1 +# NOTE: "latest" as of 2019-08-15. kube-cross images aren't updated as often as Kubernetes +BUILD_IMAGE ?= k8s.gcr.io/kube-cross:v$(GO_VERSION)-1 ISO_BUILD_IMAGE ?= $(REGISTRY)/buildroot-image KVM_BUILD_IMAGE ?= $(REGISTRY)/kvm-build-image:$(GO_VERSION) @@ -44,10 +47,7 @@ MINIKUBE_UPLOAD_LOCATION := gs://${MINIKUBE_BUCKET} MINIKUBE_RELEASES_URL=https://github.com/kubernetes/minikube/releases/download KERNEL_VERSION ?= 4.15 - -# Currently *only* used for the KVM_BUILD_IMAGE, see also BUILD_IMAGE above -GO_VERSION ?= 1.12.7 - +# latest from https://github.com/golangci/golangci-lint/releases GOLINT_VERSION ?= v1.17.1 # Limit number of default jobs, to avoid the CI builds running out of memory GOLINT_JOBS ?= 4 diff --git a/hack/jenkins/installers/check_install_golang.sh b/hack/jenkins/installers/check_install_golang.sh new file mode 100755 index 0000000000..72abf97250 --- /dev/null +++ b/hack/jenkins/installers/check_install_golang.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +# Copyright 2016 The Kubernetes Authors 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. + +set -eux -o pipefail + +if (($# < 2)); then + echo "ERROR: given ! ($#) number of parameters but expect 2." + echo "USAGE: ./check_and_install_golang.sh VERSION_TO_INSTALL INSTALL_PATH" + exit 1 +fi + +VERSION_TO_INSTALL=${1} +INSTALL_PATH=${2} + +# installs or updates golang if right version doesn't exists +function check_and_install_golang() { + if ! go version &>/dev/null; then + echo "WARNING: No golang installation found in your enviroment." + install_golang "$VERSION_TO_INSTALL" "$INSTALL_PATH" + return + fi + + # golang has been installed and check its version + if [[ $(go version) =~ (([0-9]+)\.([0-9]+).([0-9]+).([\.0-9]*)) ]]; then + HOST_VERSION=${BASH_REMATCH[1]} + if [ $HOST_VERSION = $VERSION_TO_INSTALL ]; then + echo "go version on the host looks good : $HOST_VERSION" + else + echo "WARNING: expected go version to be $VERSION_TO_INSTALL but got $HOST_VERSION" + install_golang "$VERSION_TO_INSTALL" "$INSTALL_PATH" + fi + else + echo "ERROR: Failed to parse golang version: $HOST_VERSION" + return + fi +} + +# install_golang takes two parameters version and path to install. +function install_golang() { + echo "Installing golang version: $1 on $2" + pushd /tmp >/dev/null + # using sudo because previously installed versions might have been installed by a different user. + # as it was the case on jenkins VM. + sudo curl -qL -O "https://storage.googleapis.com/golang/go${1}.linux-amd64.tar.gz" && + sudo tar xfa go${1}.linux-amd64.tar.gz && + sudo rm -rf "${2}/go" && + sudo mv go "${2}/" && sudo chown -R $(whoami): ${2}/go + popd >/dev/null +} + +check_and_install_golang diff --git a/hack/jenkins/minikube_cross_build_and_upload.sh b/hack/jenkins/minikube_cross_build_and_upload.sh index adbb0189da..2e95fea227 100755 --- a/hack/jenkins/minikube_cross_build_and_upload.sh +++ b/hack/jenkins/minikube_cross_build_and_upload.sh @@ -25,6 +25,11 @@ set -eux -o pipefail readonly bucket="minikube-builds" +# Make sure the right golang version is installed based on Makefile +WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') +./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local + + declare -rx BUILD_IN_DOCKER=y declare -rx GOPATH=/var/lib/jenkins/go declare -rx ISO_BUCKET="${bucket}/${ghprbPullId}" diff --git a/hack/jenkins/release_build_and_upload.sh b/hack/jenkins/release_build_and_upload.sh index 3bb3f3d97c..4f9259843e 100755 --- a/hack/jenkins/release_build_and_upload.sh +++ b/hack/jenkins/release_build_and_upload.sh @@ -31,6 +31,11 @@ export DEB_VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} export RPM_VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} export GOPATH=~/go +# Make sure the right golang version is installed based on Makefile +WANT_GOLANG_VERSION=$(grep '^GO_VERSION' Makefile | awk '{ print $3 }') +./hack/jenkins/installers/check_install_golang.sh $WANT_GOLANG_VERSION /usr/local + + # Make sure the tag matches the Makefile cat Makefile | grep "VERSION_MAJOR ?=" | grep $VERSION_MAJOR cat Makefile | grep "VERSION_MINOR ?=" | grep $VERSION_MINOR