【发布时间】:2023-02-10 03:16:58
【问题描述】:
类似的问题被多次提出,但我无法找到针对我的具体问题的解决方案。
我最近在玩setuptools_scm,一开始以为这正是我需要的。我把它配置成这样:
pyproject.toml
[build-system]
requires = ["setuptools_scm"]
build-backend = "setuptools.build_meta"
[project]
...
dynamic = ["version"]
[tool.setuptools_scm]
write_to = "src/hello_python/_version.py"
version_scheme = "python-simplified-semver"
和我的 __init__.py
from ._version import __version__
from ._version import __version_tuple__
它为我涵盖的相关功能:
- 我可以使用语义版本控制
- 它能够使用 *.*.*.devN 版本字符串
- 如果是
feature-branches,它会增加次要版本 - 如果是
fix-branches,它会增加补丁/微版本
这一切都很酷。只要我在我的feature-branch 上,我就能获得正确的版本字符串。
我特别喜欢的是,开发版本字符串包含提交哈希,因此在多个分支中是唯一的。
我的工作流程现在看起来像这样:
- 创建
feature或fix分支 - 提交,(推送,)发布
- 将 PR 合并到
develop-branch
一旦我在我的 feature-branch 上,我就可以运行 python -m build,它根据找到的最新 git 标签生成一个新的 _version.py,其中包含正确的版本字符串。如果我添加新的提交,没问题,因为版本字符串的 devN 部分会因提交哈希而发生变化。我现在甚至可以运行python -m twine upload dist/*。我的包是用正确的版本构建的,所以我只是发布它。对于 fix 和 feature 分支机构,这在本地和 CI 上都非常有效。
我现在面临的问题是,对于合并的 PullRequests,我需要稍微不同的行为
一旦我合并,例如0.0.1.dev####,我不想再在feature-branch 上运行我的 Jenkins 作业,而是在develop-branch 上运行。现在重要的是,我想
- 获取
develop-branch(由 CI 完成) - 将版本字符串更新为与分支相同但没有 devN,因此:0.0.1
- 构建和发布
事实上,setuptools_scm 现在正在将版本更改为 0.0.2.dev###,我想要 0.0.1。
在运行setuptools_scm 或build 之前,我对创建 git 标签进行了一些修改,但我无法获得正确的版本字符串以放入标签中。在这一点上,我现在正在挣扎。
有没有人知道解决我的问题的解决方案?:
-
feature-branches 上的小增量 + 添加 .devN -
fix-branches 上的补丁/微增量 + 添加 .devN -
develop-branch 没有增量,版本字符串只包含合并分支的 major.minor.patch
【问题讨论】:
标签: python pip setuptools setuptools-scm