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.
Tabla de contenidos
¿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:
- 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.
- 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.
- 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.
- 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.
- 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:
- Dependabot escanea regularmente el archivo de dependencias del proyecto.
- 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.
- Tenemos que revisar el PR, ver los cambios propuestos y decidir si aceptar la actualización.
- 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"