logo
0
0
WeChat Login
feat: 支持基于当前分支创建 tag,并新增分支参数配置

CNB Auto Release Plugin

CNB 自动发布插件,自动管理仓库的 tag 和 release 版本号。

功能特性

  • 自动获取仓库所有 tags,按语义化版本排序
  • 智能版本号递增(支持自定义规则)
  • 基于当前分支创建 tag,而非默认分支
  • 支持自定义 tag 格式模板
  • 支持 dry-run 模式(仅计算版本号,不实际创建)
  • 自动创建 tag 和 release
  • 输出流水线变量供后续步骤使用

版本递增规则

  • 若仓库无 tag,则生成初始版本 v1.0.1
  • 否则,取最新 tag(按语义化版本排序),递增规则:
    • 补丁号(patch)增加 1
    • 若 patch 达到 100,则进位到次版本号(minor)并重置 patch 为 0
    • 若 minor 达到 100,则进位到主版本号(major)并重置 minor、patch 为 0

示例:

  • v1.0.1v1.0.2
  • v1.0.99v1.1.0
  • v1.99.99v2.0.0

Docker 直接调用

除在流水线中使用外,也可以通过 docker run 直接调用本插件:

docker run --rm \
  -e TZ=Asia/Shanghai \
  -e CNB_TOKEN='TOKEN' \
  -e CNB_API_ENDPOINT='https://api.cnb.cool' \
  -e CNB_REPO_SLUG='r_r/auto-release' \
  -e CNB_BRANCH='main' \
  -e PLUGIN_TAGFORMAT='v@{version}' \
  -v $(pwd):$(pwd) \
  -w $(pwd) \
  docker.cnb.cool/r_r/auto-release:latest

注意: 请将 CNB_TOKEN 替换为你自己的有效 Token,需包含 repo-contents:rrepo-code:rw 权限。

使用方法

.cnb.yml 流水线配置中使用:

stages:
  - name: auto-release
    image: docker.cnb.cool/r_r/auto-release:latest
    settings:
      tagFormat: "v@{version}"
      dryRun: false

参数配置

tagFormat

  • 类型: string
  • 默认值: v@{version}
  • 必填: 否
  • 说明: 指定 tag 格式,其中 @{version} 会由生成的版本号替换。如版本号为 1.2.3,则 v@{version} 生成 v1.2.3

示例:

stages:
  - name: auto-release
    image: docker.cnb.cool/r_r/auto-release:latest
    settings:
      tagFormat: "v-@{version}"

dryRun

  • 类型: boolean
  • 默认值: false
  • 必填: 否
  • 说明: 是否只计算下一个版本号,而不实际创建 tag 和 release。

示例:

stages:
  - name: auto-release
    image: docker.cnb.cool/r_r/auto-release:latest
    settings:
      dryRun: true

slug

  • 类型: string
  • 默认值: 当前仓库路径
  • 必填: 否
  • 说明: 仓库路径。非跨仓无需传入,如需跨仓库操作可使用此参数指定。

branch

  • 类型: string
  • 默认值: 当前流水线分支(CNB_BRANCH 环境变量)
  • 必填: 否
  • 说明: 创建 tag 的目标分支。默认使用当前流水线运行的分支,若未获取到则回退到仓库默认分支。

endpoint

  • 类型: string
  • 默认值: 当前平台的 OPENAPI 地址
  • 必填: 否
  • 说明: 平台 API 地址。非跨平台无需传入,如需跨平台操作可使用此参数指定,如 https://api.cnb.cool

token

  • 类型: string
  • 默认值: 当前用户的临时票据
  • 必填: 否
  • 说明: 平台 token。如需跨平台创建,可传入该参数。需包含以下权限:repo-contents:r,repo-code:rw

输出变量

无论是否 dry-run,均会输出以下流水线变量:

##[set-output auto-tag=v1.0.1]
##[set-output auto-release=v1.0.1]

可在后续步骤中通过 @{auto-tag}@{auto-release} 引用。

完整示例

main:
  push:
    - stages:
        - name: auto-release
          image: docker.cnb.cool/r_r/auto-release:latest
          settings:
            tagFormat: "v@{version}"
            dryRun: false
          exports:
            auto-tag: AUTO_TAG
            auto-release: AUTO_RELEASE
        - name: echo env
          script:
            - echo "AUTO_TAG $AUTO_TAG"
            - echo "AUTO_RELEASE $AUTO_RELEASE"

跨仓库示例

main:
  push:
    - stages:
        - name: auto-release-other-repo
          image: docker.cnb.cool/r_r/auto-release:latest
          settings:
            slug: "other-owner/other-repo"
            endpoint: "https://api.cnb.cool"
            token: "${OTHER_REPO_TOKEN}"

错误处理

遇到 API 错误或参数缺失时,插件会退出并返回非零状态码,导致流水线失败。

许可证

MIT License