diff --git a/BUILD.bazel b/BUILD.bazel index 0aa3669006..c0ef3155ca 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -5,8 +5,9 @@ load("@io_bazel_rules_go//go:def.bzl", "gazelle", "go_library", "go_prefix") go_prefix("k8s.io/kops") gazelle( - name = "gazelle", + command = "fix", external = "vendored", + name = "gazelle", prefix = "k8s.io/kops", ) diff --git a/Makefile b/Makefile index cc93c91bea..e0950b8f07 100644 --- a/Makefile +++ b/Makefile @@ -35,6 +35,7 @@ UPLOAD=$(BUILD)/upload UID:=$(shell id -u) GID:=$(shell id -g) TESTABLE_PACKAGES:=$(shell egrep -v "k8s.io/kops/cloudmock|k8s.io/kops/vendor" hack/.packages) +BAZEL_OPTIONS?= SOURCES:=$(shell find . -name "*.go") @@ -568,17 +569,30 @@ kops-server-push: kops-server-build .PHONY: bazel-test bazel-test: - bazel test //cmd/... //pkg/... //channels/... //nodeup/... //channels/... //protokube/... //dns-controller/... //upup/... //util/... --test_output=errors + bazel ${BAZEL_OPTIONS} test //cmd/... //pkg/... //channels/... //nodeup/... //channels/... //protokube/... //dns-controller/... //upup/... //util/... //hack:verify-all --test_output=errors .PHONY: bazel-build bazel-build: bazel build //cmd/... //pkg/... //channels/... //nodeup/... //channels/... //protokube/... //dns-controller/... -# TODO: Get working on a mac / windows machine! -# GOOS=linux GOARCH=amd64 go build -a ${EXTRA_BUILDFLAGS} -o $@ -ldflags "${EXTRA_LDFLAGS} -X k8s.io/kops.Version=${VERSION} -X k8s.io/kops.GitVersion=${GITSHA}" k8s.io/kops/cmd/nodeup -.PHONY: bazel-crossbuild-nodeup -bazel-crossbuild-nodeup: - bazel build //cmd/nodeup +# Not working yet, but we can hope +#.PHONY: bazel-crossbuild-kops +#bazel-crossbuild-kops: +# bazel build --experimental_platforms=@io_bazel_rules_go//go/toolchain:darwin_amd64 //cmd/kops/... +# bazel build --experimental_platforms=@io_bazel_rules_go//go/toolchain:linux_amd64 //cmd/kops/... +# bazel build --experimental_platforms=@io_bazel_rules_go//go/toolchain:windows_amd64 //cmd/kops/... +# +#.PHONY: bazel-crossbuild-nodeup +#bazel-crossbuild-nodeup: +# bazel build --experimental_platforms=@io_bazel_rules_go//go/toolchain:linux_amd64 //cmd/nodeup/... + +#.PHONY: bazel-crossbuild-protokube +#bazel-crossbuild-protokube: +# bazel build --experimental_platforms=@io_bazel_rules_go//go/toolchain:linux_amd64 //protokube/... + +#.PHONY: bazel-crossbuild-dns-controller +#bazel-crossbuild-dns-controller: +# bazel build --experimental_platforms=@io_bazel_rules_go//go/toolchain:linux_amd64 //dns-controller/... .PHONY: bazel-push # Will always push a linux-based build up to the server @@ -595,6 +609,10 @@ bazel-push-gce-run: bazel-push bazel-push-aws-run: bazel-push ssh -t ${TARGET} sudo SKIP_PACKAGE_UPDATE=1 /tmp/nodeup --conf=/var/cache/kubernetes-install/kube_env.yaml --v=8 +.PHONY: bazel-gazelle +bazel-gazelle: + bazel run //:gazelle + .PHONY: check-markdown-links check-markdown-links: docker run -t -v $$PWD:/tmp \ diff --git a/WORKSPACE b/WORKSPACE index 209076af45..77c51a925b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,9 +1,8 @@ http_archive( name = "io_bazel_rules_go", - sha256 = "ca58b0b856dc95473b93f2228ab117913b82a6617fc0deabd107346e3981522a", - url = "https://github.com/bazelbuild/rules_go/releases/download/0.5.5/rules_go-0.5.5.tar.gz", + url = "https://github.com/bazelbuild/rules_go/releases/download/0.7.0/rules_go-0.7.0.tar.gz", + sha256 = "91fca9cf860a1476abdc185a5f675b641b60d3acf0596679a27b580af60bf19c", ) - -load("@io_bazel_rules_go//go:def.bzl", "go_repositories", "go_repository") - -go_repositories() +load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains") +go_rules_dependencies() +go_register_toolchains() diff --git a/cmd/nodeup/BUILD.bazel b/cmd/nodeup/BUILD.bazel index c694caf3c6..70a71e9ca3 100644 --- a/cmd/nodeup/BUILD.bazel +++ b/cmd/nodeup/BUILD.bazel @@ -16,5 +16,6 @@ go_library( go_binary( name = "nodeup", library = ":go_default_library", + static = "on", visibility = ["//visibility:public"], ) diff --git a/hack/BUILD b/hack/BUILD new file mode 100644 index 0000000000..4a10c003c5 --- /dev/null +++ b/hack/BUILD @@ -0,0 +1,32 @@ +package(default_visibility = ["//visibility:public"]) + + +# this does not work, and I am uncertain we will need it +#sh_test( +# name = "verify-packages", +# srcs = ["verify-packages.sh"], +# tags = ["manual"], +#) + +sh_test( + name = "verify-boilerplate", + srcs = ["verify-boilerplate.sh"], + tags = ["manual"], +) + +sh_test( + name = "verify-gofmt", + srcs = ["verify-gofmt.sh"], + tags = ["manual"], +) + +test_suite( + name = "verify-all", + tags = ["manual"], + tests = [ + "verify-boilerplate", + #"verify-packages", + "verify-gofmt", + ], +) + diff --git a/hack/verify-bazel.sh b/hack/verify-bazel.sh new file mode 100755 index 0000000000..d9c687f83a --- /dev/null +++ b/hack/verify-bazel.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# Copyright 2016 The Kubernetes Authors. +# +# 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 -o errexit +set -o nounset +set -o pipefail + +export KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. + +# Example: kube::util::trap_add 'echo "in trap DEBUG"' DEBUG +# See: http://stackoverflow.com/questions/3338030/multiple-bash-traps-for-the-same-signal +trap_add() { + local trap_add_cmd + trap_add_cmd=$1 + shift + + for trap_add_name in "$@"; do + local existing_cmd + local new_cmd + + # Grab the currently defined trap commands for this trap + existing_cmd=`trap -p "${trap_add_name}" | awk -F"'" '{print $2}'` + + if [[ -z "${existing_cmd}" ]]; then + new_cmd="${trap_add_cmd}" + else + new_cmd="${trap_add_cmd};${existing_cmd}" + fi + + # Assign the test + trap "${new_cmd}" "${trap_add_name}" + done +} + +_tmpdir="$(mktemp -d -t verify-bazel.XXXXXX)" +trap_add "rm -rf ${_tmpdir}" EXIT + +_tmp_gopath="${_tmpdir}/go" +_tmp_kuberoot="${_tmp_gopath}/src/k8s.io/kops" +mkdir -p "${_tmp_kuberoot}/.." +cp -a "${KUBE_ROOT}" "${_tmp_kuberoot}/.." + +cd "${_tmp_kuberoot}" +GOPATH="${_tmp_gopath}" bazel run //:gazelle + +diff=$(diff -Naupr "${KUBE_ROOT}" "${_tmp_kuberoot}" || true) + +if [[ -n "${diff}" ]]; then + echo "${diff}" + echo + echo "Run make bazel-gazelle" + exit 1 +fi