Skip to content

Commit 10bcac4

Browse files
Pigbibicodex
andcommitted
fix preserve Dependabot reviewer intent
Co-Authored-By: Codex <noreply@openai.com>
1 parent 9a5a5a7 commit 10bcac4

1 file changed

Lines changed: 57 additions & 22 deletions

File tree

.github/workflows/dependabot_review_request_cleanup.yml

Lines changed: 57 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,44 +30,79 @@ jobs:
3030
REVIEWER: Pigbibi
3131
run: |
3232
set -euo pipefail
33-
latest_review_request_actor() {
33+
review_events() {
3434
gh api --paginate \
3535
"repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/timeline?per_page=100" |
36-
jq -sr --arg reviewer "${REVIEWER}" \
37-
'[.[][] | select(.event == "review_requested" and .requested_reviewer.login == $reviewer)][-1].actor.login // ""'
36+
jq -sc --arg reviewer "${REVIEWER}" '
37+
[.[][] | select(
38+
(.event == "review_requested" or .event == "review_request_removed") and
39+
.requested_reviewer.login == $reviewer
40+
)]
41+
'
3842
}
3943
40-
review_requests="$(gh pr view "${PR_NUMBER}" \
41-
--repo "${GITHUB_REPOSITORY}" \
42-
--json reviewRequests \
43-
--jq '.reviewRequests[].login')"
44+
current_review_requests() {
45+
gh pr view "${PR_NUMBER}" \
46+
--repo "${GITHUB_REPOSITORY}" \
47+
--json reviewRequests \
48+
--jq '.reviewRequests[].login'
49+
}
50+
51+
review_requests="$(current_review_requests)"
4452
if ! grep -Fqx "${REVIEWER}" <<<"${review_requests}"; then
4553
echo "No review request for ${REVIEWER}; nothing to dismiss." >> "${GITHUB_STEP_SUMMARY}"
4654
exit 0
4755
fi
4856
49-
latest_request_actor="$(latest_review_request_actor)"
50-
case "${latest_request_actor}" in
51-
'dependabot[bot]'|'app/dependabot') ;;
57+
events_before="$(review_events)"
58+
latest_event="$(jq -r '.[-1].event // ""' <<<"${events_before}")"
59+
latest_actor="$(jq -r '.[-1].actor.login // ""' <<<"${events_before}")"
60+
case "${latest_event}:${latest_actor}" in
61+
'review_requested:dependabot[bot]'|'review_requested:app/dependabot') ;;
5262
*)
53-
echo "Latest review request was made by ${latest_request_actor:-<unknown>}; preserving it." >> "${GITHUB_STEP_SUMMARY}"
63+
echo "Latest review event was ${latest_event:-<unknown>} by ${latest_actor:-<unknown>}; preserving the request." >> "${GITHUB_STEP_SUMMARY}"
5464
exit 0
5565
;;
5666
esac
67+
baseline_count="$(jq 'length' <<<"${events_before}")"
5768
58-
gh api --method DELETE \
69+
review_requests="$(current_review_requests)"
70+
if ! grep -Fqx "${REVIEWER}" <<<"${review_requests}"; then
71+
echo "Review request was removed during cleanup; nothing to dismiss." >> "${GITHUB_STEP_SUMMARY}"
72+
exit 0
73+
fi
74+
75+
if ! gh api --method DELETE \
5976
"repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/requested_reviewers" \
60-
-f "reviewers[]=${REVIEWER}"
77+
-f "reviewers[]=${REVIEWER}"; then
78+
review_requests="$(current_review_requests)"
79+
if ! grep -Fqx "${REVIEWER}" <<<"${review_requests}"; then
80+
echo "Review request was removed concurrently; nothing to dismiss." >> "${GITHUB_STEP_SUMMARY}"
81+
exit 0
82+
fi
83+
exit 1
84+
fi
6185
62-
latest_request_actor="$(latest_review_request_actor)"
63-
case "${latest_request_actor}" in
64-
'dependabot[bot]'|'app/dependabot')
65-
echo "Dismissed Dependabot review request for ${REVIEWER}." >> "${GITHUB_STEP_SUMMARY}"
66-
;;
67-
*)
86+
events_after="$(review_events)"
87+
human_intent="$(jq -r --argjson baseline "${baseline_count}" '
88+
[.[$baseline:][] | select(
89+
.actor.login != "dependabot[bot]" and
90+
.actor.login != "app/dependabot" and
91+
.actor.login != "github-actions[bot]" and
92+
.actor.login != "github-actions"
93+
)][-1].event // ""
94+
' <<<"${events_after}")"
95+
96+
if [ "${human_intent}" = 'review_requested' ]; then
97+
review_requests="$(current_review_requests)"
98+
if ! grep -Fqx "${REVIEWER}" <<<"${review_requests}"; then
6899
gh api --method POST \
69100
"repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/requested_reviewers" \
70101
-f "reviewers[]=${REVIEWER}"
71-
echo "Restored review request made by ${latest_request_actor:-<unknown>}." >> "${GITHUB_STEP_SUMMARY}"
72-
;;
73-
esac
102+
fi
103+
echo "Preserved a concurrent human review request." >> "${GITHUB_STEP_SUMMARY}"
104+
elif [ "${human_intent}" = 'review_request_removed' ]; then
105+
echo "Preserved a concurrent human review removal." >> "${GITHUB_STEP_SUMMARY}"
106+
else
107+
echo "Dismissed Dependabot review request for ${REVIEWER}." >> "${GITHUB_STEP_SUMMARY}"
108+
fi

0 commit comments

Comments
 (0)