name: commit-validation on: [ push, pull_request ] jobs: check-commit-msg-length: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - 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