From 6baebc819d39be077f1300d441b862a445ff9aec Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Mon, 20 Jul 2026 13:44:37 +0800 Subject: [PATCH] chore: dismiss Dependabot review requests Co-Authored-By: Codex --- .../dependabot_review_request_cleanup.yml | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .github/workflows/dependabot_review_request_cleanup.yml diff --git a/.github/workflows/dependabot_review_request_cleanup.yml b/.github/workflows/dependabot_review_request_cleanup.yml new file mode 100644 index 00000000..0d1914ba --- /dev/null +++ b/.github/workflows/dependabot_review_request_cleanup.yml @@ -0,0 +1,73 @@ +name: Dismiss Dependabot Review Request + +"on": + pull_request_target: + types: [review_requested] + +permissions: + contents: read + issues: read + pull-requests: write + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: false + +jobs: + dismiss-review-request: + if: >- + (github.event.pull_request.user.login == 'dependabot[bot]' || + github.event.pull_request.user.login == 'app/dependabot') && + github.event.requested_reviewer.login == 'Pigbibi' && + (github.actor == 'dependabot[bot]' || github.actor == 'app/dependabot') + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Dismiss Pigbibi review request + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + REVIEWER: Pigbibi + run: | + set -euo pipefail + latest_review_request_actor() { + gh api --paginate \ + "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/timeline?per_page=100" | + jq -sr --arg reviewer "${REVIEWER}" \ + '[.[][] | select(.event == "review_requested" and .requested_reviewer.login == $reviewer)][-1].actor.login // ""' + } + + review_requests="$(gh pr view "${PR_NUMBER}" \ + --repo "${GITHUB_REPOSITORY}" \ + --json reviewRequests \ + --jq '.reviewRequests[].login')" + if ! grep -Fqx "${REVIEWER}" <<<"${review_requests}"; then + echo "No review request for ${REVIEWER}; nothing to dismiss." >> "${GITHUB_STEP_SUMMARY}" + exit 0 + fi + + latest_request_actor="$(latest_review_request_actor)" + case "${latest_request_actor}" in + 'dependabot[bot]'|'app/dependabot') ;; + *) + echo "Latest review request was made by ${latest_request_actor:-}; preserving it." >> "${GITHUB_STEP_SUMMARY}" + exit 0 + ;; + esac + + gh api --method DELETE \ + "repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/requested_reviewers" \ + -f "reviewers[]=${REVIEWER}" + + latest_request_actor="$(latest_review_request_actor)" + case "${latest_request_actor}" in + 'dependabot[bot]'|'app/dependabot') + echo "Dismissed Dependabot review request for ${REVIEWER}." >> "${GITHUB_STEP_SUMMARY}" + ;; + *) + gh api --method POST \ + "repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/requested_reviewers" \ + -f "reviewers[]=${REVIEWER}" + echo "Restored review request made by ${latest_request_actor:-}." >> "${GITHUB_STEP_SUMMARY}" + ;; + esac