14 个版本 (6 个重大更新)
0.8.4 | 2024 年 2 月 28 日 |
---|---|
0.8.3 | 2024 年 2 月 28 日 |
0.7.4 | 2024 年 2 月 27 日 |
0.5.0 | 2024 年 1 月 26 日 |
0.1.0 | 2024 年 1 月 24 日 |
#50 在 值格式化
每月下载量 357 次
145KB
2.5K SLoC
nextver
一个用于解析和递增任意格式版本的库。
该库不遵循特定的版本号方案,允许您定义自己的版本格式,根据它解析版本字符串,并按照语义和/或日历规则递增版本。
还附带了一个 命令行界面。
这是一个文档的简略版本。有关完整文档,请参阅 docs.rs。
示例
以下括号中的文本 <
和 >
是指定符。请参阅它们的含义 这里。
快速获取下一个版本
use nextver::prelude::*;
let next = Sem::next_version_string(
"<MAJOR>.<MINOR>.<PATCH>", // format string
"1.2.3", // current version string
SemLevel::Minor // the specifier to increment
)?;
assert_eq!(next, "1.3.0");
API 概述
nextver 围绕三个主要概念构建:方案、格式和版本。
-
方案 规定了版本中允许的值类型及其递增规则。(见下表。)它们由
Scheme
特性建模并由以下结构体实现 -
格式定义了版本字符串的结构。它们通过
Format
结构体建模。它们包含一系列指定符和文本字面量令牌。例如,<MAJOR>.<MINOR>.<PATCH>
是一个可以转换为Format
对象的格式字符串。 -
版本类似于格式,但用实际值而不是指定符表示。它们代表项目开发中的一个点。这些通过
Version
结构体建模。它们可以被增加到新版本,并相互比较。
格式字符串语法
在格式字符串中使用任何序列的指定符(如下所示)和文本字面量。指定符用<
和>
括起来。
表
下表“示例”列中,我们引用了主版本为1
,次版本为2
,补丁为3
,日期为2001-02-03
(这是第四周)。
指定符 | 示例 | Sem |
CalSem |
Cal |
解析宽度 | 格式宽度 | 描述 |
---|---|---|---|---|---|---|---|
<MAJOR> |
1 |
✅ | ❌ | ❌ | >=1 | None | 版本的主体部分 |
<MINOR> |
2 |
✅ | ✅ | ❌ | >=1 | None | 版本的次要部分 |
<PATCH> |
3 |
✅ | ✅ | ❌ | >=1 | None | 版本的补丁部分 |
<YYYY> |
2001 |
❌ | ✅ | ✅ | >=1 | None | 完整年份,公元前1年以下年份不受支持(0 指公元前1年) |
<YY> |
1 |
❌ | ✅ | ✅ | >=1 | None | 年份减去2000 。目前,与year % 100 相同,但2100年将是100 ,依此类推 |
<0Y> |
01 |
❌ | ✅ | ✅ | >=2 | 2 | 与YY 相同,但填充零 |
<MM> |
1 |
❌ | ✅ | ✅ | 1或2 | None | 年份中的月份(1 –12 ) |
<0M> |
01 |
❌ | ✅ | ✅ | 2 | 2 | 与MM 相同,但填充零 |
<WW> |
4 |
❌ | ✅ | ✅ | 1或2 | None | 年份中的周(0 –53 ),第一周从当年的第一个星期日开始 |
<0W> |
04 |
❌ | ✅ | ✅ | 2 | 2 | 与WW 相同,但填充零 |
<DD> |
3 |
❌ | ✅ | ✅ | 1或2 | None | 月份中的天数(1 –31 ) |
<0D> |
03 |
❌ | ✅ | ✅ | 2 | 2 | 与DD 相同,但填充零 |
指定符是区分大小写的。例如,<major>
不是一个有效的指定符。
CLI
这个crate提供了一个CLI,可以直接从命令行执行一些API函数。
安装
cargo install nextver
用法
nextver --help
DevOps
用于
- 创建和推送新的git标签,
- 创建一个新的带有二进制文件的GitHub发布版本,并且
- 将新版本发布到https://crates.io(并更新https://docs.rs上的文档)
只需将带有更新版本号的提交推送到master
分支。位于.github/workflows/release+build+publish.yml
的工作流程文件将处理其余部分。之后请确保拉取更新。
依赖项
约2.2–3MB
约53K SLoC