Skip to content

Commit

Permalink
MAT-6378 Enforce jira ticket in git commit message
Browse files Browse the repository at this point in the history
  • Loading branch information
adongare committed Feb 13, 2024
1 parent 59d6495 commit d96c97b
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions .github/workflows/commit_message_validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: validate git commit messages

on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]

jobs:
commit_message_validation:
name: validate git commit messages
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: '${{ github.event.pull_request.base.ref }}'

- name: Execute message validation
run: |
# Checkout branch
git checkout -q ${{ github.event.pull_request.head.ref }}
# Set variables
BASE_BRANCH=${{ github.event.pull_request.base.ref }}
msg_regex='MAT-[0-9]+\s.*'
# This list permits some commits
commit_static_permit_list="(^Merge pull request \#)|(^Merge branch)|(^Revert \")"
# Initialize invalidCommit as false, will be set to true by any invalid commits
invalidCommit=false
CURRENT_BRANCH=$(git branch | grep ^\* | cut -d "*" -f 2 | cut -d " " -f 2)
# Find hash of commit most common ancestor, e.g. where branch began
echo $BASE_BRANCH
echo $CURRENT_BRANCH
BRANCH_MERGE_BASE=$(git merge-base ${BASE_BRANCH} ${CURRENT_BRANCH})
# Find all commits since common ancestor
BRANCH_COMMITS=$(git rev-list ${BRANCH_MERGE_BASE}..HEAD)
# Check every commit message since ancestor for regex match
for commit in $BRANCH_COMMITS; do
# Check if ticket in static permit-list for non-Jira commit_sha
if $(git log --max-count=1 --format=%B $commit | grep -iqE "$commit_static_permit_list"); then
: #If commit matches regex, commit is valid, do nothing
elif git log --max-count=1 --format=%B $commit | tr '[a-z]' '[A-Z]' | grep -iqE "$msg_regex"; then
: #If commit matches regex, commit is valid, do nothing
else
# If commit doesn't match regex, commit isn't valid, print commit info
echo "************"
printf "Invalid commit message: \"%s\" and hash: %s\n" "$(git log --max-count=1 --format=%B $commit)" "$commit"
echo "************"
# Set this variable to trigger rejection if any commit fails regex
invalidCommit=true
fi
done
# If any commit are invalid, print reject message
if [ "$invalidCommit" == true ]; then
echo "Your push was rejected because at least one commit message on this branch is invalid"
echo "Please fix the commit message(s) and push again."
echo "https://help.github.com/en/articles/changing-a-commit-message"
echo "************"
exit 1
elif [ "$invalidCommit" == false ]; then
echo "************"
echo "All commits are valid"
echo "************"
exit 0
fi

0 comments on commit d96c97b

Please sign in to comment.