PureYAML/scripts/check-changelog-touched.sh

53 lines
1.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -u
BASE_REF="${BASE_REF:-origin/main}"
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
echo "changelog: not in a git repository" >&2
exit 1
fi
if ! git rev-parse --verify "$BASE_REF" >/dev/null 2>&1; then
if git rev-parse --verify HEAD^ >/dev/null 2>&1; then
BASE_REF="HEAD^"
else
echo "changelog: no base ref yet, skipping initial commit gate"
exit 0
fi
fi
changed=$(
{
git diff --name-only "$BASE_REF"...HEAD --
git diff --cached --name-only --
git diff --name-only --
} | awk 'NF && !seen[$0]++'
)
source_touched=0
while IFS= read -r path; do
case "$path" in
Sources/*|Package.swift)
source_touched=1
;;
esac
done <<EOF
$changed
EOF
if [ "$source_touched" -eq 0 ]; then
echo "changelog: no source changes"
exit 0
fi
if printf '%s\n' "$changed" | grep -qx 'CHANGELOG.md'; then
echo "changelog: CHANGELOG.md updated"
exit 0
fi
echo "changelog: source changed but CHANGELOG.md was not updated" >&2
echo "changelog: update CHANGELOG.md under Unreleased" >&2
exit 1