rsyslog/tests/CI/PR_validation.sh
2022-04-05 14:05:47 +01:00

83 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# This script "validates" a PR from a git PoV. We check that best
# practices are kept which most importantly means we try to detect
# fixup commits. These should not be part of a PR and squashed into
# the main commit.
# Copyright (C) 2019 by Rainer Gerhards
exitcode=0;
git log --oneline HEAD...origin/master >gitlog
if head -1 gitlog | grep -q "Merge " gitlog; then
printf 'This looks like a github merge branch. Removing first commit:\n'
head -1 gitlog
sed -i '1d' gitlog
fi
printf '%d commits in feature branch:\n' $(wc -l < gitlog)
cat gitlog
printf '\n'
if ! tests/CI/check_commit_text.py gitlog; then
cat >&2 <<- EOF
There are problems with the commit titles. Please fix them, ammend your
commit via "git commit --amend" and force-push the fixed branch via
"git push -f".
EOF
cat <<- EOF
For more info, please see
https://rainer.gerhards.net/2019/03/howto-great-pull-request.html#descriptive_commit_message
EOF
exitcode=1
fi
if [ $(wc -l < gitlog) -ge 3 ]; then
cat >&2 <<- EOF
This feature branch contains quite some commits. Consider squashing them.
Note: you can use
$ git commit -a --amend
to apply changes to a previous commit. No new commit will be created if
done so.
You possibly wonder why this CI check complains. See
https://rainer.gerhards.net/2019/03/squash-your-pull-requests.html
for the reasons and ways to fix the problems. It also describes what
happens if you do/want/can not fix the problems found by this check.
EOF
cat <<- EOF
For more info, please see
https://rainer.gerhards.net/2019/03/howto-great-pull-request.html#onecommit_featurepr
EOF
exitcode=1
fi
if grep -q "Merge " gitlog; then
grep "Merge " gitlog
cat >&2 <<- EOF
This feature branch contains merge commits. This almost always indicates that it
contains unwanted merges where a rebase should have been applied.
Please consider squashing the branch and/or rebasing it to current master.
You possibly wonder why this CI check complains. See
https://rainer.gerhards.net/2019/03/squash-your-pull-requests.html
for the reasons and ways to fix the problems. It also describes what
happens if you do/want/can not fix the problems found by this check.
EOF
exitcode=1
fi
if [ "$exitcode" != "0" ]; then
cat >&2 <<- EOF
======================================================================
General advise on best practices for rsyslog pull requests:
https://rainer.gerhards.net/2019/03/howto-great-pull-request.html
======================================================================
EOF
fi
exit $exitcode