Escribí un script simple en Python.
Ahora me gustaría que travis revise mi código. Después de que travis tuvo éxito, el número de versión debería aumentar.
Hasta ahora, mi script aún no tiene un número de versión. Puedo almacenarlo en cualquier lugar donde tenga sentido para el flujo de trabajo de incremento automático.
¿Cómo hacer esto para el código de Python?
Ahora funciona:
Desafortunadamente, travis no admite "después de todo". Esto significa que si quiero ejecutar las pruebas para varias versiones de Python, no tengo forma de cambiar la versión después de que las pruebas de todas las versiones de Python hayan sido exitosas.
En mi caso, revisaré Python2.7 solo hasta que Travis resuelva este problema: https://github.com/travis-ci/travis-ci/issues/929
Aquí está mi script simple: https://github.com/guettli/compare-with-remote
Ahora funciona:
twine
.Explico la forma en que hago CI con github, travis y pypi aquí: https://github.com/guettli/github-travis-bumpversion-pypi
Si acepta tener un compromiso adicional para su control de versiones, puede agregar este script en 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")
Y cambia tu .travis.yml
a
after_success: - python continuous_integration/increment_version.py
No estoy seguro de cómo hacer que la parte de git push
funcione, ya que necesita algunas pruebas con los derechos de repositorio, pero supongo que probablemente podría configurar algo para permitir que travis empuje su repositorio. Podrías mirar esa publicación , por ejemplo.
También tenga en cuenta que usé python
para realizar las operaciones de git
, pero se pueden agregar como una línea adicional en el campo after_success
:
after_success: - python continuous_integration/increment_version.py - git add -u - git commit -m "[ci skip] version changed" - git push
Me parece conveniente poner el número de versión en el mensaje de confirmación.
Además, es muy importante agregar [ci skip] en el mensaje de confirmación para evitar un incremento infinito. Tal vez sería más seguro activar el cambio de versión en una etiqueta de mensaje de confirmación específica.
No es específico de Python, pero este tutorial explica los números de versión de incremento automático agregando entradas .travis.yaml
que actualizan las etiquetas de git con cada compilación exitosa. Parece un buen equilibrio entre el control de versiones manual y automático.
Si bien el tutorial usa el package.json
de npm para la verificación de la versión inicial, podría implementar un equivalente simple (en Python o de otro modo).
Asumiendo que,
el paquete siempre se instala con pip desde un repositorio git usando, por ejemplo,
pip install git+https://github.com/user/package.git
Para el número de versión de incremento automático, uno podría simplemente definir la versión como el número de confirmaciones en la rama maestra. Esto se puede hacer con las siguientes líneas en setup.py ,
minor_version = check_output(['git', 'rev-list', '--count', 'master']).decode('latin-1').strip() setup(version='0.{}'.format(minor_version), ...)