Travis: Run clang-format static check
Commits or PRs that do not respect the clang-format style that we enforce will fail the test. Adding ubuntu-toolchain-r-test as its libstdc++ is necessary to install libllvm-3.9.
This commit is contained in:
14
.travis.yml
14
.travis.yml
@ -18,6 +18,8 @@ env:
|
|||||||
- GODOT_TARGET=windows
|
- GODOT_TARGET=windows
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
|
include:
|
||||||
|
- env: STATIC_CHECKS=yes
|
||||||
exclude:
|
exclude:
|
||||||
- os: linux
|
- os: linux
|
||||||
env: GODOT_TARGET=iphone
|
env: GODOT_TARGET=iphone
|
||||||
@ -42,6 +44,9 @@ matrix:
|
|||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-trusty-3.9
|
||||||
packages:
|
packages:
|
||||||
- build-essential
|
- build-essential
|
||||||
- scons
|
- scons
|
||||||
@ -65,6 +70,9 @@ addons:
|
|||||||
- g++-mingw-w64-x86-64
|
- g++-mingw-w64-x86-64
|
||||||
- mingw-w64
|
- mingw-w64
|
||||||
|
|
||||||
|
# For style checks.
|
||||||
|
- clang-format-3.9
|
||||||
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; brew install scons; fi
|
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; brew install scons; fi
|
||||||
@ -75,4 +83,8 @@ before_script:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- scons platform=$GODOT_TARGET CXX=$CXX openssl=builtin
|
- if [ "$STATIC_CHECKS" = "yes" ]; then
|
||||||
|
sh ./misc/travis/clang-format.sh;
|
||||||
|
else
|
||||||
|
scons platform=$GODOT_TARGET CXX=$CXX openssl=builtin;
|
||||||
|
fi
|
||||||
|
|||||||
40
misc/travis/clang-format.sh
Executable file
40
misc/travis/clang-format.sh
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
CLANG_FORMAT=clang-format-3.9
|
||||||
|
|
||||||
|
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||||
|
# Check the whole commit range against $TRAVIS_BRANCH, the base merge branch
|
||||||
|
# We could use $TRAVIS_COMMIT_RANGE but it doesn't play well with force pushes
|
||||||
|
RANGE="$(git rev-parse $TRAVIS_BRANCH) HEAD"
|
||||||
|
else
|
||||||
|
# Test only the last commit
|
||||||
|
RANGE=HEAD
|
||||||
|
fi
|
||||||
|
|
||||||
|
FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -e "\.cpp$" -e "\.h$" -e "\.inc$")
|
||||||
|
echo "Checking files:\n$FILES"
|
||||||
|
|
||||||
|
# create a random filename to store our generated patch
|
||||||
|
prefix="static-check-clang-format"
|
||||||
|
suffix="$(date +%s)"
|
||||||
|
patch="/tmp/$prefix-$suffix.patch"
|
||||||
|
|
||||||
|
for file in $FILES; do
|
||||||
|
"$CLANG_FORMAT" -style=file "$file" | \
|
||||||
|
diff -u "$file" - | \
|
||||||
|
sed -e "1s|--- |--- a/|" -e "2s|+++ -|+++ b/$file|" >> "$patch"
|
||||||
|
done
|
||||||
|
|
||||||
|
# if no patch has been generated all is ok, clean up the file stub and exit
|
||||||
|
if [ ! -s "$patch" ] ; then
|
||||||
|
printf "Files in this commit comply with the clang-format rules.\n"
|
||||||
|
rm -f "$patch"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# a patch has been created, notify the user and exit
|
||||||
|
printf "\n*** The following differences were found between the code to commit "
|
||||||
|
printf "and the clang-format rules:\n\n"
|
||||||
|
cat "$patch"
|
||||||
|
printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
|
||||||
|
exit 1
|
||||||
Reference in New Issue
Block a user