1
0
Fork 0
docsearch/scripts/validate-commit-msgs

55 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e # exit when error
[ -z $TRAVIS_PULL_REQUEST ] && TRAVIS_PULL_REQUEST="false"
if [ $TRAVIS_PULL_REQUEST == "false" ]; then
echo "No need to validate commit message when not in a pull request"
exit 0
fi
# Checks the commits msgs in the range of commits travis is testing.
# Based heavily on
# https://raw.githubusercontent.com/angular/angular.js/291d7c467fba51a9cb89cbeee62202d51fe64b09/validate-commit-msg.js
# Travis's docs are misleading.
# Check for either a commit or a range (which apparently isn't always a range) and fix as needed.
if [ "$#" -gt 0 ]; then
RANGE=$1
elif [ "$TRAVIS_COMMIT_RANGE" != "" ]; then
RANGE=$TRAVIS_COMMIT_RANGE
elif [ "$TRAVIS_COMMIT" != "" ]; then
RANGE=$TRAVIS_COMMIT
fi
if [ "$RANGE" == "" ]; then
# locally
RANGE="origin/develop..HEAD"
elif [[ "$RANGE" == *...* ]]; then
# Travis sends the ranges with 3 dots. Git only wants 2.
RANGE=`echo $TRAVIS_COMMIT_RANGE | sed 's/\.\.\./../'`
elif [[ "$RANGE" != *..* ]]; then
RANGE="$RANGE~..$RANGE"
fi
EXIT=0
for sha in `git log --format=oneline "$RANGE" | cut '-d ' -f1`; do
echo -n "Checking commit message for $sha... "
FIRST_LINE=`git log --format=%B -n 1 $sha | head -1`
MSG_LENGTH=`echo "$FIRST_LINE" | wc -c`
if [ $MSG_LENGTH -gt 100 ]; then
echo "KO (too long): $FIRST_LINE"
EXIT=2
elif echo $FIRST_LINE | grep -qE '^Merge (pull request|branch)'; then
echo "OK (merge)"
elif echo $FIRST_LINE | grep -qE '^(feat|fix|docs?|style|refactor|perf|tests?|chore|revert)\(.+\): .*'; then
echo "OK"
else
echo "KO (format): $FIRST_LINE"
EXIT=1
fi
done
exit $EXIT