Desarrollando una "version tag" basada en git y renderizada a través de un componente de Blade - Parte III > Blog | Josep Salvà - Desarrollo Web

La palabra de Wifft

Bienvenidos a la tercera y última parte de esta serie de blogposts referentes a cómo construir una "version tag" automatizada mediante git y renderizada a través de un componente de Blade. Tal y como mencionamos en el capítulo anterior, veremos como obtener el hash del commit actual y como convertimos y asignamos su timestamp en formato de fecha.

Empecemos por la obtención del hash. Para ello llamamos al método estático getHash() definido dentro del propio objeto.

/**
  * Gets the hash of the last commit.
  */
private function getHash() : string
{
    return trim(file_get_contents($this->branchPath));
}

Dicho método lee el contenido del fichero correspondiente a la rama activa actual haciendo uso del método nativo de PHP file_get_contents(), y como dicho fichero únicamente contiene el hash... pues no se requieren de acciones adicionales (más allá de asegurarnos de eliminar posibles espacios en blanco mediante trim()).

Procedamos ahora a inspeccionar el método setBuildDate(int $timestamp), encargado de proporcionar formato al timestamp del commit actual y asignarlo a la propiedad $buildDate, que contiene la fecha.

Simplemente lo parseamos haciendo uso de la librería Carbon (incluída en el framework Laravel) y le asignamos el formato deseado, en nuestro caso ymd-His.

/**
  * Sets the the last commit date and time.
  */
private function setBuildDate(int $timestamp) : void
{
    $this->buildDate = Carbon::parse($timestamp)->format('ymd-His');
}

Ahora, una vez que ya tenemos todas las propiedades de nuestro constructor asignadas, podemos proceder a construir la vista del componente de Blade con la información.

<span class="float-right">
    Versión {{ "$versionNumber.$buildNumber#$hash@$branch.$buildDate" }}
</span>

Qué invocamos mediante:

@if (env('APP_DEBUG')
    <x-version-label/>
@endif

Y cuyo resultado final es:

Clipboard - 1 de diciembre de 2021 10_13.png

[BONUS]: El segmento de la imagen anterior correspondiente a la fecha, da una idea del tiempo que hace que tuve que realizar este desarrollo :D