Files
go-semantic-release/scripts/commit-filter-check.sh

85 lines
3.4 KiB
Bash
Raw Normal View History

#!/bin/bash
commit_message_check (){
# Get the current branch and apply it to a variable
currentbranch=`git branch | grep \* | cut -d ' ' -f2`
# Gets the commits for the current branch and outputs to file
git log $currentbranch --pretty=format:"%H" --not master > shafile.txt
# loops through the file an gets the message
for i in `cat ./shafile.txt`;
do
# gets the git commit message based on the sha
gitmessage=`git log --format=%B -n 1 "$i"`
####################### TEST STRINGS comment out line 13 to use #########################################
#gitmessage="feat sdasdsadsaas (AEROGEAR-asdsada)"
#gitmessage="feat(some txt): some txt (AEROGEAR-****)"
#gitmessage="docs(some txt): some txt (AEROGEAR-1234)"
#gitmessage="fix(some txt): some txt (AEROGEAR-5678)"
#########################################################################################################
# Checks gitmessage for string feat, fix, docs and breaking, if the messagecheck var is empty if fails
messagecheck=`echo $gitmessage | grep -w "chore\|feat\|fix\|docs\|breaking"`
if [ -z "$messagecheck" ]
then
echo "Your commit message must begin with one of the following"
echo " feat(feature-name)"
echo " fix(fix-name)"
echo " docs(docs-change)"
echo " "
fi
if [ ${PerformProjectCheck} == "true" ]; then
#check the gitmessage for the Jira number
messagecheck=`echo $gitmessage | grep "(${ProjectID}-"`
if [ -z "$messagecheck" ]
then
echo "Your commit message must end with the following"
echo " (${ProjectID}-****)"
echo "Where **** is the Jira number"
echo " "
fi
fi
messagecheck=`echo $gitmessage | grep ": "`
if [ -z "$messagecheck" ]
then
echo "Your commit message has a formatting error please take note of special characters '():' position and use in the example below"
echo " type(some txt): some txt (${ProjectID}-****)"
echo "Where 'type' is fix, feat, docs or breaking and **** is the Jira number"
echo " "
fi
if [ ${PerformProjectCheck} == "true" ]; then
# All checks run at the same time by pipeing from one grep to another
messagecheck=`echo $gitmessage | grep -w "chore\|feat\|fix\|docs\|breaking" | grep "(${ProjectID}-" | grep ": "`
else
# All checks run at the same time by pipeing from one grep to another
messagecheck=`echo $gitmessage | grep -w "chore\|feat\|fix\|docs\|breaking" | grep ": "`
fi
# check to see if the messagecheck var is empty
if [ -z "$messagecheck" ]
then
echo "The commit message with sha: '$i' failed "
echo "Please review the following :"
echo " "
echo $gitmessage
echo " "
rm shafile.txt >/dev/null 2>&1
set -o errexit
else
echo "$messagecheck"
echo "'$i' commit message passed"
fi
done
rm shafile.txt >/dev/null 2>&1
}
ProjectID="NA" # Set to your Jira Project ID if want to track references to tickets.
PerformProjectCheck="false" # Set true if ProjectID is set and you want to ensure Jira ref is included on commit.
# Calling the function
commit_message_check