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

Python 如果github上的Travis成功,则增加版本号,python,github,versioning,travis-ci,Python,Github,Versioning,Travis Ci,我用Python写了一篇简单的文章 现在我想让特拉维斯检查我的密码。travis成功后,版本号应该增加 到目前为止,我的脚本还没有版本号。我可以将其存储在对自动增量工作流有意义的任何地方 如何对Python代码执行此操作 更新 它现在可以工作了: 运行测试 颠簸 把标签推到主机上 不幸的是,特拉维斯不支持“毕竟”。这意味着,如果我想运行多个Python版本的测试,那么在所有Python版本的测试都成功之后,我就没有办法升级这个版本 在我的情况下,我将检查Python2.7,直到travis解决此

我用Python写了一篇简单的文章

现在我想让特拉维斯检查我的密码。travis成功后,版本号应该增加

到目前为止,我的脚本还没有版本号。我可以将其存储在对自动增量工作流有意义的任何地方

如何对Python代码执行此操作

更新 它现在可以工作了:

  • 运行测试
  • 颠簸
  • 把标签推到主机上
  • 不幸的是,特拉维斯不支持“毕竟”。这意味着,如果我想运行多个Python版本的测试,那么在所有Python版本的测试都成功之后,我就没有办法升级这个版本

    在我的情况下,我将检查Python2.7,直到travis解决此问题:

    以下是我的简单脚本:

    已解决:-) 它现在可以工作了:

  • 开发人员推送到github
  • 特拉维斯·西
  • 如果所有测试都成功,则版本会增加版本
  • setup.py get中的新版本已推送到github repo
  • python包的新版本将通过工具
    twine
    上传到pypi
  • 我在这里解释了我使用github、travis和pypi执行CI的方式:

    不是特定于Python的,而是通过添加
    .travis.yaml
    条目来解释自动递增的版本号,这些条目在每次成功构建时都会更新git标记。这似乎是手动版本控制和自动版本控制之间的良好平衡

    虽然本教程使用npm的
    package.json
    进行初始版本检查,但您可以实现一个简单的等价物(用Python或其他语言)

    • 只有Travis CI构建成功的提交才能合并到主分支中(例如,使用拉请求)
    • 该软件包始终与来自git repo的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\u integration/increment\u 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推进您的回购。例如,你可以调查一下

    还请注意,我使用了
    python
    来执行
    git
    操作,但它们可以作为额外的行添加到
    成功后
    字段中:

    after_success:
      - python continuous_integration/increment_version.py
      - git add -u
      - git commit -m "[ci skip] version changed"
      - git push
    
    我只是觉得把版本号放在commit消息中比较方便


    此外,添加提交消息以避免无限增量也是非常重要的。也许在特定的commit msg标记上触发版本更改会更安全。

    在我的情况下,主分支用于开发。它可能包含bug。谢谢你的提示“无限增量”。travis是否查看提交消息并检测到“ci跳过”?是的,travis默认检测到[skip ci]标记。