#cargo-version #git-version #semver #cargo-metadata #version-string #cargo-subcommand #release

bin+lib cargo-gitv

基于 Cargo 和 Git 元数据的合理且具有偏见的版本管理

2 个版本

0.1.2 2022 年 8 月 29 日
0.1.1 2022 年 8 月 28 日

642Cargo 插件

每月 21 次下载

MIT/Apache

15KB
164

cargo-gitv

基于 Cargo 和 Git 元数据的合理且具有偏见的版本管理。

工作原理

cargo-gitv 根据您在 Cargo.toml 中定义的版本和 Git 元数据生成与语义版本兼容的版本字符串。它支持生成发布版本和预发布版本。此外,它还支持基于纯时间戳的版本,这对于持续交付管道很有用。此外,它还提供了用于在 Cargo.toml 中提升版本的命令。

基本语义版本始终从 Cargo.toml 中获取。对于发布版本,cargo-gitv 使用 <提交时间戳>-<git sha> 作为构建元数据。这生成如下版本:1.1.0+20220715144403-90bc61e。对于预发布版本,我们目前支持开发版本和发布候选版本。提交时间戳与预发布类型字符串一起用作标识符。这导致开发版本的版本字符串为 1.1.1-dev.20220715144403+90bc61e,发布候选版本的版本字符串为 1.1.1-rc.20220715144403+90bc61e

请注意,我们使用提交时间戳而不是当前时间戳。因此,我们可以为每个提交生成稳定的版本号,因为用于组装版本号的所有信息都包含在提交中。

最后,cargo-gitv 会验证 Cargo.toml 中的版本是否大于最新发布版(开发和发布候选版)或与当前 Git 版本标签(发布版)完全匹配。其理由是,在发布时,Cargo.toml 中的版本应与用于发布的 git 标签相匹配。此外,cargo-gitv 的基础思想是版本在发布后会升级到下一个版本(甚至可能多次)。在语义版本控制中,预发布版本总是被认为在发布版本之前,例如 1.1.1-rc.20220715144403+90bc61e < 1.1.1+20220715144403+90bc61e。我们认为预发布版本应该与稍后发布的版本号共享。请注意,在下一个发布之前可能存在几个基版本。可能从发布后立即开始使用 1.1.2,当引入新功能时升级到 1.2.0,当需要引入 API 变更时最终达到 2.0.0

用法

  • 根据一系列规则计算与语义版本控制兼容的工作区版本。
  • 默认计算预发布版本。
  • 默认预发布标识符为 dev
  • 默认基版本是 Cargo 版本。
  • Git 版本标签是一个 v 后跟一个正常的语义版本,即满足正则表达式如 ^v[1-9]\d*.[1-9]\d*.[1-9]\d*$ 的标签。Git 发布候选版本(rc 版本)定义为带有 rc 而不是 v 的发布版本。
  • verify 子命令可以用来检查 Cargo 版本是否与工作区版本一致。它仅比较基版本。如果没有 git 版本,验证总是成功,因为工作区版本的基版本来自 Cargo 元数据。根据调用的模式,verify 命令的行为可能不同。对于 --dev 模式,它期望 Cargo 版本大于最后一个 git 版本,因为 Cargo 版本应代表下一个发布版本(预发布版本始终被认为是小于最终发布版本的)。rc 和发布模式期望提交带有 rc 或发布版本标签,Cargo 版本与该标签匹配。

许可

许可协议为以下之一

根据您的选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在本工作中的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。

依赖项

~13MB
~317K SLoC