跳转到主要内容

增加软件版本

项目描述

https://img.shields.io/pypi/v/tbump.svg https://img.shields.io/github/license/dmerejkowsky/tbump.svg https://github.com/dmerejkowsky/tbump/workflows/tests/badge.svg https://github.com/dmerejkowsky/tbump/workflows/linters/badge.svg https://img.shields.io/badge/code%20style-black-black.svg https://img.shields.io/badge/mypy-checked-blue.svg

tbump:增加软件版本

tbump可以帮助您轻松地增加项目的版本。

注意

该项目最初托管在TankerHQ组织,该组织是我2016年至2021年的雇主。他们友好地同意将此项目的所有权归还给我。谢谢!

安装

安装tbump的推荐方式是使用pipx

  • 确保已安装Python 3.7或更高版本。

  • 安装pipx

  • 运行pipx install tbump

tbump也适用于pypi,并且如果您知道自己在做什么,可以使用pip进行安装。

屏幕截图

以下是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 -F 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"

然后运行

$ tbump 1.2.42

tbump

  • 将配置中列出的每个文件中的字符串 1.2.41 替换为 1.2.42

  • 基于 message_template 创建提交。

  • 基于 tag_template 创建 注解 标签。

  • 推送当前分支和标签。

请注意,默认情况下,tbump 将显示所有更改,并在执行任何操作之前停止以询问是否正确,允许您在出现问题时中止并重新尝试增量。您可以使用 --non-interactive 来禁用此行为。

如果您只想更新文件而不执行任何 git 操作或运行钩子命令,请使用 --only-patch 选项。

可以使用以下命令找到项目的当前版本

$ tbump current-version

高级配置

命令行选项

tbump --help

限制被替换的行

有时您想确保只有匹配给定模式的行被替换。例如,使用以下 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 的版本模式,您可能希望公开一个只包含版本字符串“公共”部分的变量。(在这种情况下为 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 -F {new_version} Changelog.rst"

名称是必填项。在将{new_version}占位符替换为新版本后,命令将通过shell执行。

任何失败的钩子都会中断版本升级。您可能需要在文件中撤销更改后再次尝试运行前,先运行git reset --hard

推送后运行命令

您可以使用一个[[after_push]]部分来指定在标签推送后立即运行的钩子列表。

如果您需要在没有未提交更改的干净仓库上运行命令,这非常有用,例如发布rust包。

[[after_push]]
name = "Publish to crates.io"
cmd = "cargo publish"

设置版本字段默认值

(自6.6.0版新增)

如果您有一个包含不总是有匹配项的字段(例如预发布信息)的version_template,您可以设置一个默认值来替代None,这会引发错误。

例如

[version]
current = "1.2.3"
regex = """
  (?P<major>\d+)
  \.
  (?P<minor>\d+)
  \.
  (?P<patch>\d+)
  (\-
    (?P<extra>.+)
  )?
  """

[[file]]
src = "version.py"
version_template = '({major}, {minor}, {patch}, "{extra}")'
search = "version_info = {current_version}"

[[field]]
# the name of the field
name = "extra"
# the default value to use, if there is no match
default = ""

与不支持–atomic的git提供者协同工作

如果推送目标不支持--atomic,请在[git]部分配置文件中添加atomic_push=false

..code-block:: ini

[git] atomic_push = false

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

tbump-6.11.0.tar.gz (28.6 kB 查看哈希值)

上传时间

构建分发

tbump-6.11.0-py3-none-any.whl (35.6 kB 查看哈希值)

上传时间 Python 3

支持者