115 lines
4.3 KiB
Bash
115 lines
4.3 KiB
Bash
#!/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\|pull\)\///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='^[0-9]+\/head|^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 |