forked from jgm/pandoc
-
Notifications
You must be signed in to change notification settings - Fork 0
41 lines (39 loc) · 1.53 KB
/
commit-validation.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
name: commit-validation
on: [ push, pull_request ]
permissions:
contents: read
jobs:
check-commit-msg-length:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Check commit message length
run: |
# Get last commit messages
if [ "${{github.event_name}}" = "push" ]; then
if [ "${{github.event.before}}" = "0000000000000000000000000000000000000000" ]; then
# We are on a new branch
current="$(echo '${{github.ref}}' | sed 's!^refs/heads!origin!')"
readarray -t other < <(git show-ref | awk -F' ' '{ sub(/^refs\/remotes\//,"",$NF); }($NF != "'"$current"'"){print "^" $NF;}')
LOG_RANGE=( "$current" "${other[@]}" )
unset current other
else
# We are on existing branch
LOG_RANGE=( "${{github.event.before}}.." )
fi
elif [ "${{github.event_name}}" = "pull_request" ]; then
LOG_RANGE=( "origin/${{github.base_ref}}.." )
fi
if [[ -v LOG_RANGE ]]; then
if git log --no-merges --pretty=format:"%s" "${LOG_RANGE[@]}" -- | grep -qE "^[^#].{78}"; then
echo -e "Last commit log contains a line with more than 78 characters:\n"
git log --no-merges --pretty=format:"%h: %s" "${LOG_RANGE[@]}" -- | grep -E "^[^:]+: [^#].{78}"
echo
exit 1
else
echo "Commit log looks good."
fi
unset LOG_RANGE
else
echo "Not checking commits on ${{github.event_name}}"
fi