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

如何仅允许通过GitHub Release创建仓库标签?

确保仅GitHub Release可创建仓库标签的方案

方案一:通过GitHub Actions拦截非Release创建的标签

如果Ruleset找不到合适的绕过选项,用Action兜底是可行思路。核心逻辑是:标签创建时自动校验是否关联Release,无关联则直接删除标签。

创建.github/workflows/protect-tags.yml文件,写入以下内容:

name: 拦截非Release创建的标签
on:
  create:
    tags:
      - '*'

jobs:
  校验标签来源:
    runs-on: ubuntu-latest
    steps:
      - name: 检查标签是否由Release创建
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAG_NAME: ${{ github.ref_name }}
        run: |
          # 调用GitHub API查询标签对应的Release信息
          RELEASE_DATA=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
            "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG_NAME")
          
          # 检查返回结果中是否存在Release的ID(存在则说明是Release创建的标签)
          if echo "$RELEASE_DATA" | jq -e '.id' > /dev/null; then
            echo "标签 $TAG_NAME 由合法Release创建,放行。"
          else
            echo "标签 $TAG_NAME 不是由Release创建,删除中..."
            # 删除违规标签
            git push origin :refs/tags/$TAG_NAME
            # 抛出错误终止流程
            exit 1
          fi
  • 注意:GITHUB_TOKEN是GitHub自动提供的Secrets,无需手动配置,它拥有操作仓库标签的权限。

方案二:优化Ruleset配置放行GitHub官方操作

如果希望用Ruleset原生能力解决,可通过“允许GitHub官方操作绕过限制”实现:

  1. 创建第一个规则集,负责保护标签的修改/删除:
    • 目标选择「标签」,设置匹配模式(比如*覆盖所有标签)。
    • 勾选「阻止删除标签」和「阻止更新标签」,无需勾选「阻止创建标签」。
  2. 创建第二个规则集,专门限制标签创建:
    • 目标同样选择「标签」,匹配模式*。
    • 勾选「阻止创建标签」。
    • 在「绕过规则」区域,找到并勾选「GitHub」选项(该选项代表GitHub官方系统操作,包括Release创建标签)。
    • 保存规则后,普通用户手动创建标签会被拦截,而Release创建标签的操作会自动绕过限制。

提示:如果找不到「GitHub」绕过选项,可以临时勾选仓库管理员,但这样管理员仍能手动创建标签,需根据团队权限需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:54:59