Nota:
En este artículo se explica cómo automatizar las tareas relacionadas con Dependabot mediante GitHub Actions. Para obtener más información sobre cómo ejecutar Dependabot updates con GitHub Actions, consulte Acerca de Dependabot en ejecutores de Acciones de GitHub en su lugar.
Puede utilizar GitHub Actions para realizar tareas automatizadas cuando Dependabot crea solicitudes de incorporación 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 y los nombres.
-
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.
Acerca del Dependabot y de las GitHub Actions
Importante
Si Dependabot está habilitado para un repositorio, siempre se ejecutará en GitHub Actions, omitiendo las comprobaciones de directiva de acciones y la deshabilitación en el nivel de repositorio u organización. Esto garantiza que los flujos de trabajo de actualización de seguridad y versión siempre se ejecuten cuando Dependabot esté habilitado.
Dependabot crea solicitudes de cambios para mantener actualizadas tus dependencias. Puede usar GitHub Actions para realizar tareas automatizadas cuando se crean estas solicitudes de incorporación de cambios. Por ejemplo, recupera artefactos adicionales, agrega etiquetas, ejecuta pruebas o modifica la solicitud de incorporación 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 obtener más información, consulte Solución de problemas de Dependabot en acciones de GitHub.
Aquí mostramos varios escenarios comunes para solicitudes de incorporación de cambios que pueden automatizarse utilizando GitHub Actions.
Recuperación de metadatos de una solicitud de incorporación de cambios
Para la mayoría de automatización es necesario conocer información del contenido de la solicitud de incorporación de cambios: cuál era el nombre de la dependencia, si es una dependencia productiva y si es una actualización de revisión, menor o mayor. Puede usar una acción para recuperar información sobre las dependencias que actualiza una solicitud de incorporación de cambios generada por Dependabot.
Ejemplo:
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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 obtener más información, consulte el repositorio de dependabot/fetch-metadata.
Etiquetado de una solicitud de incorporación de cambios
Si tiene otros flujos de trabajo de automatización o clasificación que se basen en etiquetas de GitHub, puede configurar una acción para asignar etiquetas según los metadatos proporcionados.
Ejemplo en el que marcan todas las actualizaciones de las dependencias de producción con una etiqueta:
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
Aprobar una solicitud de incorporación de cambios automáticamente
Puede aprobar automáticamente las solicitudes de incorporación de cambios de Dependabot con GitHub CLI en un flujo de trabajo.
Ejemplo:
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
Habilitar la fusión automática en una solicitud de incorporación de cambios
Si quieres permitir que los mantenedores marquen determinadas solicitudes de incorporación de cambios para la fusión automática, puede usar la funcionalidad de fusió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 que fusiona automáticamente todas las actualizaciones de revisión a my-dependency:
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
Nota:
Si usa comprobaciones de estado para probar las solicitudes de incorporación de cambios, debe habilitar Requerir pasar las comprobaciones de estado antes de la fusión para la rama de destino para las solicitudes de incorporación de cambios de Dependabot. Esta regla de protección de rama garantiza que las solicitudes de incorporación de cambios no se fusionen 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.
Directivas de Dependabot y GitHub Actions
Normalmente, el hecho de que un flujo de trabajo se pueda ejecutar en un repositorio depende de las comprobaciones de directivas de GitHub Actions y de si GitHub Actions está habilitado en el nivel de organización o repositorio. Estos controles pueden restringir la ejecución de flujos de trabajo, especialmente cuando se bloquean acciones externas o se deshabilita completamente GitHub Actions.
Pero cuando Dependabot está habilitado para un repositorio, sus flujos de trabajo siempre se ejecutarán en GitHub Actions, omitiendo las comprobaciones de la directiva Acciones y la deshabilitación.
- Los flujos de trabajo de Dependabot no están bloqueados por la deshabilitación de Acciones ni las restricciones de directivas empresariales.
- Las acciones a las que se hace referencia en estos flujos de trabajo también se pueden ejecutar, incluso si no se permiten acciones externas.
Para obtener más información, consulta Acerca de Dependabot en ejecutores de Acciones de GitHub.
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
refcorrecto parapull_request. - Tus secretos están disponibles en los secretos del Dependabot, en vez de como secretos de las GitHub Actions.
- Tiene un
GITHUB_TOKENcon los permisos correctos.
Para obtener información sobre cómo escribir y depurar GitHub Actions, consulte Escritura de flujos de trabajo.
Para obtener más sugerencias para ayudar a resolver problemas con los flujos de trabajo, consulte Solución de problemas de Dependabot en acciones de GitHub.