如何实现GitHub Action中任一Job失败时自动关闭Pull Request?
在GitHub Action中实现PR自动代码检查并在Job失败时关闭PR
要实现你的需求,只需在现有工作流基础上添加权限配置和失败时关闭PR的步骤,具体修改如下:
完整修改后的工作流代码
name: Lint and Test # 配置工作流权限,需要pull-requests的写入权限来关闭PR permissions: pull-requests: write contents: read on: push: branches: ["main"] pull_request: branches: ["main"] # 明确触发PR的事件类型:创建、同步代码时触发 types: [opened, synchronize] jobs: lint: runs-on: ubuntu-latest strategy: matrix: node-version: [20.x] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - run: npm install - run: npm run lint # 当lint步骤失败时,自动关闭当前PR - name: Close PR if lint fails if: failure() run: | gh pr close ${{ github.event.number }} --comment "代码检查(Lint)未通过,已自动关闭PR。请修复代码后重新提交。" env: # 使用GitHub提供的令牌进行认证 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
关键修改说明
- 权限配置:添加
permissions字段,授予pull-requests: write权限,确保工作流有操作PR的权限(默认令牌权限有限)。 - 触发事件优化:给
pull_request添加types,明确在PR创建(opened)和代码同步(synchronize)时触发检查,覆盖常见的PR更新场景。 - 失败关闭PR步骤:
- 使用
if: failure()确保只有当之前的步骤(lint)失败时才执行该步骤。 - 利用GitHub CLI(
gh)的pr close命令关闭PR,通过github.event.number获取当前PR的编号。 - 添加关闭时的评论,告知用户关闭原因,提升体验。
- 使用
注意:ubuntu-latest环境默认已预装GitHub CLI,无需额外安装。如果使用其他环境,可能需要先安装gh工具。
内容的提问来源于stack exchange,提问作者KAVYA P
相关产品推荐
相关产品推荐

