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

如何限制GitHub仓库标签格式,使其遵循Semantic Versioning规范?

确保GitHub仓库标签符合语义化版本(SemVer)格式的实现方法

GitHub的受保护分支规则仅支持简单的通配符匹配,无法实现SemVer格式的复杂校验,你可以通过GitHub Actions来实现标签的自动校验,具体步骤如下:

方法一:使用Shell正则表达式校验

  1. 在仓库的.github/workflows目录下创建一个新的工作流文件,比如validate-semver-tag.yml
  2. 将以下内容写入文件:
name: 校验SemVer标签格式
on:
  push:
    tags:
      - '*'

jobs:
  validate-tag:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 校验标签是否符合SemVer格式
        run: |
          # 提取推送的标签名称
          TAG_NAME="${GITHUB_REF#refs/tags/}"
          # SemVer 2.0 标准正则,支持带v前缀或不带的情况
          SEMVER_REGEX="^v?\d+\.\d+\.\d+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$"
          
          if [[ ! "$TAG_NAME" =~ $SEMVER_REGEX ]]; then
            echo "❌ 标签 '$TAG_NAME' 不符合Semantic Versioning 2.0格式"
            echo "✅ 有效示例:v1.0.0, 2.1.3-beta, 3.0.0+build123"
            exit 1
          fi
          echo "✅ 标签 '$TAG_NAME' 符合SemVer格式"

方法二:使用官方semver包校验(更可靠)

如果担心正则表达式的疏漏,可以使用Node.js的semver官方包来校验:

name: 校验SemVer标签格式
on:
  push:
    tags:
      - '*'

jobs:
  validate-tag:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 设置Node环境
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: 安装semver包
        run: npm install -g semver

      - name: 校验标签格式
        run: |
          TAG_NAME="${GITHUB_REF#refs/tags/}"
          # 移除标签的v前缀(若存在),semver包默认不识别带v的标签
          TAG_WITHOUT_V="${TAG_NAME#v}"
          
          if ! semver "$TAG_WITHOUT_V"; then
            echo "❌ 标签 '$TAG_NAME' 不符合SemVer格式"
            exit 1
          fi
          echo "✅ 标签 '$TAG_NAME' 符合SemVer格式"

生效说明

将上述工作流文件提交到仓库后,任何用户尝试推送不符合SemVer格式的标签时,GitHub Actions会自动触发校验并返回失败,该标签将无法推送到仓库。

内容的提问来源于stack exchange,提问作者Paul D Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:03:30