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

如何在GitHub Actions中将草稿PR转为待审PR时移除旧工作流运行?

解决草稿PR转待审时旧工作流运行未自动取消的问题

GitHub 默认不会在 PR 状态变更时自动取消旧的工作流运行,你可以通过以下两种方式处理:

1. 手动取消旧运行

直接进入 PR 的「Actions」标签页,找到所有处于「in progress」或「queued」状态的旧运行,点击右上角的「Cancel workflow」按钮即可终止这些运行。这种方式适合偶尔处理少量PR的场景。

2. 自动化取消旧运行

通过 GitHub Actions 配合 API 实现自动取消当前PR的旧运行,推荐使用现成的社区 Action 简化操作:

在你的工作流配置中添加专门的 job,当 PR 转为 ready_for_review 状态时触发,自动取消该PR下的其他未完成运行:

jobs:
  # 保留你原有的构建/测试 job
  build-test:
    runs-on: ubuntu-latest
    # ... 你的原有配置

  # 添加取消旧运行的 job
  cancel-previous-runs:
    runs-on: ubuntu-latest
    # 仅在PR转为待审状态时触发
    if: github.event_name == 'pull_request' && github.event.action == 'ready_for_review'
    steps:
      - name: Cancel incomplete workflow runs
        uses: styfle/cancel-workflow-action@0.11.0
        with:
          access_token: ${{ github.token }}
          # 可选:指定要取消的工作流名称,不指定则取消当前PR下所有同工作流的旧运行
          workflow_id: ${{ github.workflow }}

如果你不想使用第三方 Action,也可以自行编写脚本调用 GitHub API 实现:

jobs:
  cancel-previous-runs:
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request' && github.event.action == 'ready_for_review'
    steps:
      - name: Cancel old runs via GitHub API
        env:
          PR_NUMBER: ${{ github.event.pull_request.number }}
          OWNER: ${{ github.repository_owner }}
          REPO: ${{ github.event.repository.name }}
          CURRENT_RUN_ID: ${{ github.run_id }}
          GITHUB_TOKEN: ${{ github.token }}
        run: |
          # 获取当前PR下所有未完成的运行
          RUNS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
            "https://api.github.com/repos/$OWNER/$REPO/actions/runs?pull_requests=$PR_NUMBER&status=in_progress")
          
          # 过滤出除当前运行外的所有运行ID
          RUN_IDS=$(echo "$RUNS" | jq -r '.workflow_runs[] | select(.id != $CURRENT_RUN_ID) | .id')
          
          # 逐个取消运行
          for ID in $RUN_IDS; do
            echo "Canceling run $ID..."
            curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
              "https://api.github.com/repos/$OWNER/$REPO/actions/runs/$ID/cancel"
          done

注意事项

  • 默认的 ${{ github.token }} 已拥有足够权限取消工作流运行,无需额外配置个人访问令牌。
  • 若仓库为私有仓库,确保工作流权限设置中开启了「Actions: Write」权限(默认已开启)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:15:14