Skip to main content

Optimización de la creación de solicitudes de cambios para actualizaciones de versión de Dependabot

Aprende a simplificar y administrar eficazmente las solicitudes de cambios de la instancia de Dependabot.

¿Quién puede utilizar esta característica?

Users with write access

De manera predeterminada, Dependabot abre solicitud de cambios nueva para actualizar cada dependencia. Al habilitar las actualizaciones de seguridad, se abren nuevas solicitudes de cambios cuando se encuentra una dependencia vulnerable. Al configurar actualizaciones de versión para uno o varios ecosistemas, se abren nuevas solicitudes de cambios cuando hay nuevas versiones de dependencias disponibles, con la frecuencia definida en el archivo dependabot.yml.

Si el proyecto tiene muchas dependencias, es posible que tengas un gran número de solicitudes de cambios de Dependabot para revisar y combinar, lo que puede resultar difícil de administrar rápidamente.

Hay un par de opciones de personalización que puedes implementar para optimizar las solicitudes de cambios de actualización de Dependabot y alinearlas con los procesos, como por ejemplo:

  • Controlar la frecuencia con la que Dependabot comprueba las versiones más recientes de las dependencias con schedule.
  • Clasificar por orden de prioridad las actualizaciones significativas con groups.

Controlar la frecuencia y los tiempos de las actualizaciones de dependencias

Dependabot ejecuta sus comprobaciones de actualizaciones de versión con la frecuencia que hayas establecido en el archivo de configuración (donde el campo obligatorio, schedule.interval, se debe establecer en daily, weekly o monthly).

De manera predeterminada, Dependabot equilibra su carga de trabajo asignando un tiempo aleatorio para comprobar y generar solicitudes de cambios para las actualizaciones de dependencias.

Pero para reducir distracciones o para organizar mejor el tiempo y los recursos a fin de revisar y abordar las actualizaciones de versión, es posible que te resulte útil modificar la frecuencia y los tiempos. Por ejemplo, es posible que prefieras que Dependabot ejecute comprobaciones de actualizaciones semanales en lugar de diarias y a una hora que garantice que se generen solicitudes de cambios antes de la sesión de evaluación de prioridades del equipo.

Puedes usar schedule con una combinación de opciones para modificar la frecuencia y los intervalos de cuándo Dependabot comprueba si hay actualizaciones de versión

En el archivo dependabot.yml de ejemplo siguiente se cambia la configuración de npm para especificar que Dependabot debe comprobar las actualizaciones de versión para las dependencias de npm todos los días a las 02:00 Japanese Standard Time (UTC +09:00).

YAML
# `dependabot.yml` file with
# customized schedule for version updates

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    # Check the npm registry every week on Tuesday at 02:00 Japan Standard Time (UTC +09:00)
    schedule:
      interval: "weekly"
      day: "tuesday"
      time: "02:00"
      timezone: "Asia/Tokyo"

Consulta también programación.

Clasificar por orden de prioridad las actualizaciones significativas

Puedes usar groups para consolidar las actualizaciones de varias dependencias en una única solicitud de cambios. Esto te ayuda a centrar el tiempo de revisión en actualizaciones de mayor riesgo y minimizar el tiempo dedicado a revisar las actualizaciones de versiones secundarias. Por ejemplo, puedes combinar actualizaciones de actualizaciones secundarias o de revisión para las dependencias de desarrollo en una única solicitud de cambios y tener un grupo dedicado para actualizaciones de seguridad o versión que afecten a un área clave del código base.

Debes configurar grupos para cada ecosistema de paquetes individual y, después, puedes crear varios grupos para cada ecosistema de paquetes mediante una combinación de criterios:

  • Tipo de actualización de Dependabot: applies-to
  • Tipo de dependencia: dependency-type.
  • Nombre de la dependencia: patterns y exclude-patterns
  • Niveles de versionamiento semántico: update-types

Para ver todos los valores admitidos para cada criterio, consulta groups.

En los ejemplos siguientes se presentan varios métodos diferentes para crear grupos de dependencias mediante los criterios.

Ejemplo 1: Tres grupos de actualizaciones de versión

En este ejemplo, el archivo dependabot.yml:

  • Crea tres grupos, denominados "production-dependencies", "development-dependencies" y "rubocop".
  • Usa patterns y dependency-type para incluir dependencias en el grupo.
  • Usa exclude-patterns para excluir una dependencia (o varias dependencias) del grupo.
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      production-dependencies:
        dependency-type: "production"
      development-dependencies:
        dependency-type: "development"
        exclude-patterns:
          - "rubocop*"
      rubocop:
        patterns:
          - "rubocop*"

Como resultado:

  • Las actualizaciones de versión se agrupan por tipo de dependencia.
  • Las dependencias de desarrollo que coinciden con el patrón rubocop* se excluyen del grupo development-dependencies.
  • En su lugar, las dependencias de desarrollo que coinciden con rubocop* se incluirán en el grupo rubocop. Debido al orden, las dependencias de producción que coinciden con rubocop* se incluirán en el grupo production-dependencies.
  • Además, todos los grupos solo se aplican a las actualizaciones de versión, ya que la clave applies-to está ausente.

Ejemplo 2: Actualizaciones agrupadas con dependencias excluidas

En este ejemplo, el archivo dependabot.yml:

  • Crea un grupo denominado "support-dependencies", como parte de una configuración de Bundler personalizada.
  • Usa patterns que coincide con el nombre de una dependencia (o varias dependencias) para incluir dependencias en el grupo.
  • Usa exclude-patterns que coincide con el nombre de una dependencia (o varias dependencias) para excluir dependencias del grupo.
  • Aplica la agrupación solo a las actualizaciones de versiones, ya que se usa applies-to: version-updates.
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directories:
      - "/frontend"
      - "/backend"
      - "/admin"
    schedule:
      interval: "weekly"
    # Create a group of dependencies to be updated together in one pull request
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      support-dependencies:
        # Define patterns to include dependencies in the group (based on
        # dependency name)
        applies-to: version-updates # Applies the group rule to version updates
        patterns:
          - "rubocop" # A single dependency name
          - "rspec*"  # A wildcard string that matches multiple dependency names
          - "*"       # A wildcard that matches all dependencies in the package
                      # ecosystem. Note: using "*" may open a large pull request
        # Define patterns to exclude dependencies from the group (based on
        # dependency name)
        exclude-patterns:
          - "gc_ruboconfig"
          - "gocardless-*"

Como resultado:

  • La mayoría de las dependencias del agrupador se consolidan en el grupo support-dependencies debido al patrón de comodín ("*"), aparte de
  • Las dependencias que coinciden con gc_ruboconfig y gocardless-* se excluyen del grupo y Dependabot continúa con la generación de solicitudes de cambios únicas para estas dependencias. Esto puede resultar útil si es necesario revisar las actualizaciones de estas dependencias con un examen más detallado.
  • Para support-dependencies, Dependabot solo generará solicitudes de cambios para actualizaciones de versión.

Ejemplo 3: Solicitudes de cambios individuales para actualizaciones principales y agrupadas para actualizaciones secundarias o de revisión

En este ejemplo, el archivo dependabot.yml:

  • Crea un grupo denominado "angular".
  • Usa patterns que coincide con el nombre de una dependencia para incluir dependencias en el grupo.
  • Usa update-type para incluir solo actualizaciones de minor o patch en el grupo.
  • Aplica la agrupación solo a las actualizaciones de versiones, ya que se usa applies-to: version-updates.
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"

Como resultado:

  • Dependabot creará una solicitud de cambios agrupada para todas las dependencias de Angular que tengan una actualización secundaria o de revisión.
  • Todas las actualizaciones principales se seguirán generando como solicitudes de cambios individuales.

Ejemplo 4: Solicitudes de cambios agrupadas para actualizaciones secundarias o de revisión, y sin solicitudes de cambios para las actualizaciones principales

En este ejemplo, el archivo dependabot.yml:

  • Crea dos grupos denominados "angular" y "minor-and-patch".
  • Usa applies-to para que el primer grupo solo se aplique a las actualizaciones de versiones y el segundo solo a las actualizaciones de seguridad.
  • Usa update-type para incluir solo actualizaciones de minor o patch para ambos grupos.
  • Usa una condición ignore para excluir las actualizaciones de versiones major de paquetes @angular*.
version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"
      minor-and-patch:
        applies-to: security-updates
        patterns:
          - "@angular*"
        update-types:
          - "patch"
          - "minor"
    ignore:
      - dependency-name: "@angular*"
        update-types: ["version-update:semver-major"]

Como resultado:

  • Las actualizaciones de versiones secundarias y de revisión para las dependencias de Angular se agrupan en una única solicitud de cambios.
  • Las actualizaciones de versiones secundarias y de revisión para las dependencias de Angular también se agrupan en una única solicitud de cambios.
  • Dependabot no abrirá automáticamente solicitudes de cambios para las actualizaciones principales de Angular.