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 解析器实现
10,652 每月下载量
用于 12 个 crate (2 直接)
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.x
到 0.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.y
到 0.(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