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}"
0 commit comments