8 个版本 (稳定版)
1.0.5 | 2022 年 11 月 18 日 |
---|---|
1.0.4 | 2022 年 3 月 19 日 |
0.1.1 | 2021 年 9 月 4 日 |
#1174 在 开发工具 中
43KB
873 行
版本标记工具(Rust 版本)
Rust 包和命令行工具,用于更新任何类型项目的版本信息。
- 定义需要更新的文件
- 三种操作类型;就地更新、创建或复制到现有文件
- 使用正则表达式在现有文件中查找和替换内容
- 除了版本号外,还可以存储和插入其他信息,如版权等。
- 完全自定义您希望对项目进行的版本更新操作类型
- 支持您希望使用的任何类型版本控制方案
概述
发布新项目通常涉及以下步骤
- 更新
package.json
、Cargo.toml
以及任何源代码文件中的版本号 - 创建带有版本号的 Git 标签
- 构建并确保所有测试通过
- 将更改推送到云端源代码库,例如 GitHub、GitLab 等。
- 将新铸造并标记的包发布到云端包仓库。
使用此工具可以简化上述所有步骤。
要使用此工具为您的项目,只需
- 在项目根目录放置一个
version.json5
文件,其中- 描述了项目中包含版本号的文件
- 在每个文件上执行哪种三种操作(更新、写入或复制到)
- 您希望执行的版本更新操作类型(《code>incrMajor、
incrMinor
等)
- 将
stampver
作为项目发布脚本的组成部分运行
一旦开始使用 stampver
,您将能够从其他项目复制 version.json5
文件,并稍作调整以快速设置。
命令行
命令行工具 stampver
使用 cli
功能标志包含在此包中,该标志默认已安装。
USAGE:
stampver [OPTIONS] [OPERATION]
ARGS:
<OPERATION> The versioning operation to perform
OPTIONS:
-h, --help Print help information
-i, --input <INPUT_FILE> Specify the version file explicitly
-u, --update Actually do the update
-V, --version Print version information
此工具将描述它在每个文件上执行的操作,以便您可以检查它是否按预期执行。
表达式
此软件包使用evalexpr提供自定义不同计算和操作的能力。所有函数都如evalexpr
中所述可用,除了 regex
函数。 stampver
添加以下变量/函数:
标识符 | 参数数量 | 参数类型 | 描述 |
---|---|---|---|
now::year |
0 | 当前的UTC年 | |
now::month |
0 | 当前的UTC月 | |
now::day |
0 | 当前UTC月中的日 | |
if |
3 | 布尔值/任何/任何 | 如果表达式a 为true ,则返回b 的值,否则返回c 的值 |
stampver
使用Regex crate进行正则表达式。您可以使用惊人的Regex101网站开发并测试您自己的正则表达式。使用与Regex
crate最兼容的正则表达式变体PCRE2。
架构文件格式
以下是带有注释的架构文件格式:
{
vars: {
major: 3,
minor: 0,
patch: 0,
build: 20210902,
revision: 0,
sequence: 6,
buildType: "test",
debug: true,
},
calcVars: {
nextBuild: "now::year * 10000 + now::month * 100 + now::day",
nextSequence: "sequence + 1",
},
operations: {
incrMajor: "major += 1; minor = 0; patch = 0; revision = 0; build = nextBuild",
incrMinor: "minor += 1; patch = 0; revision = 0; build = nextBuild",
incrPatch: "patch += 1; revision = 0; build = nextBuild",
incrRevision: "revision += 1; build = nextBuild",
incrSequence: "sequence += 1",
setBetaBuild: 'buildType = "beta"',
setProdBuild: 'buildType = "prod"',
},
targets: [
{
description: "JavaScript Files",
files: ["src/version.js"],
updates: [
{
search: '^(?P<begin>\\s*export\\s*const\\s*version\\s*=\\s*")\\d+\\.\\d+\\.\\d+(?P<end>";?)$',
replace: 'begin + str::from(major) + "." + str::from(minor) + "." + str::from(patch) + end',
},
{
search: '^(?P<begin>\\s*export\\s*const\\s*fullVersion\\s*=\\s*")\\d+\\.\\d+\\.\\d+\\+\\d+\\.\\d+(?P<end>";?)$',
replace: 'begin + str::from(major) + "." + str::from(minor) + "." + str::from(patch) + "+" + str::from(build) + "." + str::from(revision) + end',
},
],
},
{
description: "Git Version Tag",
files: ["scratch/version.tag.txt"],
write: 'str::from(major) + "." + str::from(minor) + "." + str::from(patch)',
},
{
description: "iOS PList",
files: ["some-file.plist"],
copyFrom: '"src/some-file" + if(buildType == "test", "-test", "-prod") + ".plist"',
},
],
}
由于该格式是JSON5,并且是JSON的超集,因此您可以自由使用注释。建议使用Prettier或等效工具。这不仅是为了保持文件格式良好,而且因为stampver
需要更新文件,如果格式与上述格式差异太大,它可能会感到困惑。
主要有以下4个部分:
vars
这是版本信息所在的位置,因此实际上它是您项目的简单版本信息数据库。这也是唯一一个在更新版本信息时由工具重写的部分。它这样做是为了保留注释,但工具确实期望布局与上面的示例相似。
calcVars
这些是需要每次工具运行时生成的任何变量。这可能包括基于日期的build
号或nextSequence
号等。此部分中的值与vars
中的值合并,因此请注意命名冲突。
operations
这些是您项目的不同版本操作。例如,incrMajor
、incrMinor
、incrPatch
是典型操作,但您可以添加适合您项目的任何操作。
targets
targets
是一个包含一个description
、一个要更新的files
数组以及一个动作的对象数组。动作必须是以下之一:
updates
- 一个包含{ search: , replace: }
对象的数组。其中search
是一个正则表达式。它可以包含最多两个可选捕获组,必须称为begin
和end
。这些可以在replace
替换字符串中使用。write
- 将内容写入目标文件。内容是一个表达式。copyFrom
- 从另一个文件复制文件,相对于version.json5
文件的位置。其他文件的名称是一个表达式。
许可
依赖项
~8–17MB
~213K SLoC