1- name : " Verify CHANGELOG Update"
1+ # This action requires that any PR targeting the main branch should touch at
2+ # least one CHANGELOG file. If a CHANGELOG entry is not required, add the
3+ # "Skip Changelog" label, the "dependencies" label, or include "[chore]" in
4+ # the PR title.
5+
6+ name : changelog
27
38on :
49 pull_request :
510 types : [opened, synchronize, reopened, labeled, unlabeled]
11+ branches :
12+ - main
13+
14+ permissions : read-all
615
716jobs :
8- check- changelog :
17+ changelog :
918 runs-on : ubuntu-latest
10- name : Enforce CHANGELOG updates
19+
20+ # Skip if:
21+ # - PR has "Skip Changelog" label
22+ # - PR has "dependencies" label
23+ # - PR title contains "[chore]"
24+ if : >
25+ ! contains(github.event.pull_request.labels.*.name, 'Skip Changelog') &&
26+ ! contains(github.event.pull_request.labels.*.name, 'dependencies') &&
27+ ! contains(github.event.pull_request.title, '[chore]')
1128
1229 steps :
13- - name : Checkout full history
30+ - name : Checkout repository
1431 uses : actions/checkout@v4
1532 with :
1633 fetch-depth : 0
1734
18- - name : Get changed files
19- id : diff
35+ - name : Verify CHANGELOG updated
2036 run : |
37+ echo "Fetching base branch..."
2138 git fetch origin ${{ github.base_ref }} --depth=1
22- echo "changed_files=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)" >> $GITHUB_OUTPUT
2339
24- - name : Detect skip labels
25- id : skip
26- run : |
27- labels="${{ toJson(github.event.pull_request.labels) }}"
28- echo "Labels on PR: $labels"
29-
30- if echo "$labels" | grep -q '"Skip Changelog"'; then
31- echo "skip=true" >> $GITHUB_OUTPUT
32- elif echo "$labels" | grep -q '"dependencies"'; then
33- echo "skip=true" >> $GITHUB_OUTPUT
40+ echo "Checking for CHANGELOG modifications..."
41+ if git diff --name-only FETCH_HEAD | grep -q 'CHANGELOG'; then
42+ echo "CHANGELOG updated — OK"
3443 else
35- echo "skip=false" >> $GITHUB_OUTPUT
36- fi
37-
38- - name : Skip changelog check
39- if : steps.skip.outputs.skip == 'true'
40- run : echo "Skip Changelog or dependencies label detected — skipping check."
41-
42- - name : Enforce CHANGELOG.md update
43- if : steps.skip.outputs.skip == 'false'
44- run : |
45- changed_files="${{ steps.diff.outputs.changed_files }}"
46-
47- echo "Changed files:"
48- echo "$changed_files"
49-
50- # If other files changed but CHANGELOG.md did NOT change → FAIL
51- if ! echo "$changed_files" | grep -q '^CHANGELOG\.md'; then
52- echo "::error::This PR changes repository files but does NOT update CHANGELOG.md."
53- echo "Please update CHANGELOG.md or add the 'Skip Changelog' label for valid exceptions."
44+ echo "::error::No CHANGELOG file was updated in this PR."
45+ echo "Please update CHANGELOG or use the 'Skip Changelog' label if appropriate."
5446 exit 1
55- fi
56-
57- echo "CHANGELOG updated — OK"
47+ fi
0 commit comments