@@ -26,19 +26,28 @@ jobs:
2626 BASE_SHA=${{ github.event.pull_request.base.sha }}
2727 HEAD_SHA=${{ github.event.pull_request.head.sha }}
2828
29- # Use 3-dot syntax so we only see changes introduced by this PR
30- CHANGED_FILES=$(git diff --name-only "$BASE_SHA...$HEAD_SHA" -- changelog.d/ | grep -vE "^$" || true)
29+ # Use 3-dot syntax so we only see changes introduced by this PR
30+ CHANGED_FILES=$(git diff --name-status "$BASE_SHA...$HEAD_SHA" -- changelog.d/ | awk '$1 ~ /^[AM]/ {print $2}' || true)
31+ DELETED_FILES=$(git diff --name-status "$BASE_SHA...$HEAD_SHA" -- changelog.d/ | awk '$1 ~ /^D/ {print $2}' || true)
32+ CHANGELOG_MODIFIED=$(git diff --name-only "$BASE_SHA...$HEAD_SHA" -- CHANGELOG.md | grep -vE "^$" || true)
3133 else
3234 # For push events, compare with the previous commit
3335 HEAD_SHA=${{ github.sha }}
3436 BASE_SHA=$(git rev-parse HEAD~1)
35- CHANGED_FILES=$(git diff --name-only "$BASE_SHA" "$HEAD_SHA" -- changelog.d/ | grep -vE "^$" || true)
37+ CHANGED_FILES=$(git diff --name-status "$BASE_SHA" "$HEAD_SHA" -- changelog.d/ | awk '$1 ~ /^[AM]/ {print $2}' || true)
38+ DELETED_FILES=$(git diff --name-status "$BASE_SHA" "$HEAD_SHA" -- changelog.d/ | awk '$1 ~ /^D/ {print $2}' || true)
39+ CHANGELOG_MODIFIED=$(git diff --name-only "$BASE_SHA" "$HEAD_SHA" -- CHANGELOG.md | grep -vE "^$" || true)
3640 fi
3741
3842 echo "BASE_SHA: $BASE_SHA"
3943 echo "HEAD_SHA: $HEAD_SHA"
44+ echo "CHANGELOG_MODIFIED: ${CHANGELOG_MODIFIED:-false}"
4045 echo "CHANGED_FILES:"
4146 echo "$CHANGED_FILES"
47+ if [ -n "$DELETED_FILES" ]; then
48+ echo "DELETED_CHANGELOG_FILES:"
49+ echo "$DELETED_FILES"
50+ fi
4251
4352 # Check if commit is by zebot with wire-build update message
4453 COMMIT_AUTHOR=$(git log --format="%an" -1 $HEAD_SHA)
@@ -51,16 +60,26 @@ jobs:
5160 exit 0
5261 fi
5362
54- if [ -z "$CHANGED_FILES" ]; then
55- echo "No files changed in changelog.d/ for this ${GITHUB_EVENT_NAME:-event}."
56- echo "Every PR must add or modify at least one changelog.d/ entry."
57- exit 1
58- fi
59-
6063 PATTERN='^(Added|Changed|Deprecated|Removed|Fixed|Security): .+'
6164 LINE_FOUND=false
65+ ALLOW_RELEASE_CLEANUP=false
66+
67+ if [ -z "$CHANGED_FILES" ]; then
68+ if [ -n "$DELETED_FILES" ] && [ -n "$CHANGELOG_MODIFIED" ]; then
69+ echo "No new or modified changelog.d/ entries found, but CHANGELOG.md changed, so this release cleanup is allowed."
70+ ALLOW_RELEASE_CLEANUP=true
71+ else
72+ echo "No files changed in changelog.d/ for this ${GITHUB_EVENT_NAME:-event}."
73+ echo "Every PR must add or modify at least one changelog.d/ entry."
74+ exit 1
75+ fi
76+ fi
6277
6378 for file in $CHANGED_FILES; do
79+ if [ ! -f "$file" ]; then
80+ echo "Skipping missing changelog file: $file"
81+ continue
82+ fi
6483 while IFS= read -r line; do
6584 if [[ -z "$line" ]]; then
6685 continue
7594 done < "$file"
7695 done
7796
78- if [ "$LINE_FOUND" = false ]; then
97+ if [ "$LINE_FOUND" = false ] && [ "$ALLOW_RELEASE_CLEANUP" = false ] ; then
7998 echo "No valid lines found in changelog.d/ files. Ensure there is a newline at the end of files."
8099 echo "Please read more policies about changelog at https://keepachangelog.com/en/1.1.0"
81100 exit 1
0 commit comments