发布工作流

make release 完全指南:安全检查、版本推断与交互式预览

快速开始

make release # 交互式发布(推荐) make release-quick # 快速发布(无预览)

发布流程

1

Pre-flight 检查

  • ✓ 验证在 main 分支
  • ✓ 检查工作目录干净
  • ✓ 运行所有测试 (make test)
  • ✓ 运行 clippy (make clippy)
2

版本推断

脚本自动分析自上次 tag 以来的提交:

提交类型 版本升级 示例
feat!BREAKING CHANGE Major 1.0.0 → 2.0.0
feat Minor 0.7.0 → 0.8.0
fix/refactor/perf Patch 0.7.0 → 0.7.1
3

交互式预览

你将看到:

  • 当前版本和上次 tag
  • 推断的版本升级
  • 提交摘要(features、fixes 数量)
  • Changelog 预览
  • 覆盖版本的选项(major/minor/patch/custom)
4

Dry Run

执行前,你将看到将要发生的操作:

  • 版本升级
  • Changelog 生成
  • crates.io 发布(可选)
  • Tag 创建
  • 推送到远程
5

执行

确认后,脚本将:

  1. Cargo.toml 中升级版本
  2. 提交版本变更
  3. 生成 CHANGELOG.md
  4. 提交 changelog
  5. 发布到 crates.io(可选,会提示)
  6. 创建 Git tag
  7. 推送到 origin/main 及 tags

发布到 crates.io

前置条件

  1. Crates.io 账号
    • 在 https://crates.io 注册
    • 验证邮箱
  2. 认证
    # 登录 crates.io cargo login # 或使用 API token export CARGO_REGISTRY_TOKEN=<your-token>
  3. 验证 Crate 元数据
    # 检查包是否就绪 cargo package --list cargo package --no-verify

发布选项

选项 A:发布时一起发布

make release # 提示 "Publish to crates.io?" → y

选项 B:跳过 crates.io

make release # 提示 "Publish to crates.io?" → n

选项 C:稍后手动发布

# 发布后,手动发布 cargo publish --all-features

注意事项

⚠️ crates.io 版本不可删除

一旦发布到 crates.io,版本无法删除或修改。只能 yank(隐藏),不能删除。必须发布新版本来修复问题。

ℹ️ 发布前检查清单

  • 所有测试通过
  • Clippy 无警告
  • 文档完整(cargo doc --no-deps
  • CHANGELOG 已更新
  • README 中的版本号已更新(如需要)

已发布的 Crates

Crate 说明 链接
gitflow-cli 主 CLI 应用(二进制名 gf crates.io →
gitflow-core 核心库 crates.io →
gitflow-github GitHub 平台支持 crates.io →
gitflow-gitlab GitLab 平台支持 crates.io →
gitflow-gitcode GitCode 平台支持 crates.io →

准备好发布了吗?

运行 make release 开始你的第一次发布