From f4fd0acd31886388e5ea8974e5c6c518b9aac969 Mon Sep 17 00:00:00 2001 From: James Munnelly Date: Mon, 10 Sep 2018 21:20:32 +0100 Subject: [PATCH] Add update-bazel.sh rule to run gazelle and kazel Signed-off-by: James Munnelly --- .kazelcfg.json | 4 +++ hack/BUILD.bazel | 19 ++++++++++++++ hack/bin/BUILD.bazel | 8 ++++++ hack/update-bazel.sh | 39 ++++++++++++++++++++++++++++ hack/verify-bazel.sh | 60 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 130 insertions(+) create mode 100644 .kazelcfg.json create mode 100755 hack/update-bazel.sh create mode 100755 hack/verify-bazel.sh diff --git a/.kazelcfg.json b/.kazelcfg.json new file mode 100644 index 000000000..1c115a6aa --- /dev/null +++ b/.kazelcfg.json @@ -0,0 +1,4 @@ +{ + "GoPrefix": "github.com/jetstack/cert-manager", + "AddSourcesRules": true +} diff --git a/hack/BUILD.bazel b/hack/BUILD.bazel index e8e108127..97eadd32b 100644 --- a/hack/BUILD.bazel +++ b/hack/BUILD.bazel @@ -26,6 +26,25 @@ sh_test( tags = ["lint"], ) +sh_binary( + name = "update-bazel", + srcs = ["update-bazel.sh"], + data = [ + "//hack/bin:buildozer", + "//hack/bin:gazelle", + "//hack/bin:kazel", + ], +) + +sh_test( + name = "verify-bazel", + srcs = ["verify-bazel.sh"], + data = [ + ":update-bazel", + "//:all-srcs", + ], +) + filegroup( name = "package-srcs", srcs = glob(["**"]), diff --git a/hack/bin/BUILD.bazel b/hack/bin/BUILD.bazel index def615966..a8f1b3f70 100644 --- a/hack/bin/BUILD.bazel +++ b/hack/bin/BUILD.bazel @@ -39,6 +39,14 @@ genrule( visibility = ["//visibility:public"], ) +genrule( + name = "fetch_gazelle", + srcs = ["@bazel_gazelle//cmd/gazelle"], + outs = ["gazelle"], + cmd = "cp $(SRCS) $@", + visibility = ["//visibility:public"], +) + config_setting( name = "k8", values = {"host_cpu": "k8"}, diff --git a/hack/update-bazel.sh b/hack/update-bazel.sh new file mode 100755 index 000000000..bd414361e --- /dev/null +++ b/hack/update-bazel.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Copyright 2018 The Jetstack cert-manager contributors. +# +# 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 + +# This script should be run via `bazel run //hack:update-bazel` +REPO_ROOT=${BUILD_WORKSPACE_DIRECTORY:-"$(cd "$(dirname "$0")" && pwd -P)"/..} +runfiles="$(pwd)" +export PATH="${runfiles}/hack/bin:${PATH}" +cd "${REPO_ROOT}" + +# Generate BUILD.bazel files for golang types +gazelle fix \ + -external vendored \ + -build_file_name BUILD.bazel \ + -go_prefix github.com/jetstack/cert-manager + +# Update autogenerated package-srcs and all-srcs rules +kazel + +# Add manual tags to all rules in vendor/ docs/generated/ and test/e2e/ +buildozer -types 'go_library,go_binary,go_test' 'add tags manual' '//vendor/...:*' || [[ $? -eq 3 ]] +buildozer -types 'go_library,go_binary,go_test' 'add tags manual' '//docs/generated/...:*' || [[ $? -eq 3 ]] +buildozer -types 'go_library,go_binary,go_test' 'add tags manual' '//test/e2e/...:*' || [[ $? -eq 3 ]] diff --git a/hack/verify-bazel.sh b/hack/verify-bazel.sh new file mode 100755 index 000000000..4e472aea4 --- /dev/null +++ b/hack/verify-bazel.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# Copyright 2018 The Jetstack cert-manager contributors. +# +# 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 + +# TODO: this particular script should probably not run under 'bazel test'. +# Because it *does*, and because bazel test relies upon BUILD.bazel files to +# determine which runfiles to include, there can be cases where verify-bazel +# passes, however upon a run of update-bazel, files could change because they +# are not visible to verify-bazel during the 'bazel test' phase. + +RULE_NAME="bazel" + +SCRIPT_ROOT=$(dirname "${BASH_SOURCE}")/.. + +_tmp="$(mktemp -d)" +DIFFROOT="${SCRIPT_ROOT}/" +TMP_DIFFROOT="${_tmp}/" + +cleanup() { + rm -rf "${_tmp}" +} +trap "cleanup" EXIT SIGINT + +cleanup + +mkdir -p "${TMP_DIFFROOT}" +rsync -avvL "${DIFFROOT}"/ "${TMP_DIFFROOT}" >/dev/null +# remove __main__ directory copied to tmp +rm -Rf "${TMP_DIFFROOT}/__main__" + +cd "${TMP_DIFFROOT}" +export BUILD_WORKSPACE_DIRECTORY="$(pwd)" +"hack/update-${RULE_NAME}.sh" + +echo "diffing ${DIFFROOT} against freshly generated codegen" +ret=0 +diff --exclude=__main__ -Naupr "${DIFFROOT}" "${TMP_DIFFROOT}" || ret=$? +if [[ $ret -eq 0 ]] +then + echo "${DIFFROOT} up to date." +else + echo "${DIFFROOT} is out of date. Please run 'bazel run //hack:update-${RULE_NAME}'" + exit 1 +fi