#!/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