Cuantas veces quisiste mantener tu código ordenado en versiones y que se actualice con tu repositorio de Git? Bueno, en esta guía te enseño como obtener los datos de git para imprimir la versión de nuestra aplicación en Laravel.

Como Funciona el Versionado

No me voy a detener a explicar todos los tipos de versionados que se manejan en programación pero una de las maneras de Versionar nuestra aplicación de Laravel es atreves de un versionado semántico. En esta manera de mantener el código versionado vamos a tener 3 valores obligatorios en nuestra aplicación.

  • Mayor: En Mayor va la versión de nuestra aplicación. Este numero cambia cuando hacemos un cambio grande y deja de ser incompatible con versiones anteriores (Ejemplo: v1.0.0 a v2.0.0)
  • Menor: Acá van las actualizaciones que son retro compatibles. Los cambios menores que se pueden intercambiar. (Ejemplo: v1.1.0 a v1.2.0)
  • Parche: En Parche van todos los arreglos de bug que debemos realizar de urgencia o planificados. Son cambios menores que no influyen en el versionado. (Ejemplo: v1.1.0 a v1.1.25)

Ahora Git, agrega varios campos más como el numero de Commit y un Meta Data del Build para mantener mas ordenado los cambios que se realizan en el repositorio git de nuestro proyecto en Laravel.

Agregar Versionado en Laravel

Para Agregar el Versionado de Laravel, necesitamos como requisito tener instalado Git en nuestro proyecto. Si no lo tenés instalado, te dejo el link oficial para su descarga Git (git-scm.com). No es necesario que este en una repo remota, puede ser en Local.

Abrimos nuestro proyecto de Laravel, cualquier versión, y ejecutamos el siguiente comando para iniciar un repositorio.

git init

Agregamos todos los cambios y generamos una etiqueta. Las Etiquetas sirven para versionar nuestra aplicación.

git add *
git commit
git tag -a v1.0.0 -m "Mi Versión 1.0.0"

Cada vez que realices un cambio de versión, ya sea mayor, menor o parche es necesario que generes una etiqueta con git tag, de esta manera Laravel va a saber la versión actual de nuestro proyecto.

Instalando Paquete de Versión en Laravel

Ahora que ya tenemos configurado git en nuestro proyecto de Laravel, vamos a instalar el siguiente paquete para mantener actualizado y mostrar nuestra versión con una directiva en blade.

composer require pragmarx/version

Composer va instalar el paquete de antonioribeiro/version: Laravel App versioning (github.com). Ahora guardamos el archivo de configuración en nuestro proyecto de Laravel.

php artisan vendor:publish --provider="PragmaRX\Version\Package\ServiceProvider"

Con esto, ya tendríamos que poder ver una nueva versión actual de nuestro proyecto en 1.0.0 (Commit 1). Ahora falta que se actualice con los datos de Git, para eso abrimos el archivo config/version.yml y modificamos con los siguientes datos:

git:
  from: local
  commit:
    local: 'git rev-parse --verify HEAD'
    remote: 'git ls-remote {$repository}'
  branch: refs/heads/main #Escribir la rama de nuestro proyecto (main/master)
  repository: ''
  version:
    local: 'git describe --tags' #agregar --tags
    remote: 'git ls-remote {$repository} | grep tags/ | grep -v {} | cut -d / -f 3 | sort --version-sort | tail -1'
    matcher: '/^(?P<label>[v|V]*[er]*[sion]*)[\.|\s]*(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/'
  timestamp:
    local: 'git show -s --format=%ci'
    remote: 'git show -s --format=%ci origin/main' # agregar la rama 

Como veras los cambios que realizamos son en git: branch: el nombre de la rama al igual que en timestamp: remote: y por ultimo version: local: agregamos –tags luego de describe.

Si no agregamos –tags en local, vamos a tener el error de PragmaRX\Version\Package\Exceptions\GitTagNotFoundUnable to find git tags in this repository that matches the git.version.matcher pattern in version.yml. Asegúrate de tener –tags activado en local: !

Actualizar Version según Git en Laravel

Por ultimo, aunque parezca larga, te vas a dar cuenta que es muy corta y fácil de seguir esta guía de como obtener la versión de git en Laravel.

php artisan version:absorb

Si seguiste todos los pasos al pie de la letra, vas a obtener el mensaje:

Versión was absorbed.
Laravel v.1.0.0.1-g05bb6e3

Podes comprobar la versión actual utilizando el comando de artisan versión:

php artisan version

Mostrar Versión en Blade / Laravel

Para mostrar la versión en un footer, o un alert en nuestra aplicación de Laravel, ejecutamos la siguiente directiva:

<p>
    @version
</p>

Este campo se puede modificar desde config/version.yml en el campo full:. Listo, ya tenemos nuestro versionado actualizado con git. Cabe destacar que cada vez que realicemos un commit necesitamos ejecutar el comando php artisan version:absorb para que obtenga el nuevo valor. Si te das maña con los Hooks, podes agregarlo al post-commit en git. Pero eso lo voy a dejar para la próxima.

Copyright © 2018-2020 Latirus. Todos los Derechos Reservados.