You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions中编写for/foreach循环批量处理PR评审操作?

GitHub Actions批量驳回草稿PR评审的实现方案

工作流触发规则

首先配置工作流的触发条件,仅当PR从草稿转为可评审状态时触发:

name: 自动驳回草稿阶段评审
on:
  pull_request_target:
    types: [ready_for_review]
permissions:
  pull-requests: write

方案1:Shell脚本内循环实现(最简便,适合绝大多数场景)

直接在单一步骤内通过bash循环完成拉取评审、逐个驳回的全流程,不需要跨步骤传参:

jobs:
  dismiss-old-reviews:
    runs-on: ubuntu-latest
    steps:
      - name: 批量驳回草稿阶段所有评审
        env:
          PR_NUMBER: ${{ github.event.pull_request.number }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # 拉取该PR所有处于活跃状态的评审ID
          REVIEW_IDS=$(gh api repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER/reviews --jq '.[] | select(.state != "DISMISSED") | .id')
          
          # 循环逐个驳回评审
          for REVIEW_ID in $REVIEW_IDS; do
            gh api \
              --method POST \
              repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER/reviews/$REVIEW_ID/dismissals \
              -f message="PR已从草稿转为正式评审,自动驳回草稿阶段的历史评审"
          done

方案2:Actions Matrix矩阵循环实现(原生语法,适合需要并行处理的场景)

如果需要对每个评审的驳回操作做独立的日志、错误处理,可以用矩阵策略拆分任务:

jobs:
  get-review-ids:
    runs-on: ubuntu-latest
    outputs:
      review-ids: ${{ steps.get-ids.outputs.review-ids }}
    steps:
      - id: get-ids
        env:
          PR_NUMBER: ${{ github.event.pull_request.number }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          REVIEW_IDS=$(gh api repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER/reviews --jq '[.[] | select(.state != "DISMISSED") | .id]')
          echo "review-ids=$REVIEW_IDS" >> $GITHUB_OUTPUT

  dismiss-reviews:
    needs: get-review-ids
    runs-on: ubuntu-latest
    strategy:
      matrix:
        review-id: ${{ fromJson(needs.get-review-ids.outputs.review-ids) }}
    steps:
      - name: 驳回评审 ${{ matrix.review-id }}
        env:
          PR_NUMBER: ${{ github.event.pull_request.number }}
          REVIEW_ID: ${{ matrix.review-id }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh api \
            --method POST \
            repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER/reviews/$REVIEW_ID/dismissals \
            -f message="PR已从草稿转为正式评审,自动驳回草稿阶段的历史评审"

注意事项

  • 两种方案都依赖GitHub官方的gh命令行工具,Ubuntu默认的Actions运行环境已经预装,不需要额外安装
  • 可根据需求调整评审过滤逻辑,比如只驳回特定用户的评审、只驳回要求变更的评审等,只需修改jq过滤条件即可
  • 如需保留评审内容,可调整驳回信息的文案,不会删除原评审的评论内容

内容的提问来源于stack exchange,提问作者Tom Hivert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:27:03