status-go/_assets/scripts/commit_check.sh

37 lines
1.0 KiB
Bash
Raw Normal View History

2024-04-08 15:47:44 +00:00
#!/usr/bin/env bash
set -euo pipefail
parse_commits() {
BASE_BRANCH=${BASE_BRANCH:-develop}
start_commit=${1:-origin/${BASE_BRANCH}}
2024-04-08 15:47:44 +00:00
end_commit=${2:-HEAD}
is_breaking_change=false
exit_code=0
2024-04-08 15:47:44 +00:00
echo "checking commits between: $start_commit $end_commit"
2024-04-08 15:47:44 +00:00
# Run the loop in the current shell using process substitution
while IFS= read -r message || [ -n "$message" ]; do
# Check if commit message follows conventional commits format
if [[ $message =~ ^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\(.*\))?(\_|!):.*$ ]]; then
# Check for breaking changes
if [[ ${BASH_REMATCH[3]} == *'!'* ]]; then
is_breaking_change=true
fi
else
echo "Commit message \"$message\" is not well-formed"
exit_code=1
2024-04-08 15:47:44 +00:00
fi
done < <(git log --format=%s "$start_commit".."$end_commit")
2024-04-08 15:47:44 +00:00
if [[ $exit_code -ne 0 ]]; then
exit ${exit_code}
fi
2024-04-08 15:47:44 +00:00
echo "$is_breaking_change"
}
parse_commits "$@"