31 个版本

新增 0.2.19 2024 年 8 月 4 日
0.2.18 2024 年 6 月 18 日
0.2.17 2024 年 5 月 27 日
0.2.15 2024 年 3 月 8 日
0.1.1 2022 年 3 月 27 日

#973 in 解析器实现

Download history 2320/week @ 2024-04-20 1475/week @ 2024-04-27 1716/week @ 2024-05-04 2482/week @ 2024-05-11 2107/week @ 2024-05-18 2399/week @ 2024-05-25 3610/week @ 2024-06-01 2657/week @ 2024-06-08 5393/week @ 2024-06-15 2384/week @ 2024-06-22 1249/week @ 2024-06-29 1448/week @ 2024-07-06 1246/week @ 2024-07-13 1387/week @ 2024-07-20 4358/week @ 2024-07-27 3338/week @ 2024-08-03

10,652 每月下载量
用于 12 个 crate (2 直接)

MIT/Apache

27KB
306

next_version

基于 常规提交 计算下一个语义版本的库。

它不分析 git 历史,提交列表必须由用户提供。

致谢

代码库的部分灵感来自 cocogitto


lib.rs:

基于 常规提交 计算下一个语义版本的库。

它不分析 git 历史,提交列表必须由用户提供。

版本变更

非常规提交

如果没有使用常规提交,则补丁版本递增。

use semver::Version;
use next_version::NextVersion;

let commits = ["my change"];
assert_eq!(Version::new(1, 2, 3).next(commits), Version::new(1, 2, 4));

0.0.x 版本

0.0.x 版本中,补丁版本总是递增

use semver::Version;
use next_version::NextVersion;

let commits = ["my change"];
assert_eq!(Version::new(0, 0, 4).next(&commits), Version::new(0, 0, 5));

let commits = ["feat!: break user"];
assert_eq!(Version::new(0, 0, 1).next(&commits), Version::new(0, 0, 2));
我们不增加次要版本,因为从 0.0.x0.1.x 的升级应该是故意的(不是自动的),因为作者向用户传达了一个更高的 API 稳定性级别。

特性

如果存在特性注释

  • 如果主版本号是 0:则递增补丁版本。
  • 否则:递增次要版本。
use semver::Version;
use next_version::NextVersion;

let commits = ["my change", "feat: make coffe"];
assert_eq!(Version::new(1, 2, 4).next(&commits), Version::new(1, 3, 0));

assert_eq!(Version::new(0, 2, 4).next(&commits), Version::new(0, 2, 5));
当主版本号是 0 时,我们不增加次要版本,因为从 0.x.y0.(x+1).0 的升级表示破坏性更改。

破坏性更改

破坏性更改将

  • 如果主版本号不是 0,则递增主版本号。
  • 如果主版本号是 0,则递增次要版本。
use semver::Version;
use next_version::NextVersion;

let commits = ["feat!: break user"];
assert_eq!(Version::new(1, 2, 4).next(&commits), Version::new(2, 0, 0));

assert_eq!(Version::new(0, 4, 4).next(&commits), Version::new(0, 5, 0));

根据常规提交规范,破坏性变更也可以在页脚中指定

use semver::Version;
use next_version::NextVersion;

let breaking_commit = r#"feat: make coffe

my change

BREAKING CHANGE: user will be broken
"#;

let commits = [breaking_commit];
assert_eq!(Version::new(1, 2, 4).next(&commits), Version::new(2, 0, 0));

预发布版本

预发布版本以相同的方式递增,独立于提交类型

use semver::Version;
use next_version::NextVersion;

let commits = ["feat!: break user"];
let version = Version::parse("1.0.0-alpha.1.2").unwrap();
let expected = Version::parse("1.0.0-alpha.1.3").unwrap();
assert_eq!(version.next(commits.clone()), expected);

// If the pre-release doesn't contain a version, `.1` is appended.
let version = Version::parse("1.0.0-beta").unwrap();
let expected = Version::parse("1.0.0-beta.1").unwrap();
assert_eq!(version.next(commits), expected);

构建元数据

构建元数据不会被修改。

use semver::Version;
use next_version::NextVersion;

let commits = ["my change"];
let version = Version::parse("1.0.0-beta.1+1.1.0").unwrap();
let expected = Version::parse("1.0.0-beta.2+1.1.0").unwrap();
assert_eq!(version.next(commits.clone()), expected);

let version = Version::parse("1.0.0+abcd").unwrap();
let expected = Version::parse("1.0.1+abcd").unwrap();
assert_eq!(version.next(commits.clone()), expected);

自定义版本递增

如果您不喜欢crate的默认递增规则,您可以使用VersionUpdater来自定义它们。

依赖项

~4.5–6MB
~112K SLoC