diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..7106fe58 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +dist: bionic + +stages: + - build + +matrix: + include: + - name: Static checks (format.sh) + stage: build + os: linux + addons: + apt: + packages: + - dos2unix + - recode + +script: + - bash ./format.sh diff --git a/format.sh b/format.sh new file mode 100755 index 00000000..f96caef2 --- /dev/null +++ b/format.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Loops through all text files tracked by Git. +git grep -zIl '' | +while IFS= read -rd '' f; do + # Exclude csproj and hdr files. + if [[ $f == *"csproj" ]]; then + continue + elif [[ $f == *"hdr" ]]; then + continue + fi + # Ensures that files are UTF-8 formatted. + recode UTF-8 $f 2> /dev/null + # Ensures that files have LF line endings. + dos2unix $f 2> /dev/null + # Ensures that files do not contain a BOM. + sed -i '1s/^\xEF\xBB\xBF//' "$f" + # Ensures that files end with newline characters. + tail -c1 < "$f" | read -r _ || echo >> "$f"; +done + +git diff > patch.patch +FILESIZE=$(stat -c%s patch.patch) +MAXSIZE=5 + +# If no patch has been generated all is OK, clean up, and exit. +if (( FILESIZE < MAXSIZE )); then + printf "Files in this commit comply with the formatting rules.\n" + rm -f patch.patch + exit 0 +fi + +# A patch has been created, notify the user, clean up, and exit. +printf "\n*** The following differences were found between the code " +printf "and the formatting rules:\n\n" +cat patch.patch +printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i '\n" +rm -f patch.patch +exit 1