如何配置GitHub Action仅在pull request首次审批通过时触发
PR首次审批通过时触发GitHub Action的实现方案
现有配置仅判断了当前提交的审批为通过状态,没有统计该PR历史已通过的审批总数,所以每次有审批提交都会触发工作流。可以通过在工作流中增加审批数校验逻辑实现仅首次审批触发,不需要额外接入第三方服务,直接用GitHub自带的API和工作流内置权限即可完成。
修改后的完整工作流配置如下:
on: pull_request_review: types: [submitted] jobs: approved: if: github.event.review.state == 'approved' runs-on: ubuntu-latest steps: - name: 校验是否为首次有效审批 id: check_approval env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUM: ${{ github.event.pull_request.number }} REPO: ${{ github.repository }} API_ROOT: ${{ github.api_url }} run: | # 拉取PR所有审批记录,按用户去重统计有效通过数 APPROVAL_COUNT=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ "$API_ROOT/repos/$REPO/pulls/$PR_NUM/reviews" \ | jq '[.[] | select(.state == "APPROVED") | .user.login] | unique | length') # 仅当有效通过数为1(即当前提交的是首次审批)时,标记允许运行后续步骤 if [ "$APPROVAL_COUNT" -eq 1 ]; then echo "is_first=yes" >> $GITHUB_OUTPUT else echo "is_first=no" >> $GITHUB_OUTPUT fi - name: 原有业务逻辑 if: steps.check_approval.outputs.is_first == 'yes' run: echo "This PR was approved"
配置说明:
- 工作流使用自动生成的
GITHUB_TOKEN调用接口,无需手动配置密钥,默认权限即可满足PR信息读取需求 - 审批统计逻辑做了用户维度去重,同一用户多次提交审批仅算一次有效通过,避免重复提交、撤销重提审批导致的误触发
- 接口地址通过
github.api_url自动适配,同时支持GitHub公有云、GitHub Enterprise Server各类部署环境 - 若需要排除特定账号(如PR作者、机器人账号)的审批,可在jq筛选规则中增加对应登录名的判断条件即可
- 后续如果调整PR合并要求的最少审批数,该配置无需修改,始终会在PR收到第一个有效审批时运行后续任务
内容的提问来源于stack exchange,提问作者Namalians
相关产品推荐
相关产品推荐

