diff options
Diffstat (limited to 'ci/check-style.sh')
-rwxr-xr-x | ci/check-style.sh | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/ci/check-style.sh b/ci/check-style.sh new file mode 100755 index 000000000000..9fe61bf0343f --- /dev/null +++ b/ci/check-style.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# Copyright 2019 Google LLC +# +# 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 -eu + +if [[ "${CHECK_STYLE}" != "yes" ]]; then + echo "Skipping code style check as it is disabled for this build." + exit 0 +fi + +# This script assumes it is running the top-level google-cloud-cpp directory. + +readonly BINDIR="$(dirname "$0")" + +# Build paths to ignore in find(1) commands by reading .gitignore. +declare -a ignore=( -path ./.git ) +if [[ -f .gitignore ]]; then + while read -r line; do + case "${line}" in + [^#]*/*) ignore+=( -o -path "./$(expr "${line}" : '\(.*\)/')" ) ;; + [^#]*) ignore+=( -o -name "${line}" ) ;; + esac + done < .gitignore +fi + +replace_original_if_changed() { + if [[ $# != 2 ]]; then + return 1 + fi + + local original="$1" + local reformatted="$2" + + if cmp -s "${original}" "${reformatted}"; then + rm -f "${reformatted}" + else + chmod --reference="${original}" "${reformatted}" + mv -f "${reformatted}" "${original}" + fi +} + +# Apply cmake_format to all the CMake list files. +# https://github.com/cheshirekow/cmake_format +find . \( "${ignore[@]}" \) -prune -o \ + \( -name 'CMakeLists.txt' -o -name '*.cmake' \) \ + -print0 | + while IFS= read -r -d $'\0' file; do + cmake-format "${file}" >"${file}.tmp" + replace_original_if_changed "${file}" "${file}.tmp" + done + +# Apply buildifier to fix the BUILD and .bzl formatting rules. +# https://github.com/bazelbuild/buildtools/tree/master/buildifier +find . \( "${ignore[@]}" \) -prune -o \ + \( -name BUILD -o -name '*.bzl' \) \ + -print0 | + xargs -0 buildifier -mode=fix + +# Apply shellcheck(1) to emit warnings for common scripting mistakes. +find . \( "${ignore[@]}" \) -prune -o \ + -iname '*.sh' -exec shellcheck \ + --exclude=SC1090 \ + --exclude=SC2034 \ + --exclude=SC2153 \ + --exclude=SC2181 \ + '{}' \; + +# Report any differences created by running the formatting tools. +git diff --ignore-submodules=all --color --exit-code . |