增加Python项目的版本
项目描述
Bump My Version
注意
这是对优秀的 bump2version 分支 的维护重构,重构的主要目标是
概述
Bump My Version 的目的是
- 作为自动化构建系统的一部分
- 通过项目的开发生命周期管理项目版本
- 递增版本号
- 序列化版本号
- 解析版本号
- 支持SemVer、CalVer以及其他版本控制方案
- 修改项目文件作为项目开发生命周期的一部分
- 与项目的源代码控制系统协同工作
- 提交更改
- 标记发布版本
- 从标签中读取版本号
安装
您可以通过以下方式从Python包索引(PyPI)下载并安装此软件的最新版本:
pip install --upgrade bump-my-version
变更日志
请在此处找到变更日志: CHANGELOG.md
语义版本控制示例
创建默认配置
默认配置使用简化版的语义版本控制。
$ bump-my-version sample-config --no-prompt --destination .bumpversion.toml
$ cat .bumpversion.toml
[tool.bumpversion]
current_version = "0.1.0"
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
serialize = ["{major}.{minor}.{patch}"]
search = "{current_version}"
replace = "{new_version}"
regex = false
ignore_missing_version = false
tag = false
sign_tags = false
tag_name = "v{new_version}"
tag_message = "Bump version: {current_version} → {new_version}"
allow_dirty = false
commit = false
message = "Bump version: {current_version} → {new_version}"
commit_args = ""
可视化版本控制路径
您可以使用show-bump
子命令查看潜在的版本控制路径。
$ bump-my-version show-bump
0.1.0 ── bump ─┬─ major ─ 1.0.0
├─ minor ─ 0.2.0
╰─ patch ─ 0.1.1
$ bump-my-version show-bump 1.2.3
1.2.3 ── bump ─┬─ major ─ 2.0.0
├─ minor ─ 1.3.0
╰─ patch ─ 1.2.4
默认配置仅允许升级主版本、次版本或补丁版本。如果您想支持预发布版本呢?
添加对预发布版本的支持
修改parse
配置以支持预发布版本。此parse
选项使用扩展的正则表达式从当前版本中提取版本组件。
parse = """(?x)
(?P<major>0|[1-9]\\d*)\\.
(?P<minor>0|[1-9]\\d*)\\.
(?P<patch>0|[1-9]\\d*)
(?:
- # dash separator for pre-release section
(?P<pre_l>[a-zA-Z-]+) # pre-release label
(?P<pre_n>0|[1-9]\\d*) # pre-release version number
)? # pre-release section is optional
"""
修改serialize
配置以支持预发布版本。
serialize = [
"{major}.{minor}.{patch}-{pre_l}{pre_n}",
"{major}.{minor}.{patch}",
]
为pre_l
部分添加新的配置部分。
[tool.bumpversion.parts.pre_l]
values = ["dev", "rc", "final"]
optional_value = "final"
可视化新的版本控制路径
现在,当您运行bump-my-version show-bump
时,您可以看到新的预发布版本控制路径。
$ bump-my-version show-bump
0.1.0 ── bump ─┬─ major ─ 1.0.0-dev0
├─ minor ─ 0.2.0-dev0
├─ patch ─ 0.1.1-dev0
├─ pre_l ─ invalid: The part has already the maximum value among ['dev', 'rc', 'final'] and cannot be bumped.
╰─ pre_n ─ 0.1.0-final1
pre_l
不可升级,因为它已经达到最大值。而pre_n
可升级,因为它没有达到最大值。
如果我们运行bump-my-version show-bump 1.0.0-dev0
,我们可以看到以dev
开头的版本的新版本控制路径。
$ bump-my-version show-bump 1.0.0-dev0
1.0.0-dev0 ── bump ─┬─ major ─ 2.0.0-dev0
├─ minor ─ 1.1.0-dev0
├─ patch ─ 1.0.1-dev0
├─ pre_l ─ 1.0.0-rc0
╰─ pre_n ─ 1.0.0-dev1
最后,我们可以看到以rc
开头的版本的新版本控制路径。
$ bump-my-version show-bump 1.0.0-rc0
1.0.0-rc0 ── bump ─┬─ major ─ 2.0.0-dev0
├─ minor ─ 1.1.0-dev0
├─ patch ─ 1.0.1-dev0
├─ pre_l ─ 1.0.0
╰─ pre_n ─ 1.0.0-rc1
完整的发展与发布路径是
1.0.0
bump patch
→1.0.1-dev0
bump pre_n
→1.0.1-dev1
bump pre_l
→1.0.1-rc0
bump pre_n
→1.0.1-rc1
bump pre_l
→1.0.1
- 在开始开发之前,您必须决定下一个版本。
- 使用
bump-my-version bump pre_n
升级开发版本。 - 使用
bump-my-version bump pre_l
从开发版本切换到候选发布版本。 - 使用
bump-my-version bump pre_n
升级候选发布版本。 - 使用
bump-my-version bump pre_l
从候选发布版本切换到最终发布版本。
自动化预发布编号
pre_n
或预发布编号是每次预发布都会增加的数字。您可以通过更改序列化配置来自动化。
serialize = [
"{major}.{minor}.{patch}-{pre_l}{distance_to_latest_tag}",
"{major}.{minor}.{patch}",
]
distance_to_latest_tag
是一个特殊值,它被替换为自上次标签以来的提交次数。这对于pre_n
是一个很好的值,因为它会随着每次提交而增加。
可视化pre_n
版本控制路径
现在,当您运行bump-my-version show-bump
时,您可以看到新的预发布版本控制路径。
$ bump-my-version show-bump
0.1.0 ── bump ─┬─ major ─ 1.0.0-dev0
├─ minor ─ 0.2.0-dev0
├─ patch ─ 0.1.1-dev0
╰─ pre_l ─ invalid: The part has already the maximum value among ['dev', 'rc', 'final'] and cannot be bumped.
$ bump-my-version show-bump 1.0.0-dev0
1.0.0-dev0 ── bump ─┬─ major ─ 2.0.0-dev0
├─ minor ─ 1.1.0-dev0
├─ patch ─ 1.0.1-dev0
╰─ pre_l ─ 1.0.0-rc0
$ bump-my-version show-bump 1.0.0-rc0
1.0.0-rc0 ── bump ─┬─ major ─ 2.0.0-dev0
├─ minor ─ 1.1.0-dev0
├─ patch ─ 1.0.1-dev0
╰─ pre_l ─ 1.0.0
由于自动化,现在缺少了pre_n
路径。
完整的发展与发布路径现在是
1.0.0
bump patch
→1.0.1-dev0
- 每个提交都会增加 →
1.0.1-dev1
- 每个提交都会增加 →
bump pre_l
→1.0.1-rc0
- 每个提交都会增加 →
1.0.1-rc1
- 每个提交都会增加 →
bump pre_l
→1.0.1
- 在开始开发之前,您必须决定下一个版本。
- 开发版本会随着每个提交自动增加。
- 使用
bump-my-version bump pre_l
从开发版本切换到候选发布版本。 - 候选发布版本会随着每个提交自动增加。
- 使用
bump-my-version bump pre_l
从候选发布版本切换到最终发布版本。
GitHub Actions
您可以将bump-my-version
作为GHA工作流程的一部分使用。以下是一个示例工作流程,该工作流程升级版本,提交更改并标记提交。
name: Bump version
on:
workflow_dispatch:
bump-type:
description: 'Bump type'
required: true
default: 'patch'
type: choice
options:
- major
- minor
- patch
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v4
- name: Bump version
id: bump
uses: callowayproject/bump-my-version@master
env:
BUMPVERSION_TAG: "true"
with:
args: ${{ inputs.bump-type }}
github-token: ${{ secrets.GH_TOKEN }}
- name: Check
if: steps.bump.outputs.bumped == 'true'
run: |
echo "Version was bumped from ${{ steps.bump.outputs.previous-version }} to ${{ steps.bump.outputs.current-version }}!"
bump-my-version
动作的输入
args
- 要传递给bump-my-version bump [args]
命令的参数。有关更多信息,请参阅CLI文档。github-token
- 用于提交和标记的GitHub令牌。这是可选的。
输出
bumped
- 表示是否已升级版本的布尔标志。previous-version
- 执行升级操作前的版本。current-version
- 执行版本增量后的版本。
如果您想确保使用“on-push”触发器设置的流程也能根据新推送的提交或标签启动,您需要提供自定义PAT(github-token
)。请参阅这里。
开发 & 贡献
感谢贡献者们!您可以在这里找到完整的列表:https://github.com/callowayproject/bump-my-version/graphs/contributors
也请参阅我们的CONTRIBUTING.md
此项目的开发在GitHub上进行,包括测试和文档的补丁非常欢迎,以及错误报告!如果您发现此工具不支持您开发工作流程中增量版本的所有方面,请创建一个问题,因为它旨在非常灵活。
许可协议
Bump My Version遵循MIT许可证 - 有关详细信息,请参阅LICENSE文件。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
bump_my_version-0.26.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | af1cada726cf6f9a723d18941c68c325d5196453a180b3a42f8e0b38567d734d |
|
MD5 | c20c038d11e09f97b2f867d575906279 |
|
BLAKE2b-256 | 64e879b34e1be514aea34182a766ab9ae1fdb493ce0e36609517c3dd10adf3f7 |