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

如何通过GitHub Actions实现分支命名规范校验与PR合并分支限制

如何通过GitHub Actions实现分支命名规范校验与PR合并分支限制

我之前也碰到过类似的分支管理需求,现有的通用分支命名Action确实没法区分不同基准分支的规则,不过咱们可以通过自定义GitHub Actions工作流,结合简单的脚本逻辑就能把三个规则都实现了。下面我给你拆解具体的实现步骤:

核心思路

我们需要在PR创建或更新时,获取两个关键信息:当前PR的源分支名和目标基准分支名,然后通过脚本判断这两个信息是否符合咱们的规则:

  1. 若基准分支是dev,源分支必须匹配^(bug|feature|code-cleanup)\/JIRA-\d+-.+$
  2. 若基准分支是qa,源分支必须匹配^kickback\/JIRA-\d+-.+$
  3. 若源分支以kickback/开头,基准分支只能是qa

完整的工作流实现

在你的仓库里新建.github/workflows/branch-validation.yml文件,内容如下:

name: 分支与PR规则校验
on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  validate-branch-rules:
    runs-on: ubuntu-latest
    steps:
      - name: 获取PR分支信息
        id: pr-info
        run: |
          echo "BASE_BRANCH=${{ github.event.pull_request.base.ref }}" >> $GITHUB_OUTPUT
          echo "HEAD_BRANCH=${{ github.event.pull_request.head.ref }}" >> $GITHUB_OUTPUT

      - name: 执行规则校验
        run: |
          BASE_BRANCH="${{ steps.pr-info.outputs.BASE_BRANCH }}"
          HEAD_BRANCH="${{ steps.pr-info.outputs.HEAD_BRANCH }}"

          # 定义正则规则
          DEV_BRANCH_REGEX="^(bug|feature|code-cleanup)\/JIRA-\d+-.+$"
          QA_BRANCH_REGEX="^kickback\/JIRA-\d+-.+$"

          # 规则1和规则2:分支命名与基准分支匹配校验
          if [ "$BASE_BRANCH" = "dev" ]; then
            if ! [[ "$HEAD_BRANCH" =~ $DEV_BRANCH_REGEX ]]; then
              echo "❌ 错误:基于dev分支的分支必须匹配格式:bug/JIRA-XXX-xxx 或 feature/JIRA-XXX-xxx 或 code-cleanup/JIRA-XXX-xxx"
              exit 1
            fi
          elif [ "$BASE_BRANCH" = "qa" ]; then
            if ! [[ "$HEAD_BRANCH" =~ $QA_BRANCH_REGEX ]]; then
              echo "❌ 错误:基于qa分支的分支必须匹配格式:kickback/JIRA-XXX-xxx"
              exit 1
            fi
          fi

          # 规则3:kickback分支只能PR到qa
          if [[ "$HEAD_BRANCH" =~ ^kickback\/ ]]; then
            if [ "$BASE_BRANCH" != "qa" ]; then
              echo "❌ 错误:kickback/开头的分支只能合并到qa分支"
              exit 1
            fi
          fi

          echo "✅ 所有分支与PR规则校验通过!"

工作流说明

  1. 触发时机:当PR被创建、同步(更新)或重新打开时,自动触发校验,确保每次PR变更都符合规则
  2. 信息获取:通过GitHub上下文github.event.pull_request拿到基准分支和源分支的名称,存入输出变量方便后续步骤使用
  3. 规则校验:
    • 先根据基准分支判断对应的命名规则,不匹配则直接报错终止工作流
    • 额外检查kickback/开头的分支,确保它们只能PR到qa分支
  4. 结果反馈:校验不通过时会输出清晰的错误提示,通过则显示成功信息

使用注意事项

  • 确保仓库的GitHub Actions权限开启(在仓库Settings -> Actions -> General里设置)
  • 可以根据自己的需求调整正则规则或分支名称,比如如果你的JIRA前缀不是JIRA-,直接修改正则里的部分即可
  • 如果需要支持更多基准分支的规则,只需要在脚本里添加对应的elif分支即可

这样设置后,不符合规则的PR会被工作流拦截,必须修正分支名或调整PR目标分支才能合并,完美满足你的三个需求!

备注:内容来源于stack exchange,提问作者Chris Barr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:13:12