如何发布一个beta版本的crate以供有限的公开测试?

10

我希望谨慎地发布一个新版的 crate,以便用户有机会进行测试。我该如何将其作为“beta”版本发布到 crates.io 上?(类似于 npm 有标记为 @next 的版本发布)。

这不应该是一个破坏性变更,因此我不会增加 Semver 主版本号。在 beta 测试期结束之前,我不希望它被用户自动选择升级到。

  • 发布时应该使用什么版本语法?

  • 发布时是否需要使用特殊的 cargo 选项?

  • 用户如何使用 cargo/Cargo.toml 选择使用 beta 版本?

1个回答

22

语义化版本 定义了 预发布版本 的概念:

可以通过在补丁版本后面附加一系列用点分隔的标识符来表示预发布版本。标识符必须仅包含ASCII字母数字和连字符 [0-9A-Za-z-],不能留空。数值标识符不能包含前导零。预发布版本优先级低于相关普通版本。预发布版本表明该版本不稳定,可能无法满足其相关普通版本所表示的兼容性要求。例如:1.0.0-alpha、1.0.0-alpha.1、1.0.0-0.3.7、1.0.0-x.7.z.92。

在 Cargo 中使用时,应发布计划中的版本号的 crate,但是附加一个预发布标识符。我建议使用 -beta.0,这样您就可以轻松增加它以获取第二个版本:

[package]
name = "library"
version = "0.1.1-beta.0"

要使用此功能,您需要通过将 beta 放入版本需求中来明确选择它:

[dependencies]
library = "0.1.1-beta"

为了测试这个,我:

  1. 启动了一个本地的 crates.io 服务器
  2. 上传了版本号为0.1.0的 crate library
  3. 在二进制项目 app 中使用了 library = "0.1.0" — 它解析为0.1.0
  4. 上传了版本号为0.1.1-beta.0的 crate library
  5. app 中运行了 cargo update — 版本没有发生变化。
  6. app 中更改为 library = "0.1.1-beta",运行 cargo update — 版本发生了变化。
  7. 上传了版本号为0.1.1-beta.1的 crate library
  8. app 中运行了 cargo update — 版本发生了变化。

太棒了的回答。谢谢你。 - Kornel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接