Cómo mantener tus dependencias al día

Cuando programamos en PHP/JS y utilizamos librerías como composer o npm, que son fundamentales en nuestro trabajo. Tenerlas actualizadas es fundamental por motivos de seguridad principalmente. Esto hace que nuestra programación sea más segura y aunque dependa de terceros, también esté actualizada.

¿Qué es dependabot?

Dependabot es una herramienta integrada en GitHub que ayuda a gestionar y mantener las dependencias de un proyecto de software de manera automática. Se encarga de revisar regularmente los archivos de configuración de dependencias, como los archivos package.json en proyectos de Node.js, composer.json para PHP, pom.xml en proyectos Java, Gemfile para Ruby, entre otros. Dependabot detecta si alguna de las dependencias está desactualizada o tiene vulnerabilidades de seguridad, y puede generar automáticamente pull requests (PRs) para actualizar esas dependencias.

Los Pull request nos permiten revisar el código propuesto de mejora y aprobarlo.

Características principales de Dependabot:

  1. Actualización de Dependencias: Dependabot revisa periódicamente las dependencias del proyecto y genera PRs automáticas con sugerencias para actualizar versiones que hayan cambiado. Esto nos permite mantener las bibliotecas y herramientas del proyecto actualizadas sin tener que hacerlo manualmente.
  2. Parcheo de Vulnerabilidades de Seguridad: GitHub, a través de su base de datos de vulnerabilidades, notifica a Dependabot cuando detecta una vulnerabilidad en alguna dependencia. Dependabot puede entonces generar una PR para actualizar esa dependencia a una versión segura.
  3. Configuración Flexible: Tenemos un archivo de configuración de cómo y cuándo se ejecuta Dependabot. Se pueden definir los intervalos de tiempo (diario, semanal, etc.), qué archivos debe monitorizar, y si debe crear PRs automáticas o simplemente notificar sobre actualizaciones.
  4. Integración con el flujo de trabajo de GitHub: Las PRs creadas por Dependabot se integran con los flujos de trabajo de CI/CD existentes. Por ejemplo, las actualizaciones pueden ser probadas automáticamente mediante pruebas unitarias y otros mecanismos que ya tenga configurado el proyecto.
  5. Compatibilidad con múltiples lenguajes: Dependabot es compatible con una amplia gama de lenguajes y gestores de dependencias, como Node.js, Python, Java, Ruby, PHP, Go, y más.

Flujo de trabajo típico de Dependabot:

  1. Dependabot escanea regularmente el archivo de dependencias del proyecto.
  2. Cuando encuentra una versión nueva de una dependencia (o si detecta una vulnerabilidad de seguridad), crea una PR automática con la actualización correspondiente.
  3. Tenemos que revisar el PR, ver los cambios propuestos y decidir si aceptar la actualización.
  4. Si se acepta la PR, se integra al proyecto y las dependencias se actualizan.

En resumen, Dependabot es una herramienta muy útil para mantener las dependencias de un proyecto actualizadas, reducir el riesgo de vulnerabilidades de seguridad, y minimizar el trabajo manual relacionado con la gestión de dependencias en proyectos de software.

¿Cómo implementarlo?

Partiendo de que estás desarrollando un plugin para WordPress o también te puede valer para PHP, te incluyo el archivo de configuración que utilizo en mis repositorios.

La configuración de este dependabot está basado en el Plugin Check Plugin de WordPress, que te recomiendo bastante, y que le he añadido un ajuste que me sirve bastante en mi flujo de trabajo. Por tanto, mi dependabot hace:

  • Revisa las dependencias de acciones de github, npm y composer.
  • Lo revisa cada semana.
  • Tiene un límite de 10 PR.
  • EL PR se realiza sobre la rama «develop» que es la que utilizo normalmente.

Para ponerlo en marcha, sólo será necesario crear este archivo en la rama por defecto que tengas en GitHub, como trunk, main, o master.

.github/dependabot.yml

Con el siguiente contenido:

version: 2
updates:
    - package-ecosystem: github-actions
      directory: '/'
      schedule:
          interval: weekly
      open-pull-requests-limit: 10
      target-branch: "develop"

    - package-ecosystem: npm
      directory: '/'
      schedule:
          interval: weekly
      open-pull-requests-limit: 10
      target-branch: "develop"

    - package-ecosystem: composer
      directory: '/'
      schedule:
          interval: weekly
      open-pull-requests-limit: 10
      target-branch: "develop"

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

ÚLTIMOS ARTÍCULOS

Cierre Ventana

Cómo mantener tus dependencias al día

Cuando programamos en PHP/JS y utilizamos librerías como composer o npm, que son fundamentales en nuestro trabajo. Tenerlas…

Cierre Ventana

Cumplo mi primer aniversario en el equipo de plugins de wordpress

Viendo a mi compi Fran Torres, me he dado cuenta que yo también cumplía un año el 5…

Cierre Ventana

Hacer un mundo mejor con WordPress

Este pasado fin de semana del 23 de marzo estuve en el evento WordCamp Torrelodones 2024, un congreso…