En Sardine iteramos rápidamente al desarrollar nuevas funcionalidades. A medida que nuestro equipo crece, es fundamental para nosotros mantener informados a los distintos grupos de interés, incluidos los gestores de cuentas, los responsables de integraciones y el soporte técnico. Además, por motivos de cumplimiento y seguridad, es crucial para nosotros contar con un registro escrito de cambios y un historial de aprobaciones de cada despliegue.
En esta entrada de blog, explicamos cómo implementamos un script para automatizar la generación de notas de lanzamiento.
Usamos GitHub como repositorio de código, Asana para el seguimiento de tareas y Slack para la comunicación. Nuestro script de publicación extrae automáticamente información de GitHub y Asana, y luego publica la información en Slack.

Obtener información de la versión
El primer paso del script es obtener las versiones de lanzamiento desde el servidor remoto. Como siempre desplegamos en el entorno sandbox antes del despliegue a producción mediante CD, podemos obtener fácilmente la versión que queremos lanzar (la que está en sandbox) y la última versión que desplegamos (la que está en producción).
def obtener_version():url = "https://api.sandbox.sardine.ai/healthz"res = requests.get(url)return res.headers['X-Version-Id']
Obtener información sobre los cambios
Usando la versión de la release (SHA del commit de git) del paso anterior, ahora podemos obtener todos los PR relevantes y la lista de tareas de Asana relacionadas. Pedimos a todos los desarrolladores que incluyan un enlace a la tarea de Asana en las descripciones de los PR, para que podamos obtener la lista de tareas de Asana desde GitHub. Para este paso, el script primero obtiene la lista de commits mediante el comando “git log” y luego llamamos a la API de GitHub. Una versión anterior de este script usaba GH CLI, pero hemos migrado a las API REST porque la CLI no admite tokens de acceso de granularidad fina.
def get_all_prs(repo, anterior, version_lanzamiento): resultado = subprocess.getstatusoutput(f"git log --pretty=format:'%h - %an, %ar : %s' {anterior}..{version_lanzamiento}") numeros_pr = re.findall("#([0-9]+)", resultado[1]) numeros_pr = list(map(int, numeros_pr)) github_pat = os.getenv('GITHUB_PAT', None) url = 'https://api.github.com/repos/sardine-ai/' + repo + '/pulls?state=closed&direction=desc&per_page=100' prs = [] # obtener 500 PRs for page in range(1, 6): prs += requests.get( url + "&page=" + str(page), headers={"Authorization":"Bearer " + github_pat} ).json() return list(filter(lambda pr: pr['number'] in numeros_pr, prs))
Generar ticket de despliegue
Ahora tenemos toda la información relevante, así que podemos crear un ticket de aprobación de despliegue que incluya todos los cambios relacionados. Algo que hemos encontrado útil es pedir a todo el mundo que siga conventional commit (poner prefijos como “fix”, “feat”). De ese modo, el script puede clasificar automáticamente los cambios en nuevas funcionalidades, correcciones de errores, etc.

Notificaciones de Slack
Cuando se genera el ticket de aprobación de despliegue, se publica automáticamente en Slack para las solicitudes de aprobación. Nuestro script de despliegue también notifica cuando el despliegue se completa, de modo que las partes interesadas puedan seguir fácilmente lo que está planificado para desplegar y lo que se está desplegando.

Convertir las notas de versión generadas automáticamente en notas de versión públicas
Por último, aunque las notas de versión automatizadas ofrecen un beneficio inmediato a los interesados internos semitécnicos, como los gestores de producto, no son fáciles de consumir externamente. Nuestros excelentes gestores de producto convierten estas notas en atractivas notas de versión orientadas al público externo.
También publicamos nuestro script aquí para que no tengas que reinventar la rueda. ¡Automatiza todo y concéntrate en crear cosas interesantes!

