当前位置: 首页 > news >正文

Cargo workspace 版本发布:多包项目别手动改到手酸

Cargo workspace 版本发布:多包项目别手动改到手酸

一、多包版本很容易乱

Cargo workspace 很适合组织多个 crate:核心库、CLI、插件 SDK、测试工具。但包一多,版本发布就容易乱。某个内部 crate 升级了,依赖它的 CLI 忘记改;CHANGELOG 写了,Cargo.toml 没改;tag 打了,包没发。

多包项目需要发布流程,而不是手工记忆。

之前参与的项目有四个 crate:core、cli、sdk、wasm-plugin。有一次 core 改了接口后只发布了 core 的新版本,cli 还在用旧版本号但代码已经引了新类型。发布的 cli 二进制报错说找不到新增的结构体字段,排查半天才定位到版本没同步。

二、先梳理包关系

flowchart TD A[core] --> B[cli] A --> C[sdk] C --> D[wasm-plugin]

发布前要知道哪些包是公开 API,哪些只是内部工具。公开包的版本变化要更谨慎,内部包可以跟随 workspace 统一版本。

[workspace] members = ["crates/core", "crates/cli", "crates/sdk"] [workspace.package] edition = "2021"

共享字段放到 workspace,可以减少重复。

小技巧:workspace 级别的editionversionauthors可以统一管理,但descriptiondocumentation应该每个 crate 单独写,因为这些字段会显示在 crates.io 页面上。

三、版本策略要明确

如果所有包一起发布,可以使用统一版本;如果包独立演进,就要记录依赖版本和兼容范围。两种方式都可以,怕的是混着来。

实战踩坑:用统一版本发布时,sdK 有一个 patch 修复但被 cli 的破坏性更新挡住了,因为版本号是一起的。后来把 SDK 拆成了独立版本,CLI 和 SDK 各走各的发布节奏。代价是增加了 changelog 维护量,但不再互相阻塞。

release_policy: versioning: unified changelog_required: true tag_format: v{version} publish_order_checked: true

发布顺序也重要。被依赖的库要先发布,CLI 或插件再发布。

四、发布前跑完整检查

发布不是cargo publish一条命令。至少要跑格式化、lint、测试、文档构建和包内容检查。

cargo fmt --check cargo clippy --workspace --all-targets -- -D warnings cargo test --workspace cargo package --workspace

cargo package能提前发现缺文件、README 路径错误、许可证缺失等问题。

边界场景:有一次 CI 里cargo test全绿就直接 publish 了,结果用户反映安装后样例代码编译不过。原因是 examples 目录依赖 dev-dependencies,但发布包里没包含 example 文件。后来把cargo package --workspace也加进发布检查,缺文件的包直接拒绝发布。

最后,自动化不等于盲发。发布脚本可以减少重复劳动,但版本号、破坏性变更和 changelog 仍要人工确认。工具帮你按流程走,人负责判断这次发布意味着什么。

还要检查 workspace 里的 path 依赖。发布到 crates.io 前,内部 path 依赖需要有对应 version,否则包发布后别人无法解析。cargo package能发现一部分问题,但发布流程里最好显式检查。

my-core = { path = "../core", version = "0.3.0" }

CHANGELOG 也要按包组织。用户关心 CLI 增加了什么命令,库用户关心 API 是否破坏,插件作者关心协议是否变化。一个总 changelog 可以有,但每个公开包最好有清晰条目。

发布后还要做安装验证。新建一个临时目录,从 registry 安装 CLI 或依赖库,确认用户视角能正常使用。很多发布问题只有脱离本地 workspace 才会暴露。

最后,tag 和源码要对应。发布完成后用 tag 锁住版本,后续排查某个用户反馈时,才能回到准确代码。

如果项目包含二进制 CLI,还要确认安装包和源码 crate 的版本一致。用户通过cargo install安装的是发布产物,不是本地 workspace。发布后跑一次真实安装命令,能发现很多路径和 feature 问题。

五、总结

Cargo workspace 版本发布要梳理包关系、选择版本策略、检查发布顺序,并在发布前跑完整质量门槛。

多包项目别手动改到手酸。流程清楚,版本才不会乱。

一个省力做法是把发布检查写成脚本或 CI 步骤,内容包括:包依赖是否有 path 只有没 version、changelog 是否更新、tag 是否和 version 一致。每次发布跑一遍,花几分钟,远好过发布后发现遗漏再打补丁。

另外建议在 workspace 根目录放一个 RELEASING.md,记录这次发布从准备到验证的步骤。新人接手或隔几个月再发布时,不会再靠记忆翻命令。

http://www.jsqmd.com/news/1129031/

相关文章:

  • 第30章 类型系统高级话题
  • CISP-PTE渗透测试知识体系详解:从基础到实战的完整能力构建路径
  • C#视觉检测翻车实录:我把OK当成NG拒收,差点被产线大姐当场“祭天”
  • C#图像处理黑魔法:揭秘直方图均衡化,如何让模糊的“马赛克”秒变高清“写真”?
  • 5分钟掌握B站缓存视频转换技巧:m4s-converter完整使用指南
  • 怎样轻松实现移动端图片滑动浏览:3个实用技巧提升用户体验
  • DuMate智能体:DuMate 浏览器插件安装指南
  • 【Linux】九.进程概念--环境变量及其相关指令
  • 高效技巧怎么用 AI 做表格,搭配 AI 导出鸭一站式搞定表格生成与导出工作
  • 【Atlas】Atlas 的 Type System 是什么?它如何支撑元模型定义?
  • F3闪存检测工具:5分钟识别扩容盘欺诈的完整指南
  • luogu----P1000 超级玛丽游戏
  • 终极指南:如何用AI增强开发工作流实现3倍效率提升
  • 从弱口令挖掘到SRC奖金:实战路径与高阶技巧全解析
  • 环境准备和使用指南
  • cpp数据结构
  • PyTorch实战:构建CK+表情识别数据管道
  • 河源市万川石英发展有限公司工厂简介
  • Nintendo Switch游戏文件终极管理指南:NSC_BUILDER完全解析
  • 存储芯片千问千答第1问:Nand SCA是什么
  • 深度解析Bottles:如何在Linux上轻松运行Windows游戏和软件
  • 第 5 篇:MAC 地址——IP 管远方,MAC 管眼前
  • Claude怎么转PDF?AI导出鸭多平台办公新方案深度评测
  • C#版“福尔摩斯”:文件监听的“潜伏”与“反侦察”艺术
  • 【Linux】八.进程概念--进程的切换,上下文数据,进程的状态,进程的优先级,以及Linux内核进程的调度队列
  • AI Agent 面试题 735:Agent的用户满意度评估方法和指标设计
  • 存储芯片千问千答第2问:盲封TT wafer是什么意思?
  • FGSM 对抗攻击实战:5行代码实现 MNIST 图像分类器 90% 成功率欺骗
  • Codex技能(Skills)完整教程:打造可复用AI工作流,让Codex变成你的专属开发助手
  • P1634 禽兽的传染病