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:
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
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:
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}}
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:
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}}
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
:
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}}
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 parapull_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.