1.0.3 |
|
---|
#35 in #bump
40KB
1K SLoC
tbump: 增加软件版本
安装
cargo安装 tbump
tbump 应用实例
以下是一个典型的 tbump
用法的示例
$ tbump 5.0.5
:: Bumping from 5.0.4 to 5.0.5
=> Would patch these files
- setup.py:14 version="5.0.4",
+ setup.py:14 version="5.0.5",
- tbump.toml:2 current = "5.0.4"
+ tbump.toml:2 current = "5.0.5"
=> Would run these hooks before commit
* (1/2) $ ./test.sh
* (2/2) $ grep -q 5.0.5 Changelog.rst
=> Would run these git commands
* git add --update
* git commit --message Bump to 5.0.5
* git tag --annotate --message v5.0.5 v5.0.5
* git push origin master
* git push origin v5.0.5
=> Would run these hooks after push
* (1/1) $ ./publish.sh
:: Looking good? (y/N)
y
=> Patching files
...
=> Running hooks before commit
...
=> Making bump commit and push matching tags
...
=> Running hooks after push
...
Done ✓
用法
首先运行 tbump init
。这将创建一个类似下面的 tbump.toml
文件
[version]
current = "1.2.41"
regex = '''
(?P<major>\d+)
\.
(?P<minor>\d+)
\.
(?P<patch>\d+)
'''
[git]
message_template = "Bump to {new_version}"
tag_template = "v{new_version}"
[[file]]
src = "setup.py"
注意
- 文件使用 toml 语法。
- 一些模板必须包含使用花括号占位符的占位符
- 路径可以包含 Unix 风格的 通配符,例如
src = "a/**/script.?s"
匹配a/b/script.js
和a/b/c/script.ts
。 - 版本正则表达式将使用 'verbose' 模式,可以包含命名组(见下文)。
一旦 tbump.toml
文件准备就绪,运行类似下面的命令
$ tbump 1.2.42
tbump
将
- 将配置中列出的每个文件中的字符串
1.2.41
替换为1.2.42
- 基于
message_template
创建提交。 - 基于
tag_template
创建一个 注解 标签。 - 推送当前分支和标签。
注意,默认情况下,tbump
将显示所有更改,并在执行任何操作之前停止以询问是否正确,允许您在出现问题时中止并重新尝试增加版本。您可以使用 --non-interactive
来禁用此行为。
如果您只想增加文件而不执行任何 git 操作或运行钩子命令,请使用 --only-patch
选项。
高级配置
限制替换的行
有时您需要确保只有匹配给定模式的行被替换。例如,对于以下 package.json
/* in package.json */
{
"name": "foo",
"version": "0.42",
"dependencies": {
"some-dep": "0.42",
"other-dep": "1.3",
}
}
您想确保当您从 0.42
增加到 0.43
时,包含 some-dep
的行不会更改。
在这种情况下,您可以在 file
部分中设置一个 search
选项
# In tbump.toml
[[file]]
src = "package.json"
search = '"version": "{current_version}"'
请注意,搜索字符串实际上是一个完整的正则表达式,除了 {current_version}
标记,它被替换为纯文本。
使用自定义版本模板
如果您使用的是如 1.2.3-alpha-4
这样的版本模式,您可能希望暴露一个只包含版本字符串 "public" 部分的变量。 (在这种情况下为 1.2.3
)
要这样做,请在 file
部分添加一个 version_template
选项。格式字符串中使用的名称应与正则表达式中的组名匹配。
/* in version.js */
export FULL_VERSION = '1.2.3-alpha-4';
export PUBLIC_VERSION = '1.2.3';
[[file]]
src = "version.js"
version_template = "{major}.{minor}.{patch}"
search = "export PUBLIC_VERSION = '{current_version}'"
[[file]]
src = "version.js"
search = "export FULL_VERSION = '{current_version}'"
在提交前运行命令
您可以在文件更改后、提交和推送之前指定要运行的钩子列表。
这对于某些版本控制下的文件是通过外部程序生成的很有用。
以下是一个示例
[[before_commit]]
name = "Check Changelog"
cmd = "grep -q {new_version} Changelog.rst"
名称是必须的。该命令将在 {new_version}
占位符替换为新版本后,通过 shell 执行。
任何失败的钩子都将中断增量。您可能需要在尝试再次撤销文件中的更改之前运行 git reset --hard
。
在推送后运行命令
您可以使用 `[[after_push]]` 部分指定在标签推送后要运行的钩子列表。
如果您需要命令在干净的存储库上运行,而不包含未提交的更改,这将很有用,例如发布 rust
软件包。
[[after_push]]
name = "Publish to crates.io"
cmd = "cargo publish"
依赖关系
~5–14MB
~158K SLoC