如果 github 处的 Travis 成功,则增加版本号

Increase Version number if Travis at github was successful

我在Python中写了一个简单的script

现在我想让 travis 检查我的代码。 travis成功后,版本号应该会增加。

到目前为止我的脚本还没有版本号。我可以将它存储在对 auto-increment 工作流程有意义的任何地方。

如何为 Python 代码执行此操作?

更新

现在有效:

  1. 运行 测试
  2. 颠簸版本
  3. 将标签推送到 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

已解决:-)

现在有效:

  1. 开发者推送到 github
  2. Travis-CI运行s
  3. 如果所有测试都成功 bumpversion 增加版本
  4. setup.py 中的新版本已推送到 github 存储库
  5. 使用工具 twine.
  6. 将 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]非常重要,以避免无限递增。也许在特定的提交消息标记上触发版本更改会更安全。