Skip to main content

Automatizar al Dependabot con las GitHub Actions

Ejemplos de cómo puedes utilizar las GitHub Actions para automatizar las tareas comunes relacionadas con el Dependabot.

¿Quién puede utilizar esta característica?

Usuarios con acceso de escritura

Puedes utilizar GitHub Actions para realizar tareas automatizadas cuando Dependabot crea solicitudes de cambios para actualizar las dependencias. Es posible que esto te resulte útil si quieres:

  • Asegurarte de que las solicitudes de cambios (actualizaciones de versión y de seguridad) de Dependabot se crean con los datos adecuados para los procesos de trabajo, incluidas las etiquetas, los nombres y los revisores.

  • Desencadenar flujos de trabajo para enviar solicitudes de cambios (actualizaciones de versión y de seguridad) de Dependabot al proceso de revisión o para combinarlas automáticamente.

Note

Para poder utilizar esta característica, el administrador del sitio debe configurar Dependabot updates para tu instancia de GitHub Enterprise Server. Para más información, consulta Habilitación de Dependabot para la empresa.

Es posible que no puedas habilitar ni deshabilitar Dependabot updates si un propietario de empresa ha establecido una directiva a nivel empresarial. Para más información, consulta Aplicación de directivas de seguridad y análisis de código de la empresa.

Acerca del Dependabot y de las GitHub Actions

Dependabot crea solicitudes de cambios para mantener actualizadas tus dependencias. Puedes usar GitHub Actions para realizar tareas automatizadas cuando se crean estas solicitudes de cambios. Por ejemplo, recupera artefactos adicionales, agrega etiquetas, ejecuta pruebas o modifica la solicitud de cambios de cualquier otra forma.

El Dependabot puede activar flujos de trabajo de las GitHub Actions en sus solicitudes de cambios y comentarios; sin embargo, algunos eventos se tratan de forma distinta. Para más información, consulta Solución de problemas de Dependabot en acciones de GitHub.

Estos son varios escenarios comunes para solicitudes de cambios que se pueden automatizar mediante GitHub Actions.

Recuperación de metadatos sobre una solicitud de cambios

Para gran parte de la automatización debes conocer información sobre el contenido de la solicitud de cambios: cuál era el nombre de la dependencia, si es una dependencia de producción y si es una actualización principal, secundaria o de revisión. Puedes usar una acción para recuperar información sobre las dependencias que actualiza una solicitud de cambios generada por Dependabot.

Ejemplo:

YAML
name: Dependabot fetch metadata
on: pull_request

permissions:
  pull-requests: write
  issues: write
  repository-projects: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      # The following properties are now available:
      #  - steps.metadata.outputs.dependency-names
      #  - steps.metadata.outputs.dependency-type
      #  - steps.metadata.outputs.update-type

Para más información, vea el repositorio dependabot/fetch-metadata.

Etiquetado de una solicitud de cambios

Si tienes otros flujos de trabajo de automatización o evaluación de prioridades que se basen en etiquetas de GitHub, puedes configurar una acción para asignar etiquetas basadas en los metadatos proporcionados.

Ejemplo en el que marcan todas las actualizaciones de las dependencias de producción con una etiqueta:

YAML
name: Dependabot auto-label
on: pull_request

permissions:
  pull-requests: write
  issues: write
  repository-projects: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Add a label for all production dependencies
        if: steps.metadata.outputs.dependency-type == 'direct:production'
        run: gh pr edit "$PR_URL" --add-label "production"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}

Aprobación automática de una solicitud de cambios

Puedes aprobar automáticamente las solicitudes de cambios de Dependabot si usas la GitHub CLI en un flujo de trabajo.

Ejemplo:

YAML
name: Dependabot auto-approve
on: pull_request

permissions:
  pull-requests: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Approve a PR
        run: gh pr review --approve "$PR_URL"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}
          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Habilitación de la fusión mediante combinación automática en una solicitud de cambios

Si quieres permitir que los mantenedores marquen determinadas solicitudes de cambios para la fusión mediante combinación automática, puedes usar la funcionalidad de fusión mediante combinación automática de GitHub. Esto habilita a la solicitud de cambios para que se fusione cuando se cumpla cualquier prueba y aprobación requerida por las reglas de protección de rama.

Para más información, consulta Fusionar una solicitud de cambios automáticamente y Administrar una regla de protección de rama.

En su lugar, puedes usar GitHub Actions y GitHub CLI. Este es un ejemplo en el que se combinan automáticamente todas las actualizaciones de revisión en my-dependency:

YAML
name: Dependabot auto-merge
on: pull_request

permissions:
  contents: write
  pull-requests: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Enable auto-merge for Dependabot PRs
        if: contains(steps.metadata.outputs.dependency-names, 'my-dependency') && steps.metadata.outputs.update-type == 'version-update:semver-patch'
        run: gh pr merge --auto --merge "$PR_URL"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}
          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Note

Si usas comprobaciones de estado para probar las solicitudes de cambios, debes habilitar Require status checks to pass before merging para la rama de destino para las solicitudes de cambios de Dependabot. Esta regla de protección de rama garantiza que las solicitudes de cambios no se fusionan a menos que se superen todas las comprobaciones de estado necesarias. Para más información, consulta Administrar una regla de protección de rama.

Investigación de ejecuciones de flujo de trabajo con errores

Si tu ejecución de flujo de trabajo falla, verifica lo siguiente:

  • Estás ejecutando el flujo de trabajo únicamente cuando el actor adecuado lo activa.
  • Va a extraer del repositorio el ref correcto para pull_request.
  • Tus secretos están disponibles en los secretos del Dependabot, en vez de como secretos de las GitHub Actions.
  • Tiene un GITHUB_TOKEN con los permisos correctos.

Para obtener información sobre cómo escribir y depurar GitHub Actions, consulta Escritura de flujos de trabajo.

A fin de obtener más sugerencias para ayudar a resolver problemas con los flujos de trabajo, consulta Solución de problemas de Dependabot en acciones de GitHub.