#bump #version #release #git-commit

已撤回 tbump

增加软件版本

1.0.3 2020年5月20日

#35 in #bump

MIT 许可证

40KB
1K SLoC

tbump: 增加软件版本

image

image

image

image

image

image

image

image

安装

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.jsa/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