| #!/usr/bin/env bash |
| |
| # Copyright 2014 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. |
| |
| # This script checks whether the source code needs to be formatted or not by |
| # `gofmt`. Run `hack/update-gofmt.sh` to actually format sources. |
| # |
| # Note: gofmt output can change between go versions. |
| # |
| # Usage: `hack/verify-gofmt.sh`. |
| |
| set -o errexit |
| set -o nounset |
| set -o pipefail |
| |
| KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. |
| source "${KUBE_ROOT}/hack/lib/init.sh" |
| |
| cd "${KUBE_ROOT}" |
| |
| kube::golang::setup_env |
| |
| find_files() { |
| find . -not \( \ |
| \( \ |
| -wholename './.git' \ |
| -o -wholename './_output' \ |
| -o -wholename './release' \ |
| -o -wholename './target' \ |
| -o -wholename '*/third_party/*' \ |
| -o -wholename '*/vendor/*' \ |
| -o -wholename '*/testdata/*' \ |
| -o -wholename '*/bindata.go' \ |
| \) -prune \ |
| \) -name '*.go' |
| } |
| |
| # gofmt exits with non-zero exit code if it finds a problem unrelated to |
| # formatting (e.g., a file does not parse correctly). Without "|| true" this |
| # would have led to no useful error message from gofmt, because the script would |
| # have failed before getting to the "echo" in the block below. |
| diff=$(find_files | xargs gofmt -d -s 2>&1) || true |
| if [[ -n "${diff}" ]]; then |
| echo "${diff}" >&2 |
| echo >&2 |
| echo "Run ./hack/update-gofmt.sh" >&2 |
| exit 1 |
| fi |