github.com/google/syzkaller@v0.0.0-20240517125934-c0f1611a36d6/tools/check-commits.sh (about) 1 #!/usr/bin/env bash 2 # Copyright 2020 syzkaller project authors. All rights reserved. 3 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 4 5 set -e 6 7 # .github/workflows/ci.yml passes GITHUB_PR_HEAD_SHA and GITHUB_PR_COMMITS for pull requests. 8 # That's the range we want to check for PRs. If these are not set, we check from the current HEAD 9 # to the master branch (presumably a local run). If master does not exist (presumably CI run on 10 # a commit into a fork tree), check HEAD commit only. 11 GITHUB_PR_HEAD_SHA="${GITHUB_PR_HEAD_SHA:-HEAD}" 12 if [ "${GITHUB_PR_COMMITS}" == "" ]; then 13 GITHUB_PR_COMMITS=`git log --oneline master..${GITHUB_PR_HEAD_SHA} | wc -l` 14 if [ "${GITHUB_PR_COMMITS}" == "" ] || [ "${GITHUB_PR_COMMITS}" == "0" ]; then 15 GITHUB_PR_COMMITS=1 16 fi 17 fi 18 19 COMMITS=0 20 FAILED="" 21 HASHES=$(git log --format="%h" -n ${GITHUB_PR_COMMITS} ${GITHUB_PR_HEAD_SHA}) 22 for HASH in ${HASHES}; do 23 ((COMMITS+=1)) 24 SUBJECT=$(git show --format="%s" --no-patch ${HASH}) 25 BODY=$(git show --format="%B" --no-patch ${HASH}) 26 PATTERN="^(Revert \"|(([a-z0-9/_.-]+|Makefile|CONTRIBUTORS|README.md)(, )?)+:\ [^A-Z].+[^.]$)" 27 if ! [[ ${SUBJECT} =~ $PATTERN ]]; then 28 echo "##[error]Wrong commit subject format: '${SUBJECT}'.\ 29 Please use 'main/affected/package: short change description'.\ 30 See docs/contributing.md for details.\ 31 Regex pattern used to check commit subjects is '$PATTERN'." 32 FAILED="1" 33 fi 34 LONGLINE='[^\ 35 ]{121}' 36 if [[ ${BODY} =~ ${LONGLINE} ]]; then 37 echo "##[error]Please limit commit description line length to 120 characters." 38 echo "${BODY}" 39 FAILED="1" 40 fi 41 done 42 echo "$COMMITS commits checked for format style (git log -n ${GITHUB_PR_COMMITS} ${GITHUB_PR_HEAD_SHA})" 43 if [ "$FAILED" != "" ]; then exit 1; fi