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

如何用GitHub Actions自动关闭未关联Issue的PR?

用GitHub Actions管控PR关联Issue并清理无关联提交

一、阻止新的无关联PR提交

先通过工作流强制所有新PR必须关联Issue,从源头杜绝问题:

  1. 在仓库的.github/workflows目录下创建require-issue-link.yml文件,内容如下:
name: 强制关联Issue
on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  检查Issue关联:
    runs-on: ubuntu-latest
    steps:
      - name: 验证PR是否关联Issue
        env:
          PR内容: ${{ github.event.pull_request.body }}
          PR标题: ${{ github.event.pull_request.title }}
        run: |
          # 检查标题或描述里是否包含 #数字 格式的Issue编号
          if [[ ! "$PR标题" =~ #[0-9]+ && ! "$PR内容" =~ #[0-9]+ ]]; then
            echo "❌ 此PR未关联任何Issue,请在标题或描述中添加Issue编号(例如 #123)"
            exit 1
          fi
          # (可选)验证关联的Issue确实存在,需要开启Workflow读写权限
          # ISSUE编号=$(echo "$PR标题 $PR内容" | grep -o "#[0-9]\+" | head -n1 | tr -d '#')
          # curl -s -f "https://api.github.com/repos/${{ github.repository }}/issues/$ISSUE编号" || exit 1
  1. 配置工作流权限:
    进入仓库Settings > Actions > General,将Workflow permissions设为Read and write permissions,确保工作流能正常执行检查操作。

这样,所有新提交的PR如果没在标题或描述里写Issue编号,就会被标记为失败,无法合并。

二、批量清理已有的无关联PR

对于已存在的无关联PR,可以用手动触发的工作流批量处理:

  1. 创建.github/workflows/clean-unlinked-prs.yml文件:
name: 清理无关联PR
on:
  workflow_dispatch: # 手动触发,需要在Actions页面点击运行

jobs:
  批量处理PR:
    runs-on: ubuntu-latest
    steps:
      - name: 安装GitHub CLI
        run: sudo apt-get install -y gh

      - name: 验证身份
        run: echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token

      - name: 处理无关联PR
        run: |
          # 获取所有未关联Issue的开放PR编号
          PR列表=$(gh pr list --state open --search "no:issue" --json number --jq '.[].number')
          
          if [ -z "$PR列表" ]; then
            echo "✅ 没有未关联Issue的PR"
            exit 0
          fi
          
          echo "找到未关联Issue的PR:$PR列表"
          
          # 步骤1:先给PR加标签(建议先做这步,人工确认后再关闭)
          # for 编号 in $PR列表; do
          #   gh pr edit $编号 --add-label "未关联Issue"
          # done
          
          # 步骤2:确认后批量关闭PR并添加注释
          for 编号 in $PR列表; do
            gh pr close $编号 --comment "此PR未关联任何Issue,已自动关闭。请关联对应Issue后重新提交。"
          done
  1. 运行工作流:
    进入仓库的Actions页面,找到清理无关联PR工作流,点击Run workflow即可执行。建议先注释掉关闭PR的代码,只执行加标签的操作,人工确认这些PR确实是无效提交后,再取消注释执行关闭。

注意事项

  • 若需要更严格的检查(比如要求PR通过GitHub官方的「Fixes #123」这种关键词真正关联Issue,而不只是写编号),可以调用GitHub API的/repos/{owner}/{repo}/pulls/{number}/linked_issues端点,检查返回结果是否非空。
  • 批量操作前一定要人工核对,避免误关有效PR。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:25:32