如何在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
相关产品推荐
相关产品推荐

