#!/bin/bash # Error message for BRANCH POLICY error_msg_branch=$(cat <<-END @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ !!! Push not allowed by BRANCH NAME policy !!! @ @ @ @ You branch should be named with these templates: @ @ - master @ @ - main @ @ - feature/EVA_ID-000--* @ @ - bugfix/* @ @ - hotfix/* @ @ @ @ Example: feature/DO-167--add_new_functionality @ @ @ @ Wiki: https://eva.avroid.tech/project/Document/DOC-000518 @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ END ) error_msg_commit=$(cat <<-END @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ !!! Your Commit does not have a referance to Eva ticket !!! @ @ @ @ Please correct your Git messages, and push again. @ @ Example: "[DO-1234] This is a correct Eva reference" @ @ @ @ Wiki: https://eva.avroid.tech/project/Document/DOC-000518 @ @ @ @ To FORCE push, use "bugfix" or "hotfix" in your commit message @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ END ) while read oldrev newrev refname do # # Step 1: # Get Git commit information # BRANCH_NAME_FULL=$refname BRANCH_NAME="$(echo $BRANCH_NAME_FULL | sed 's/refs\/heads\///g')" COMMIT_MESSAGE=$(git log --format=%B -n 1) echo "[INFO] BRANCH NAME: $BRANCH_NAME" # # Step 2: # Policy - Check that brunch name is enforced by branch name # echo "[INFO] Policy - Check that brunch name is enforced by branch name" # Regexp for allowed names of branches branch_name_format='^master|^main|^feature\/[a-zA-Z0-9,\.\_\-]+-[0-9]+.*|^hotfix\/.*|^bugfix\/.*' if [[ ! $BRANCH_NAME =~ $branch_name_format ]]; then echo "$error_msg_branch" >&2 exit 1 else echo "Push is successful" fi # # Step 3: # Policy - Check commit message for Eva issue number # # Configuration echo "[INFO] Policy - Check commit message for Eva issue number" issueIdRegex="[a-zA-Z0-9,\.\_\-]+-[0-9]+" fixMsgRegex="bugfix|hotfix" info_msg="[INFO] The commit message looks good" error_msg="[POLICY] The commit doesn't reference a Eva issue" # Get all commits from this push for sha1Commit in $(git rev-list $oldrev..$newrev); do # Receive git commits sha from git history in chronologic order echo "[INFO] Processing commit with sha: $sha1Commit"; # Get commit message from commit commitMessage=$(git log --format=%B -n 1 $sha1Commit) # Check with RegEX if commit has Eva reference issueIds=$(echo $commitMessage | grep -Eo $issueIdRegex) fixMsg=$(echo $commitMessage | grep -Eo $fixMsgRegex) # Check if this commit urgent e.g. hotfox or bugfix if [[ -n "${fixMsg}" ]]; then echo "[WARNING] Found "bugfix|hotfix" in msg. Force skipping check for EvaID" exit 0 fi # Check for issueIDs in commit message echo "[INFO] Found Eva IDs in commit: $issueIds" if [[ -z "${issueIds}" ]]; then echo "$error_msg: $commitMessage" >&2 echo "$error_msg_commit" >&2 exit 1 fi done done # # Exit # exit 0