Versión automatizada de revisión con versión semántica basada en la twig maestra

Tengo un script de Python que vive en mi canalización de CI que es responsable de publicar twigs y tags, publicar AAR en nuestro Maven Artifactory, cargar Javadoc, etc.

Solíamos seguir una versión modificada de Git Flow donde publicaríamos fuera de una twig de "soporte /" (para soporte a largo ploop de una versión de producto menor, como 'soporte / 5.10') o una twig de 'lanzamiento /' ( para la testing de regresión de lanzamiento.

Mi script se basó en gran medida en el nombre de la sucursal de Git para determinar los baches de versión mayor / menor / parche.

Ahora, estamos abandonando las twigs de soporte y avanzando hacia un flujo de trabajo Git Flow más vanguardista en el que haremos HotFixes únicamente fuera de Master (bueno, todavía tendremos sucursales de lanzamiento, pero ese problema está resuelto …)

Sin embargo, no puedo encontrar una manera de determinar con security la versión del parche de la twig Master, ya que obviamente no tiene características de identificación en su nombre que podamos eliminar (siempre me sentí un poco incómodo con el método que estamos usando, pero … funcionó).

Puedo acceder a las tags y siempre toco la más alta, pero eso es incompleto.

Puedo ingresar una versión de destino, pero eso se interpone en el path de CI y nos obligaría a ejecutar este script manualmente.

¿Alguna otra idea sobre cómo abordar esto? ¿Alguien ya ha resuelto este problema?

Personalmente, tiendo a seguir el estándar pypi para representar versiones. Coloque un file setup.py en la raíz de su repository que contiene la información de la versión, junto con las instrucciones para que funcione con pypi .

Por ejemplo:

 import os from setuptools import setup # Utility function to read the README file. # Used for the long_description. It's nice, because now 1) we have a top level # README file and 2) it's easier to type in the README file than to put a raw # string in below ... def read(fname): return open(os.path.join(os.path.dirname(__file__), fname)).read() setup( name = "an_example_pypi_project", version = "0.0.4", author = "Andrew Carter", author_email = "andrewjcarter@gmail.com", description = ("An demonstration of how to create, document, and publish " "to the cheese shop a5 pypi.org."), license = "BSD", keywords = "example documentation tutorial", url = "http://packages.python.org/an_example_pypi_project", packages=['an_example_pypi_project', 'tests'], long_description=read('README'), classifiers=[ "Development Status :: 3 - Alpha", "Topic :: Utilities", "License :: OSI Approved :: BSD License", ], ) 

Por supuesto, no necesita adherirse a esto exactamente si no está usando pypi. La conclusión es que debe representar la versión en un file que pueda leerse y manejarse fácilmente.