Увеличьте номер версии, если Travis в github был успешным
Я написал простой простой script в Python.
Теперь мне бы хотелось, чтобы travis проверил мой код. После того, как travis был успешным, номер версии должен быть увеличен.
До сих пор у моего script пока нет номера версии. Я могу хранить его везде, где это имеет смысл для рабочего процесса с автоматическим приращением.
Как это сделать для кода Python?
Update
Теперь он работает:
- запустить тесты
- bumpversion
- push-тег для мастеринга
К сожалению, travis не поддерживает "after-all". Это означает, что если я хочу запустить тесты для нескольких версий Python, у меня нет возможности для bumpversion после успешной проверки всех версий python.
В моем случае я проверю Python2.7 только до тех пор, пока travis не разрешит эту проблему: https://github.com/travis-ci/travis-ci/issues/929
Вот мой простой script: https://github.com/guettli/compare-with-remote
Решено: -)
Теперь он работает:
- Разработчик нажимает на github
- Travis-CI запускает
- Если все тесты успешны, bumpversion увеличивает версию
- Новая версия в setup.py переместится в репозиторий github
- Новая версия пакета python загружается на pypi с помощью инструмента
twine
.
Я объясняю, как я делаю CI с github, travis и pypi здесь: https://github.com/guettli/github-travis-bumpversion-pypi
Ответы
Ответ 1
Если вы принимаете дополнительную фиксацию для вашего управления версиями, вы можете добавить этот script в 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
работать, так как ей нужно какое-то тестирование с правами репо, но я предполагаю, что вы, вероятно, можете настроить что-то, что позволит тревистам входить в ваше репо. вы можете посмотреть, например, 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] в сообщение фиксации, чтобы избежать бесконечного приращения. Возможно, было бы безопаснее инициировать изменение версии определенного тега msg. Commit.
Ответ 2
Не зависит от Python, но этот учебник объясняет автоматически увеличивающиеся номера версий, добавляя .travis.yaml
записи, которые обновляют теги git с каждым успешная сборка. Это похоже на хороший баланс между ручным и автоматическим версированием.
В то время как в руководстве используется npm package.json
для начальной проверки версии, вы можете реализовать простой эквивалент (в Python или иначе).
Ответ 3
Предполагая, что
- только фиксирует успешные сборки Travis CI, которые объединяются в главную ветвь (например, используя запросы Pull)
-
пакет всегда устанавливается с помощью pip из репо git, используя, например,
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), ...)