Guia rapida para dashboard de versiones en app modulares

Sebastian Cipolat
4 min readDec 13, 2021

En el mundo de las aplicaciones móviles las aplicaciones modulares son cada vez mas populares y el camino a tomar para todo proyecto que va escalar e ira mas alla de una app pequeña.

En mi caso me especializo en el desarrollo de apps Android por lo que esta guia estara orientado a esa tecnologia.

Al trabajar con modulos es muy común utilizar herramientas como maven en donde se publicaran las diversas versiones.

Es muy importante poder saber cuales son las ultimas versiones liberadas para poder estar siempre al dia. Si utilizas algunas herramienta como jfrog no sera posible utilizar el badge de version como si podríamos hacerlo con maven publico.

Para poder resolver esto se me ocurrió una solución muy simple y rapida.

Esta consiste en inlcuir a la task de nuestro CI que sube las versiones un script que actualice en un repositorio un archivo html y luego cada vez que se lo modifica se publique en gitlab pages.

Nuestro dashboard al finalizar se vera de la siguiente forma

Manos a la obra:

1- Lo primero que debemos hacer es crear un repositorio, ej. version-status

2- Podemos crear un simple archivo html con el siguiente contenido:

En este pondremos el nombre de todos los modulos y la url con el badge y su version.

Para los badges usaremos https://shields.io/ el cual nos permite generar un badge con la parametria enviada en la url

Ej: En este caso un modulo se llama player y la ver es la 4.0.1

Su apariencia sera la siguiente:

3- Debemos asegurarnos que todos los pipeline que suban versiones en el CI puedan tener acceso a este.

4- En la tarea de nuestro pipeline que genera el release del modulo debemos poder contar con las siguientes variables de entorno:

$MODULE” Nombre del modulo, esta puede estar prefija por nosotros al momento de configurar el pipeline o ser obtenida de alguna forma

“$VERSION” hace referencia a la version que acabamos de generar.

Para poder obtener la version de un .aar podemos obtenerla del manifest

ej:

En mi caso utilizo Bitrise con una imagen de Linux Ubunut quien nos proporciona un plugin que extrae esta información y las disponibiliza como variables de entorno

A este plugin debemos decirle cual es el path del AndroidManifest.xml resultante del proceso de release final:

En mi caso es:

“./$MODULE/build/intermediates/aapt_friendly_merged_manifests/release/aapt/AndroidManifest.xml”

- android-manifest-info@1.0:
inputs:
- manifest_file: "./$MODULE/build/intermediates/aapt_friendly_merged_manifests/release/aapt/AndroidManifest.xml"

Usando esta tool la variable $VERSION seria reemplazada por $AMI_VERSION_CODE

En caso de no utilizar bitrise podrás obtener esta info leyendo el archivo directamente.

Como hacerlo desde bash: https://stackoverflow.com/questions/17333755/extract-xml-value-in-bash-script

5-

Luego deberas cargar el siguiente script posterior al momento de la subida del modulo.

Explico cada linea

git clone git@gitlab.com:nx/app/version-modules.git

Clona el repositorio y descarga los archivos

cd ‘version-modules’

cambia a la carpeta clonada recientemente

Busca dentro del archivo last_version.html si existe la sección

search=”<tr><td><strong>$MODULE</strong></td>”

si nuestro modulo se llama player al momento de buscar, encontrara la primera row de la tabla

<tr><td><strong>player</strong></td>

Mediante grep busca dentro del archivo si existe una row con ese contenido en caso de existir ejecutara el comando sed buscara linea donde se encuentre la coincidencia y la reemplazara con la linea completa.

sed -i “/$MODULE/c\<tr><td><strong>$MODULE</strong></td><td style=’text-align: center;’><img src=’https://img.shields.io/badge/version-$VERSION-brightgreen'/></td></tr>" $FILE

En caso de no encontrar la linea en el archivo la agregara, por lo que el script permitira que nuevos modulos puedan irse incorporando sin necesidad de modificar manualmente el archivo

Luego commitea y realiza un push del cambio.

6-

Agregar Gitlab Page

Nuestro repositorio necesitara tener activado esta feature.

Cada vez que se pushe un archivo queremos que se actualice la Gitlab Page por lo que crearemos el archivo gitlab-ci.yml

pages:
stage: deploy
script:
- mkdir .public
- cp -r * .public
- mv .public public
artifacts:
paths:
- public
only:
- main

Veremos que corre el pipeline cada vez que se corre el script.

Ahora solo deberias acceder a tu gitlab page, para ver la url debers ir a

Settings->Pages

En mi caso es https://scipolat.gitlab.io/last-version-badges

per la url completa seria:

https://scipolat.gitlab.io/last-version-badges/last_version.html

Si deseas modificar la privacidad de la gitlab page puedes hacerlo en

Settings->General

Espero que este contenido te haya sido util.

Hasta la proxima!

Sebastian

--

--