| #!/usr/bin/env bash | |
| set -Ee -o pipefail | |
| SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| source "${SCRIPTDIR}/.validate" | |
| ghShorthandRegex='(^|[^[:alnum:]_])#[0-9]+' | |
| ghRefPrefixRegex='(^|[^[:alnum:]_./-])' | |
| ghRepoNameRegex='[[:alnum:]_.-]+' | |
| ghRepoRefRegex="${ghRefPrefixRegex}${ghRepoNameRegex}#[0-9]+" | |
| ghOwnerRepoRefRegex="${ghRefPrefixRegex}${ghRepoNameRegex}/${ghRepoNameRegex}#[0-9]+" | |
| ghURLRegex='https?://(www\.)?github\.com/[^[:space:]/]+/[^[:space:]/]+/(issues|pull)/[0-9]+' | |
| badReferences=() | |
| check_references() { | |
| local source="$1" | |
| local content="$2" | |
| local matches | |
| matches=$(grep -En -e "$ghShorthandRegex" -e "$ghRepoRefRegex" -e "$ghOwnerRepoRefRegex" -e "$ghURLRegex" <<< "$content" || true) | |
| if [ -n "$matches" ]; then | |
| badReferences+=("$source") | |
| echo "::error::${source} contains a GitHub issue or PR reference. Reference commit hashes instead." | |
| fi | |
| } | |
| for commit in $(validate_log --format='format:%H%n'); do | |
| if [ -z "$(git log -1 --format='format:' --name-status "$commit")" ]; then | |
| # no content (ie, Merge commit, etc) | |
| continue | |
| fi | |
| check_references "Commit $commit" "$(git log -1 --format='format:%B' "$commit")" | |
| done | |
| if [ "${#badReferences[@]}" -ne 0 ]; then | |
| printf "\nPlease remove GitHub issue or PR references from commit messages.\n" | |
| printf "Reference commit hashes instead.\n" | |
| printf "Keep GitHub issue or PR references in GitHub-visible text, such as PR descriptions or comments.\n" | |
| exit 1 | |
| fi |