@@ -153,6 +153,30 @@ main() {
153
153
# Resolve the PR author's name and email using .mailmap:
154
154
pr_author_resolved=$( resolve_user " $pr_author_login " )
155
155
156
+ pr_author_id=$( echo " $pr_details " | jq -r ' .user.id' )
157
+ pr_author_emails=$(
158
+ {
159
+ # 1) the address obtained via .mailmap
160
+ echo " $pr_author_resolved "
161
+
162
+ # 2) the default GitHub‑generated noreply address
163
+ echo " $pr_author_login @users.noreply.github.com"
164
+
165
+ # 3) ID+login GitHub noreply address (needed for bots & private e‑mails)
166
+ echo " ${pr_author_id} +${pr_author_login} @users.noreply.github.com"
167
+
168
+ # 4) any address that appears in commits whose author *login* matches
169
+ echo " $pr_commits " | jq -r --arg login " $pr_author_login " '
170
+ .[]
171
+ | select(.author.login==$login or .committer.login==$login)
172
+ | .commit.author.email
173
+ '
174
+ } |
175
+ sed -E ' s/^.*<([^>]+)>.*/\1/' | # Keep only the e‑mail part
176
+ tr " [:upper:]" " [:lower:]" |
177
+ sort -u
178
+ )
179
+
156
180
# Extract reviewers:
157
181
pr_reviews=$( github_api " GET" " /repos/$REPO_OWNER /$REPO_NAME /pulls/$pr_number /reviews" )
158
182
reviewers=$( echo " $pr_reviews " | jq -r ' .[] | select(.state == "APPROVED" ) | .user.login' | sort -u)
@@ -173,8 +197,12 @@ main() {
173
197
email=$( echo " $name_email " | sed -E ' s/^.*<(.*)>$/\1/' | xargs)
174
198
resolved_author=$( resolve_name_email " $name " " $email " )
175
199
176
- # Skip if the resolved author matches the resolved PR author:
177
- if [ " $resolved_author " == " $pr_author_resolved " ]; then
200
+ # Skip if the resolved author's email matches any of the resolved PR author's emails:
201
+ resolved_email=$( echo " $resolved_author " |
202
+ sed -E ' s/^.*<([^>]+)>.*/\1/' |
203
+ tr ' [:upper:]' ' [:lower:]' )
204
+
205
+ if echo " $pr_author_emails " | grep -Fxq " $resolved_email " ; then
178
206
continue
179
207
fi
180
208
processed_co_authors+=" Co-authored-by: $resolved_author " $' \n '
@@ -198,8 +226,16 @@ main() {
198
226
# Resolve name and email using .mailmap:
199
227
resolved_author=$( resolve_name_email " $name " " $email " )
200
228
201
- # Skip if the resolved author matches the resolved PR author:
202
- if [ " $resolved_author " == " $pr_author_resolved " ]; then
229
+
230
+ echo $resolved_email
231
+ echo $pr_author_emails
232
+
233
+ # Skip if the resolved commit author's email matches any of the resolved PR author's emails:
234
+ resolved_email=$( echo " $resolved_author " |
235
+ sed -E ' s/^.*<([^>]+)>.*/\1/' |
236
+ tr ' [:upper:]' ' [:lower:]' )
237
+
238
+ if echo " $pr_author_emails " | grep -Fxq " $resolved_email " ; then
203
239
continue
204
240
fi
205
241
0 commit comments