PureXML/third_party/rules-swift/scripts/check-changelog-touched.sh

40 lines
1.1 KiB
Bash

#!/bin/sh
# Require CHANGELOG.md whenever the vendored rule baseline changes.
set -eu
ROOT=${RULES_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}
cd "$ROOT"
if [ "${1:-}" = "--working-tree" ]; then
changed=$(
{
git diff HEAD --name-only
git ls-files --others --exclude-standard
} | sort -u
)
elif [ "${1:-}" = "" ]; then
changed=$(git diff --cached --name-only)
else
changed=$(git diff --name-only "$1" HEAD)
fi
rules=$(printf '%s\n' "$changed" \
| grep -E '(^|/)[^/]+\.md$|^core/|^exp/|^\.swiftformat$|^\.swiftlint\.yml$|^\.pre-commit-config\.yaml$|^rules-freshness\.yml$|^scripts/sync-rules\.sh$' \
| grep -vxE 'CHANGELOG\.md|CONTRIBUTING\.md|README\.md' \
|| true)
if [ -z "$rules" ]; then
echo "changelog gate: OK (no rule files changed)"
exit 0
fi
if printf '%s\n' "$changed" | grep -qx 'CHANGELOG.md'; then
echo "changelog gate: OK (rule changes documented)"
exit 0
fi
echo "changelog gate: FAILED" >&2
echo " These rule files changed without CHANGELOG.md:" >&2
printf ' %s\n' $rules >&2
exit 1