Skip to main content

Simplifica las actualizaciones de dependencias con Mergify y Snyk

Escrito por
blog feature snyk container custom base recommendations

23 de agosto de 2023

0 minutos de lectura

Administrar las dependencias de un proyecto requiere esfuerzo y atención constantes. Seguramente, al mantener un proyecto, te has preocupado por alguno de estos aspectos:

  • Una dependencia tiene nuevas versiones que incluyen una función o corrigen un error.

  • Una dependencia tiene vulnerabilidades de seguridad y publica correcciones en versiones más recientes.

  • Mantener las versiones de las dependencias al día para evitar código obsoleto.

Por suerte, hemos podido automatizar en cierta medida la administración de dependencias con bots de GitHub y soluciones como Dependabot y GreenKeeper.

Sin embargo, estos bots suelen automatizar únicamente la creación de un nuevo pull request con los cambios propuestos. Combinar cada uno sigue siendo un proceso manual que requiere mucha atención para evitar combinar un pull request que interrumpa la integración continua (CI).

¿Qué es mejor que automatizar las actualizaciones de dependencias? Combinar los cambios de forma automática.

¿Qué es Mergify?

Mergify es una herramienta potente e innovadora que automatiza tus flujos de trabajo de GitHub, para que puedas dedicar más tiempo a crear software excelente y menos a las tediosas tareas administrativas. En esencia, Mergify es un servicio de automatización de pull requests que te ayuda a crear flujos de trabajo personalizados según las condiciones que definas. Entre otras cosas, puede combinar, cerrar, comentar, revisar, etiquetar, reenviar, trasladar cambios a versiones anteriores y reorganizar pull requests de forma automática.

Una vez configurado, Mergify se encarga de algunas de las tareas más tediosas de la revisión de código y la administración de proyectos. Ayuda a mantener tu repositorio en buen estado, garantiza que la rama master siga en verde y reduce el tiempo que se pierde en procesos manuales que podrían automatizarse.

En la siguiente sección, te mostraremos cómo aprovechar Mergify para que las actualizaciones de dependencias dejen de ser una pesadilla y se conviertan en una experiencia ideal.

Acerca de los pull requests de actualización de dependencias de Snyk

¿Quieres mantenerte al día con las correcciones de vulnerabilidades y las dependencias obsoletas? Para eso está Snyk.

Snyk es una plataforma de seguridad diseñada para desarrolladores que les permite hacerse cargo de la seguridad de sus aplicaciones. Aunque Snyk es conocida por sus funciones de análisis de vulnerabilidades, también ofrece una experiencia sencilla para administrar las actualizaciones de dependencias, en particular mediante pull requests automatizados.

¿Cómo funcionan los pull requests de actualización de dependencias de Snyk? Snyk revisa periódicamente todas las dependencias de tus proyectos para buscar actualizaciones disponibles. Cuando identifica una versión más reciente, crea un pull request directamente en tu repositorio de GitHub con los cambios necesarios para actualizarla. Este pull request incluye información completa sobre la actualización, como el historial de cambios de la dependencia y la fecha de publicación de la última versión, para que puedas revisarlo a fondo antes de combinar los cambios.

Upgrading dependencies with automatic PRs from Snyk.

Primeros pasos

Para comenzar, solo tienes que seguir unos pasos sencillos:

  1. Elige uno de tus repositorios de código de GitHub para instalar el flujo de trabajo automatizado de actualización y combinación de dependencias.

  2. Crea una cuenta de Mergify e invita a la aplicación de GitHub de Merigy a tu repositorio.

  3. Crea una cuenta de Snyk y conecta tu repositorio de GitHub.

Habilita las actualizaciones automáticas de dependencias con Snyk

Abre la aplicación de Snyk, continúa con el registro si es necesario y conecta el repositorio que quieres automatizar importándolo desde GitHub. Ve a la página Projects en la interfaz de Snyk, selecciona Add projects, elige los repositorios de código que quieres importar a Snyk y haz clic en Add selected repositories.

Import GitHub repositories to Snyk.

Cuando el proyecto se haya importado correctamente, habilita los pull requests de actualización de dependencias de Snyk. Para ello, selecciona Settings, luego Integrations y, por último, GitHub:

GitHub integrations menu in the Snyk app UI.

Luego, desplázate hacia abajo hasta encontrar la sección de configuración Automatic dependency upgrade PRs y activa la función:

Configure automatic fix pull request policies with Snyk.

Ahora que el bot de Snyk abre automáticamente pull requests para actualizar las dependencias del proyecto, iremos a la configuración de Mergify para automatizar la combinación de esos pull requests.

Crea una política de combinación automática en Mergify

Conéctate a Mergify con tu cuenta de GitHub, de forma similar a como lo hiciste con Snyk. A continuación, agregaremos repositorios para administrarlos con Mergify.

Para editar los repositorios de Git que quieres administrar con Mergify, se te redirigirá a la página de aplicaciones de GitHub, donde podrás elegirlos en el menú desplegable:

GitHub Mergify permissions screen highlighting “Only select repositories” and the “Select repositories” button.

Cuando termines de seleccionar los repositorios a los que quieres agregar Mergify, haz clic en el botón Save.

A continuación, tenemos que configurar la política de combinación del proyecto. Configuramos las reglas de combinación en el archivo .mergify.yml, ubicado en la raíz del repositorio. Consejo: también puedes guardar el archivo en el directorio .github/ junto con otros flujos de trabajo y configuraciones relacionados con CI.

El archivo de configuración YAML de Mergify consta de estos elementos:

  • Colas de combinación: una cola en la que los pull requests se agregan como elementos pendientes para combinarse, uno por uno, en tu rama principal, sin generar conflictos de combinación ni cambios que interrumpan el funcionamiento.

  • Reglas para pull requests: como su nombre indica, son un conjunto de condiciones que se validan en los pull requests para luego tomar medidas, como agregarlos a una cola de combinación.

Este es un ejemplo sencillo:

pull_request_rules:
  - name: automatic merge on approval
    conditions:
      - "#approved-reviews-by>=1"
    actions:
      merge:
        method: merge

La configuración anterior combinará el pull request si se cumple la condición de que al menos una persona revisora lo apruebe. 

Sin Mergify, es posible que una persona revisora aprobara rápidamente el cambio que introduce el pull request, pero tendría que esperar a que pasaran todas las verificaciones de CI o a que quien creó el pull request confirmara que la revisión aprobada estaba lista para combinarse. La combinación es una acción manual.

Con las condiciones anteriores y Mergify, el pull request se combinará automáticamente en la rama principal cuando se apruebe la revisión.

Combina automáticamente los pull requests de actualización de Snyk

Agreguemos la misma automatización a los pull requests de Snyk que actualizan dependencias. El archivo de configuración de Mergify quedaría así:

queue_rules:
  - name: Snyk PRs Queue
    conditions:
      - "check-success ~= .*"

pull_request_rules:
  - name: Automatic merge Snyk PRs on Status Checks passing
    conditions:
      - title~=^\[Snyk\]
      - head~=^snyk-fix
      - base=main
    actions:
      queue:
        name: "Snyk PRs Queue"
      label:
        add:
          - "auto-merge"

Veamos cada parte para entender qué sucede:

  • Se crea una cola de combinación llamada Snyk PRs Queue, en la que los pull requests solo se combinarán cuando se cumpla la condición de que hayan pasado todas las verificaciones de estado de CI. Así nos aseguramos de que las pruebas y demás procesos automatizados de CI finalicen correctamente y de que las versiones actualizadas de las dependencias no introduzcan cambios incompatibles (según lo que puedan detectar nuestras pruebas).

  • Para agregar los pull requests a Snyk PRs Queue, deben cumplir estas condiciones:

    • El título del pull request comienza con [Snyk]. 

    • El nombre de la rama de origen del pull request comienza con snyk-fix.

    • El nombre de la rama de destino (a la que se combina el pull request) es main.

Si se cumplen las condiciones anteriores, agregamos al pull request la etiqueta de GitHub «auto-merge» y lo enviamos a Snyk PRs Queue.

Confirmemos el nuevo archivo de configuración de Mergify en el repositorio y veamos cómo ocurre la magia cuando Snyk crea un nuevo pull request:

A Snyk dependency upgrade pull request gets matched with a Mergify CI check integration that shows a rule condition matching and automatically gets merged when the CI tests finish running.

Consejo: usa las políticas de actualización de dependencias de Snyk para reducir el ruido

La automatización de los pull requests de dependencias puede abrumar rápidamente a tu equipo por su gran volumen. Es fundamental encontrar un equilibrio para que las actualizaciones no entorpezcan el flujo de trabajo del equipo. Para eso sirven las políticas de actualización de dependencias de Snyk.

1. Limita la cantidad de pull requests de actualización abiertos al mismo tiempo: Snyk te permite controlar el volumen de pull requests limitando cuántos pull requests de actualización automatizados pueden estar abiertos a la vez. Así, tu equipo no se verá inundado de solicitudes de actualización y podrá concentrarse en las tareas de desarrollo más importantes.

2. Elige qué paquetes quieres excluir de las actualizaciones: No todos los paquetes necesitan ni justifican actualizaciones frecuentes. A veces, actualizar siempre a la versión más reciente puede romper tu código o dejarlo inestable. En esos casos, Snyk te permite excluir paquetes específicos de las actualizaciones automáticas. Así, tienes el control de cuándo actualizar las dependencias y puedes centrarte en los paquetes más importantes para tu proyecto.

3. Limita el alcance de los cambios y actualiza solo versiones menores y de parche: Actualizar a versiones principales puede causar más problemas de los que resuelve, ya que a menudo requiere cambios adicionales en el código debido a cambios incompatibles. Con Snyk, puedes automatizar únicamente las actualizaciones a versiones menores y de parche. Así, tu aplicación mantiene su estabilidad y aprovecha las mejoras compatibles y las correcciones de seguridad.

Implementar estas tres políticas ayudará a reducir el ruido de las actualizaciones de dependencias, facilitará que tu equipo de desarrollo tenga controladas las actualizaciones importantes y evitará que el código se vuelva caótico. Recuerda: el objetivo de las actualizaciones automatizadas es quitarte la carga de hacerlas manualmente, no trasladarla a otra parte. Aprovecha las potentes funciones de Snyk para mantener un flujo de trabajo de CI ágil y ordenado, sin distracciones innecesarias.

Automatiza y olvídate

Combinar automáticamente las actualizaciones de dependencias puede aumentar la velocidad y la productividad de tu equipo. Además, es una gran oportunidad para automatizar.

Con los pull requests de actualización de dependencias de Snyk, ya no tienes que rastrear y revisar manualmente si hay actualizaciones. Dile adiós al exceso de actualizaciones de dependencias y dale la bienvenida a un proceso de actualización más ágil, seguro y sencillo. Mergify y Snyk, en conjunto, pueden llevar tu flujo de trabajo al siguiente nivel.

Empieza con los desafíos de captura la bandera

Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.