Skip to content

Commit e50fb7f

Browse files
Adds github action to verify changelog entry and set milestone to PRs (#14279)
1 parent 1130a29 commit e50fb7f

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
name: "Change Log Entry Verifier and Milestone Setter"
2+
run-name: Change log entry verifier and milestone setter
3+
on:
4+
- pull_request_target
5+
6+
env:
7+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
8+
ISSUE: ${{ github.event.issue.html_url }}
9+
SKIP_CHANGELOG_CHECK_LABEL: ${{ '"skip-changelog-check"' }}
10+
CHANGE_LOG_FILE: ${{ 'lucene/CHANGES.txt' }}
11+
12+
jobs:
13+
changelog-verifier-and-milestone-setter:
14+
name: Verify Change Log Entry and Set Milestone
15+
runs-on: ubuntu-latest
16+
17+
steps:
18+
- name: Checkout repository
19+
uses: actions/checkout@v4
20+
with:
21+
fetch-depth: 2
22+
23+
- name: ChangeLog Entry Verifier and Milestone Setter
24+
run: |
25+
echo "################## STEP 1 ##################"
26+
echo "Get all labels from the PR"
27+
mapfile -t labels < <(gh pr view ${{ github.event.number }} --json labels -q '.labels[].name')
28+
IFS=','; echo "${labels[*]}"
29+
for label in "${labels[@]}"; do
30+
if [[ $label == ${{ env.SKIP_CHANGELOG_CHECK_LABEL }} ]]; then
31+
echo "Skipping github action workflow as label: ${SKIP_CHANGELOG_CHECK_LABEL} is found in the PR."
32+
exit 0
33+
fi
34+
done
35+
echo "${{ env.SKIP_CHANGELOG_CHECK_LABEL }} not found in the PR. Proceeding with next steps."
36+
37+
echo -e "\n"
38+
echo "################## STEP 2 ##################"
39+
echo "Checking for change log entry in ${{ env.CHANGE_LOG_FILE }}"
40+
git log --pretty=oneline | tail -n 2 | cat
41+
echo "merge base sha: ${{ github.event.pull_request.base.sha }}, merge head sha: ${{ github.event.pull_request.head.sha }}"
42+
if ! git diff ${{ github.event.pull_request.base.sha }} --name-only | grep -q "${{ env.CHANGE_LOG_FILE }}"; then
43+
echo "Change log file:${{ env.CHANGE_LOG_FILE }} does not contains an entry corresponding to changes introduced in PR. Please add a changelog entry."
44+
exit 0
45+
else
46+
echo "${{ env.CHANGE_LOG_FILE }} contains change log entry. Proceeding with next steps."
47+
fi
48+
49+
50+
echo -e "\n"
51+
echo "################## STEP 3 ##################"
52+
echo "Extracting Lucene version from change log entry"
53+
# git diff header pattern -> "@@ -15,0 +16,4 @@"
54+
# try to extract the line number at which new entry is added, here it's line number 16
55+
diff=$(git diff ${{ github.event.pull_request.base.sha }} --unified=0 -- ${{ env.CHANGE_LOG_FILE }})
56+
lucene_version=""
57+
diff_header_pattern="@@ -[0-9]+,?[0-9]* \+([0-9]*),?[0-9]* @@"
58+
if [[ $diff =~ $diff_header_pattern ]]; then
59+
echo "Match found: ${BASH_REMATCH[0]}"
60+
new_entry_line_number=$((BASH_REMATCH[1]))
61+
echo "Found introduced change log entry at line number:${new_entry_line_number}"
62+
lucene_version_regex="=+ ?Lucene ?([0-9.]*) ?=+"
63+
current_line_number=0
64+
while IFS="" read -r line; do
65+
current_line_number=$((current_line_number+1))
66+
if [[ $line =~ $lucene_version_regex ]]; then
67+
lucene_version="${BASH_REMATCH[1]}"
68+
fi
69+
if [[ $current_line_number -ge $new_entry_line_number ]]; then
70+
echo "Reached the line number at which new entry is added in ${{ env.CHANGE_LOG_FILE }}"
71+
break
72+
fi
73+
done < ${{ env.CHANGE_LOG_FILE }}
74+
if [[ -z $lucene_version ]]; then
75+
echo "Could not find Lucene version in the change log entry. Please add the Lucene version in the change log entry."
76+
exit 0
77+
fi
78+
echo "Found corresponding Lucene version: ${lucene_version} based on change log entry. Proceeding with next steps."
79+
else
80+
echo "Could not find the line number at which new entry is added in ${{ env.CHANGE_LOG_FILE }}"
81+
exit 0
82+
fi
83+
84+
85+
echo -e "\n"
86+
echo "################## STEP 4 ##################"
87+
echo "Adding/Updating milestone for the PR"
88+
mapfile -t milestones < <(gh repo view --json milestones -q '.milestones[].title')
89+
IFS=','; echo "${milestones[*]}"
90+
milestone_exists=false
91+
for milestone in "${milestones[@]}"; do
92+
if [[ $milestone == "$lucene_version" ]]; then
93+
milestone_exists=true
94+
break
95+
fi
96+
done
97+
if [[ $milestone_exists == false ]]; then
98+
echo "Milestone:${lucene_version} does not exist. Please create the milestone and run the workflow again."
99+
exit 0
100+
fi
101+
# Will uncomment this line after we ensure it runs perfectly in production.
102+
# gh pr edit ${{ github.event.number }} --milestone "${lucene_version}"
103+
echo "Adding/Updating milestone for the PR to:${lucene_version}"

lucene/CHANGES.txt

+2
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ Other
197197

198198
* GITHUB#14223 : Fixed a flaky test TestKnnFloatVectorQuery.testFindFewer (Navneet Verma)
199199

200+
* GITHUB#14279 : Add github action to verify changelog entry and set milestone to PRs. (Amir Raza)
201+
200202
======================= Lucene 10.1.0 =======================
201203

202204
API Changes

0 commit comments

Comments
 (0)