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

如何在GitHub Actions的pull_request事件中检查PR审批状态

解决方法

在pull_request事件的上下文里,你可以通过github.event.pull_request.review_decision字段判断PR的整体评审状态,这个字段不需要依赖pull_request_review事件即可生效。

直接使用内置字段判断

review_decision的核心取值包括:

  • approved:PR已满足分支保护的审批要求
  • changes_requested:有评审者提出修改要求
  • required:尚未完成必要的评审

你可以直接修改Workflow的if条件,用这个字段控制任务执行:

on:
  pull_request:
    branches:
      - Release
      - Production
      - Development
    types:
      - opened
      - reopened
      - synchronize

jobs:
  runTests:
    runs-on: [self-hosted]
    # 仅当PR未被审批时运行测试
    if: github.event.pull_request.review_decision != 'approved'
    steps:
      - name: Run Unit Tests
        run: |
          # 替换为你的实际测试命令
          echo "Running unit tests..."

  requestReReview:
    runs-on: [self-hosted]
    # 当PR已被审批时触发重新评审请求
    if: github.event.pull_request.review_decision == 'approved'
    steps:
      - name: Request Re-Review
        run: |
          # 替换为你的目标评审者/团队
          gh pr review ${{ github.event.pull_request.number }} --request-reviewer "reviewer1,team-name"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

更精细的评审状态检查(可选)

如果需要检查是否有特定评审者的审批记录,而非依赖分支保护的整体决策,可以用GitHub CLI调用API获取PR的所有评审记录,再做判断:

on:
  pull_request:
    branches:
      - Release
      - Production
      - Development
    types:
      - opened
      - reopened
      - synchronize

jobs:
  checkReviewStatus:
    runs-on: [self-hosted]
    outputs:
      has_approved_review: ${{ steps.check_review.outputs.has_approved }}
    steps:
      - name: Check PR Review Status
        id: check_review
        run: |
          # 筛选出状态为APPROVED的评审记录
          APPROVED_REVIEWS=$(gh pr reviews ${{ github.event.pull_request.number }} --state APPROVED --json state | jq 'length > 0')
          echo "has_approved=$APPROVED_REVIEWS" >> $GITHUB_OUTPUT
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  runTests:
    runs-on: [self-hosted]
    needs: checkReviewStatus
    if: needs.checkReviewStatus.outputs.has_approved == 'false'
    steps:
      - name: Run Unit Tests
        run: echo "Running unit tests..."

  requestReReview:
    runs-on: [self-hosted]
    needs: checkReviewStatus
    if: needs.checkReviewStatus.outputs.has_approved == 'true'
    steps:
      - name: Request Re-Review
        run: gh pr review ${{ github.event.pull_request.number }} --request-reviewer "your-target-reviewers"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

注意:使用GitHub CLI需要确保自托管运行器已安装gh工具,若未安装可在步骤中添加安装逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:18:33