Travis CI: add clang-format check
authorLei Zhang <antiagainst@google.com>
Fri, 1 Dec 2017 03:24:13 +0000 (22:24 -0500)
committerLei Zhang <antiagainst@google.com>
Tue, 5 Dec 2017 13:02:33 +0000 (08:02 -0500)
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1029

.travis.yml
utils/check_code_format.sh [new file with mode: 0755]

index e980854..306f491 100644 (file)
@@ -32,6 +32,8 @@ matrix:
     - env: BUILD_ANDROID_CMAKE=ON
     # Additional build using Android NDK with Android.mk
     - env: BUILD_ANDROID_MK=ON
+    # Additional check over format
+    - env: CHECK_FORMAT=ON
   exclude:
     # Skip GCC builds on macOS.
     - os: osx
@@ -54,6 +56,9 @@ before_install:
       git clone --depth=1 https://github.com/taka-no-me/android-cmake.git $HOME/android-cmake;
       export TOOLCHAIN_PATH=$HOME/android-cmake/android.toolchain.cmake;
     fi
+  - if [[ "$CHECK_FORMAT" == "ON" ]]; then
+      curl -L http://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py -o utils/clang-format-diff.py;
+    fi
 
 before_script:
   - git clone --depth=1 https://github.com/KhronosGroup/SPIRV-Headers external/spirv-headers
@@ -65,8 +70,8 @@ script:
   # Due to the limitation of Travis platform, we cannot start too many concurrent jobs.
   # Otherwise GCC will panic with internal error, possibility because of memory issues.
   # ctest with the current tests doesn't profit from using more than 4 threads.
-  - export NPROC=4;
-  - mkdir build && cd build;
+  - export NPROC=4
+  - mkdir build && cd build
   - if [[ "$BUILD_ANDROID_MK" == "ON" ]]; then
       export BUILD_DIR=$(pwd);
       mkdir ${BUILD_DIR}/libs;
@@ -82,6 +87,8 @@ script:
             -DSPIRV_BUILD_COMPRESSION=ON
             -DSPIRV_SKIP_TESTS=ON ..;
       make -j${NPROC};
+    elif [[ "$CHECK_FORMAT" == "ON" ]]; then
+      ./utils/check_code_format.sh;
     else
       cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DSPIRV_BUILD_COMPRESSION=ON -DCMAKE_INSTALL_PREFIX=install ..;
       make -j${NPROC} install;
diff --git a/utils/check_code_format.sh b/utils/check_code_format.sh
new file mode 100755 (executable)
index 0000000..a6a5879
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash
+# Copyright (c) 2017 Google Inc.
+
+# 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.
+#
+# Script to determine if source code in Pull Request is properly formatted.
+# Exits with non 0 exit code if formatting is needed.
+#
+# This script assumes to be invoked at the project root directory.
+
+FILES_TO_CHECK=$(git diff --name-only master | grep -E ".*\.(cpp|cc|c\+\+|cxx|c|h|hpp)$")
+
+if [ -z "${FILES_TO_CHECK}" ]; then
+  echo "No source code to check for formatting."
+  exit 0
+fi
+
+FORMAT_DIFF=$(git diff -U0 master -- ${FILES_TO_CHECK} | python ./utils/clang-format-diff.py -p1 -style=file)
+
+if [ -z "${FORMAT_DIFF}" ]; then
+  echo "All source code in PR properly formatted."
+  exit 0
+else
+  echo "Found formatting errors!"
+  echo "${FORMAT_DIFF}"
+  exit 1
+fi