nix/bin/gc-check

41 lines
951 B
Bash
Executable file

#!/usr/bin/env bash
# Validate conventional commit messages in git history
# Usage: gc-check [number_of_commits]
set -o errexit
set -o nounset
# Full conventional commit regex:
# type(optional-scope)optional-!: description
COMMIT_REGEX='^(feat|fix|docs|style|refactor|test|chore|perf|ci|build)(\([^)]+\))?!?: .+'
count=${1:-10}
errors=0
echo "Checking last $count commits..."
echo ""
while IFS= read -r line; do
hash=$(echo "$line" | cut -d' ' -f1)
msg=$(echo "$line" | cut -d' ' -f2-)
if echo "$msg" | grep -qE "$COMMIT_REGEX"; then
if echo "$msg" | grep -qE '^[^:]+!:'; then
echo "$hash $msg (BREAKING)"
else
echo "$hash $msg"
fi
else
echo "$hash $msg"
errors=$((errors + 1))
fi
done < <(git log --oneline -n "$count")
echo ""
if [ $errors -gt 0 ]; then
echo "$errors invalid commit(s) found"
exit 1
else
echo "All commits valid"
fi