Skip to content

版本标签管理工具

QXS-BNS 提供了强大的 Git Tag 管理工具,帮助开发者轻松管理项目版本标签和自动化发布流程。

🎯 工具概述

设计目标

  • 独立管理 - 从发布流程中独立出来,避免干扰
  • 自动化 - 与 GitHub Actions 无缝集成
  • 灵活性 - 支持多种标签类型和命名规范
  • 安全性 - 提供验证和确认机制

核心功能

  • 🏷️ 标签创建 - 支持多种标签类型
  • 📋 标签查看 - 列出所有现有标签
  • 标签删除 - 安全删除不需要的标签
  • 🔍 配置验证 - 验证 GitHub Actions 配置
  • 🚀 自动发布 - 触发自动化发布流程

🚀 快速开始

启动工具

bash
# 启动交互式标签管理工具
pnpm tag-manager

# 或使用简化命令
pnpm run tag-manager

交互式菜单

启动后会显示友好的交互式菜单:

🏷️  QXS-BNS 标签管理工具

请选择操作:
  📋 查看所有标签
  ➕ 创建新标签
  ❌ 删除标签
  🔍 验证 GitHub Actions 配置
  📚 查看帮助
  🚪 退出

请输入选项 (1-6):

命令行模式

bash
# 查看所有标签
pnpm tag-manager --list
pnpm tag-manager -l

# 创建新标签
pnpm tag-manager --create
pnpm tag-manager -c

# 删除标签
pnpm tag-manager --delete
pnpm tag-manager -d

# 验证配置
pnpm tag-manager --validate
pnpm tag-manager -v

# 查看帮助
pnpm tag-manager --help
pnpm tag-manager -h

🏷️ 标签类型详解

包版本标签

用于标记各个包的版本发布:

标签格式说明示例触发的 Actions
components@x.y.z组件库版本components@1.0.0组件库发布
utils@x.y.z工具库版本utils@1.0.0工具库发布
hooks@x.y.zHooks 版本hooks@1.0.0Hooks 发布
directives@x.y.z指令版本directives@1.0.0指令发布
icons@x.y.z图标库版本icons@1.0.0图标库发布

文档版本标签

用于标记文档更新:

标签格式说明示例触发的 Actions
docs@x.y.z文档版本docs@1.0.0文档部署

通用版本标签

用于标记整个项目的版本:

标签格式说明示例触发的 Actions
vx.y.z项目版本v1.0.0完整发布流程

📋 功能详解

查看标签

bash
# 查看所有标签
pnpm tag-manager --list

# 输出示例:
# 📋 现有标签列表 (按时间倒序)
#
# 🏷️  components@1.0.2    (2024-01-15 10:30:25)
#     提交: a1b2c3d - feat: 添加新组件
#
# 🏷️  docs@1.0.1         (2024-01-14 16:20:10)
#     提交: e4f5g6h - docs: 更新安装指南
#
# 🏷️  utils@1.0.1        (2024-01-13 14:15:30)
#     提交: i7j8k9l - fix: 修复工具函数bug

创建标签

bash
# 交互式创建
pnpm tag-manager --create

# 创建流程:
# 1. 选择标签类型
# 2. 输入版本号
# 3. 添加描述信息(可选)
# 4. 确认创建
# 5. 自动推送到远程

创建示例

🏷️  创建新标签

请选择标签类型:
  1. components@x.y.z  (组件库版本)
  2. utils@x.y.z       (工具库版本)
  3. hooks@x.y.z       (Hooks版本)
  4. directives@x.y.z  (指令版本)
  5. icons@x.y.z       (图标库版本)
  6. docs@x.y.z        (文档版本)
  7. vx.y.z            (项目版本)

请输入选项 (1-7): 1

请输入版本号 (如: 1.0.0): 1.0.3

请输入标签描述 (可选): 添加新的移动端组件

✅ 标签 components@1.0.3 创建成功!
🚀 已推送到远程仓库
🔄 GitHub Actions 将自动触发发布流程

删除标签

bash
# 交互式删除
pnpm tag-manager --delete

# 删除流程:
# 1. 显示所有现有标签
# 2. 选择要删除的标签
# 3. 二次确认
# 4. 删除本地和远程标签

删除示例

❌ 删除标签

现有标签:
  1. components@1.0.2
  2. docs@1.0.1
  3. utils@1.0.1
  4. v1.0.0

请选择要删除的标签 (输入序号,多个用逗号分隔): 2

⚠️  确认删除以下标签?
   - docs@1.0.1

这将同时删除本地和远程标签,此操作不可撤销!

确认删除? (y/N): y

✅ 标签 docs@1.0.1 删除成功!

📏 版本号规范

语义化版本

严格遵循 Semantic Versioning 规范:

主版本号.次版本号.修订号[-预发布标识]

例如:1.2.3-alpha.1

版本号含义

类型说明何时递增示例
主版本号不兼容的 API 修改破坏性变更1.0.02.0.0
次版本号向下兼容的功能新增新功能1.0.01.1.0
修订号向下兼容的问题修正Bug 修复1.0.01.0.1

预发布版本

bash
1.0.0-alpha.1    # Alpha 版本(内部测试)
1.0.0-beta.1     # Beta 版本(公开测试)
1.0.0-rc.1       # Release Candidate(发布候选)

版本号验证

工具会自动验证版本号格式:

bash
# ✅ 有效版本号
1.0.0
1.2.3
2.0.0-alpha.1
1.0.0-beta.2
1.0.0-rc.1

# ❌ 无效版本号
1.0          # 缺少修订号
v1.0.0       # 不应包含 v 前缀
1.0.0.1      # 过多的版本号段

🚀 GitHub Actions 集成

自动化发布流程

当推送标签到远程仓库时,GitHub Actions 会自动触发:

mermaid
graph LR
    A[推送标签] --> B[触发 GitHub Actions]
    B --> C[构建项目]
    C --> D[生成 Changelog]
    D --> E[创建 GitHub Release]
    E --> F[上传构建产物]

工作流配置

1. Release 工作流 (.github/workflows/release.yml)

yaml
name: Release
on:
  push:
    tags:
      - 'v*'           # 项目版本
      - 'components@*' # 组件库版本
      - 'utils@*'      # 工具库版本
      - 'docs@*'       # 文档版本

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Generate Changelog
        uses: changelogithub/action@v1
      - name: Create Release
        uses: actions/create-release@v1

2. 配置验证

工具会自动验证:

  • ✅ 检查工作流文件存在
  • ✅ 验证标签触发器配置
  • ✅ 确保权限设置正确
  • ✅ 测试工作流响应

标签信息策略

工具采用简化策略,让 GitHub Actions 处理详细内容:

bash
# 工具创建的标签信息
Release components@1.0.0

# GitHub Actions 自动生成详细信息:
# - 完整的 Changelog
# - 提交记录分析
# - 构建产物上传
# - Release Notes

💡 最佳实践

推荐的发布流程

1. 开发阶段

bash
# 开发新功能
git checkout -b feat/new-feature
# ... 开发代码 ...
git commit -m "feat: 添加新功能"
git push origin feat/new-feature

2. 发布阶段

bash
# 合并到主分支
git checkout main
git merge feat/new-feature

# 发布包
pnpm publish:components

# 创建版本标签
pnpm tag-manager --create

3. 自动化阶段

bash
# GitHub Actions 自动执行:
# - 构建项目
# - 生成 Changelog
# - 创建 GitHub Release
# - 部署文档

标签管理策略

标签命名规范

bash
# ✅ 推荐的标签命名
components@1.0.0     # 组件库版本
utils@1.2.3          # 工具库版本
docs@2.0.0           # 文档版本
v1.0.0               # 项目整体版本

# ❌ 避免的标签命名
component-1.0.0      # 使用连字符
Components@1.0.0     # 大小写不一致
v1.0                 # 版本号不完整

版本递增策略

变更类型版本递增示例
🐛 Bug 修复修订号 +11.0.01.0.1
✨ 新功能次版本号 +11.0.11.1.0
💥 破坏性变更主版本号 +11.1.02.0.0
📚 文档更新修订号 +11.0.01.0.1

标签描述规范

bash
# ✅ 好的标签描述
"添加移动端组件支持"
"修复文件上传组件bug"
"重构工具函数API"

# ❌ 避免的标签描述
"更新"                # 太简单
"修复了一些问题"      # 不具体
"Release v1.0.0"      # 重复信息

团队协作规范

权限管理

bash
# 只有维护者可以:
# - 创建 release 标签 (v*)
# - 删除已发布的标签
# - 修改 GitHub Actions 配置

# 开发者可以:
# - 创建功能分支标签
# - 查看所有标签
# - 提交标签创建请求

发布检查清单

  • [ ] 代码已合并到主分支
  • [ ] 所有测试通过
  • [ ] 文档已更新
  • [ ] 版本号符合语义化规范
  • [ ] 标签描述清晰明确
  • [ ] GitHub Actions 配置正确

自动化配置

配置 GitHub Actions

yaml
# .github/workflows/release.yml
name: Release

on:
  push:
    tags:
      - 'v*'
      - 'components@*'
      - 'utils@*'
      - 'hooks@*'
      - 'directives@*'
      - 'icons@*'
      - 'docs@*'

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Generate Changelog
        run: npx changelogithub
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

配置验证命令

bash
# 验证 GitHub Actions 配置
pnpm tag-manager --validate

# 输出示例:
# ✅ GitHub Actions 配置检查
# ✅ 工作流文件存在: .github/workflows/release.yml
# ✅ 标签触发器配置正确
# ✅ 权限设置正确
# ✅ changelogithub 配置正确

🔧 故障排除

常见问题及解决方案

1. 标签推送失败

问题现象

bash
 推送标签失败: Permission denied

解决方案

bash
# 检查 Git 权限
git remote -v

# 检查 SSH 密钥
ssh -T git@github.com

# 重新配置远程仓库
git remote set-url origin git@github.com:username/qxs-bns.git

# 手动推送测试
git push origin v1.0.0

2. 版本号冲突

问题现象

bash
⚠️  标签 v1.0.0 已存在

解决方案

bash
# 方案1: 使用工具自动递增
pnpm tag-manager --create
# 选择自动递增版本号

# 方案2: 手动指定新版本
# 输入 1.0.1 或 1.1.0

# 方案3: 删除现有标签后重新创建
pnpm tag-manager --delete
# 选择要删除的标签

3. GitHub Actions 未触发

问题现象

bash
 标签创建成功,但 GitHub Actions 未运行

解决方案

bash
# 1. 验证配置
pnpm tag-manager --validate

# 2. 检查标签格式
git tag --list | grep v1.0.0

# 3. 检查工作流文件
cat .github/workflows/release.yml

# 4. 手动触发(如果支持)
# 在 GitHub Actions 页面手动运行工作流

4. 权限问题

问题现象

bash
 GitHub Actions 权限不足

解决方案

bash
# 检查 GitHub Token 权限
# 需要以下权限:
# - contents: write
# - pull-requests: write
# - actions: write

# 在 GitHub 仓库设置中检查:
# Settings > Actions > General > Workflow permissions

5. 网络连接问题

问题现象

bash
 网络连接超时

解决方案

bash
# 工具会自动重试 3 次
# 如果仍然失败,可以手动操作:

# 创建本地标签
git tag -a v1.0.0 -m "Release v1.0.0"

# 稍后推送
git push origin v1.0.0

手动操作指南

Git 标签操作

bash
# 查看所有标签
git tag --sort=-version:refname

# 查看标签详情
git show v1.0.0

# 创建带注释的标签
git tag -a v1.0.0 -m "Release v1.0.0"

# 创建轻量级标签
git tag v1.0.0

# 推送单个标签
git push origin v1.0.0

# 推送所有标签
git push origin --tags

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0

GitHub Release 操作

bash
# 使用 GitHub CLI 创建 Release
gh release create v1.0.0 \
  --title "Release v1.0.0" \
  --notes "发布说明" \
  --draft

# 上传文件到 Release
gh release upload v1.0.0 dist/*.tgz

调试技巧

1. 启用详细日志

bash
# 设置环境变量启用调试模式
DEBUG=tag-manager pnpm tag-manager

# 查看详细的操作日志

2. 验证工具配置

bash
# 验证 GitHub Actions 配置
pnpm tag-manager --validate

# 检查输出:
# ✅ 工作流文件存在
# ✅ 标签触发器配置正确
# ✅ 权限设置正确
# ❌ changelogithub 配置缺失

3. 测试标签创建

bash
# 创建测试标签(不推送)
git tag -a test-v1.0.0 -m "Test tag"

# 验证标签创建成功
git tag --list | grep test

# 删除测试标签
git tag -d test-v1.0.0

🛡️ 安全特性

操作确认机制

  • 危险操作确认 - 删除标签前需要二次确认
  • 版本冲突检测 - 自动检测并提示版本冲突
  • 权限验证 - 操作前验证 Git 和 GitHub 权限

数据保护

  • 本地备份 - 操作前自动备份重要数据
  • 回滚支持 - 提供操作失败时的回滚建议
  • 详细日志 - 记录所有操作的详细日志

网络安全

  • 重试机制 - 网络操作支持自动重试
  • 超时保护 - 设置合理的网络超时时间
  • 错误处理 - 完善的错误处理和提示

📚 相关资源

官方文档

工具链


🎉 恭喜! 你已经掌握了 QXS-BNS 标签管理工具的完整使用方法。

通过这个工具,你可以轻松管理项目版本,自动化发布流程,让版本管理变得简单高效!

Released under the MIT License.