如果 github 处的 Travis 成功,则增加版本号
Increase Version number if Travis at github was successful
我在Python中写了一个简单的script。
现在我想让 travis 检查我的代码。 travis成功后,版本号应该会增加。
到目前为止我的脚本还没有版本号。我可以将它存储在对 auto-increment 工作流程有意义的任何地方。
如何为 Python 代码执行此操作?
更新
现在有效:
- 运行 测试
- 颠簸版本
- 将标签推送到 master
遗憾的是 travis 不支持 "after-all"。这意味着如果我想 运行 测试几个 Python 版本,我无法在所有 python 版本测试成功后升级版本。
在我的例子中,我只会检查 Python2.7,直到 travis 解决了这个问题:https://github.com/travis-ci/travis-ci/issues/929
这是我的简单脚本:https://github.com/guettli/compare-with-remote
已解决:-)
现在有效:
- 开发者推送到 github
- Travis-CI运行s
- 如果所有测试都成功 bumpversion 增加版本
- setup.py 中的新版本已推送到 github 存储库
- 使用工具
twine
. 将 python 软件包的新版本上传到 pypi
我在这里解释了我使用 github、travis 和 pypi CI 的方式:https://github.com/guettli/github-travis-bumpversion-pypi
不是 Python 特定的,但 this tutorial 通过添加 .travis.yaml
条目来解释自动递增的版本号,这些条目在每次成功构建时更新 git 标签。这似乎是手动和自动版本控制之间的一个很好的平衡。
虽然本教程确实使用 npm 的 package.json
进行初始版本检查,但您可以实现一个简单的等价物(在 Python 或其他方面)。
假设,
- 仅提交成功的 Travis CI 构建被合并到 master 分支中(例如使用 Pull Requests)
软件包总是使用 git 仓库中的 pip 安装,例如,
pip install git+https://github.com/user/package.git
对于自动递增版本号,可以简单地将版本定义为主分支中的提交数。这可以通过 setup.py,
中的以下几行来完成
minor_version = check_output(['git', 'rev-list',
'--count', 'master']).decode('latin-1').strip()
setup(version='0.{}'.format(minor_version), ...)
如果您接受对版本控制进行额外提交,您可以在 continuous_integration/increment_version.py
中添加此脚本
import os
import pkg_resources
if __name__ == "__main__":
version = pkg_resources.get_distribution("compare_with_remote").version
split_version = version.split('.')
try:
split_version[-1] = str(int(split_version[-1]) + 1)
except ValueError:
# do something about the letters in the last field of version
pass
new_version = '.'.join(split_version)
os.system("sed -i \"s/version='[0-9.]\+'/version='{}'/\" setup.py"
.format(new_version))
os.system("git add -u")
os.system("git commit -m '[ci skip] Increase version to {}'"
.format(new_version))
os.system("git push")
并将您的 .travis.yml
更改为
after_success:
- python continuous_integration/increment_version.py
我不确定如何使 git push
部分工作,因为它需要使用回购权限进行一些测试,但我认为您可能可以设置一些东西以允许 travis 推送您的回购。例如,您可以查看 post。
另请注意,我使用 python
执行 git
操作,但它们可以作为额外行添加到 after_success
字段中:
after_success:
- python continuous_integration/increment_version.py
- git add -u
- git commit -m "[ci skip] version changed"
- git push
我只是觉得将版本号放在提交消息中很方便。
此外,在提交消息中添加[ci skip]非常重要,以避免无限递增。也许在特定的提交消息标记上触发版本更改会更安全。
我在Python中写了一个简单的script。
现在我想让 travis 检查我的代码。 travis成功后,版本号应该会增加。
到目前为止我的脚本还没有版本号。我可以将它存储在对 auto-increment 工作流程有意义的任何地方。
如何为 Python 代码执行此操作?
更新
现在有效:
- 运行 测试
- 颠簸版本
- 将标签推送到 master
遗憾的是 travis 不支持 "after-all"。这意味着如果我想 运行 测试几个 Python 版本,我无法在所有 python 版本测试成功后升级版本。
在我的例子中,我只会检查 Python2.7,直到 travis 解决了这个问题:https://github.com/travis-ci/travis-ci/issues/929
这是我的简单脚本:https://github.com/guettli/compare-with-remote
已解决:-)
现在有效:
- 开发者推送到 github
- Travis-CI运行s
- 如果所有测试都成功 bumpversion 增加版本
- setup.py 中的新版本已推送到 github 存储库
- 使用工具
twine
. 将 python 软件包的新版本上传到 pypi
我在这里解释了我使用 github、travis 和 pypi CI 的方式:https://github.com/guettli/github-travis-bumpversion-pypi
不是 Python 特定的,但 this tutorial 通过添加 .travis.yaml
条目来解释自动递增的版本号,这些条目在每次成功构建时更新 git 标签。这似乎是手动和自动版本控制之间的一个很好的平衡。
虽然本教程确实使用 npm 的 package.json
进行初始版本检查,但您可以实现一个简单的等价物(在 Python 或其他方面)。
假设,
- 仅提交成功的 Travis CI 构建被合并到 master 分支中(例如使用 Pull Requests)
软件包总是使用 git 仓库中的 pip 安装,例如,
pip install git+https://github.com/user/package.git
对于自动递增版本号,可以简单地将版本定义为主分支中的提交数。这可以通过 setup.py,
中的以下几行来完成minor_version = check_output(['git', 'rev-list',
'--count', 'master']).decode('latin-1').strip()
setup(version='0.{}'.format(minor_version), ...)
如果您接受对版本控制进行额外提交,您可以在 continuous_integration/increment_version.py
import os
import pkg_resources
if __name__ == "__main__":
version = pkg_resources.get_distribution("compare_with_remote").version
split_version = version.split('.')
try:
split_version[-1] = str(int(split_version[-1]) + 1)
except ValueError:
# do something about the letters in the last field of version
pass
new_version = '.'.join(split_version)
os.system("sed -i \"s/version='[0-9.]\+'/version='{}'/\" setup.py"
.format(new_version))
os.system("git add -u")
os.system("git commit -m '[ci skip] Increase version to {}'"
.format(new_version))
os.system("git push")
并将您的 .travis.yml
更改为
after_success:
- python continuous_integration/increment_version.py
我不确定如何使 git push
部分工作,因为它需要使用回购权限进行一些测试,但我认为您可能可以设置一些东西以允许 travis 推送您的回购。例如,您可以查看 post。
另请注意,我使用 python
执行 git
操作,但它们可以作为额外行添加到 after_success
字段中:
after_success:
- python continuous_integration/increment_version.py
- git add -u
- git commit -m "[ci skip] version changed"
- git push
我只是觉得将版本号放在提交消息中很方便。
此外,在提交消息中添加[ci skip]非常重要,以避免无限递增。也许在特定的提交消息标记上触发版本更改会更安全。