Nota: La seguridad y actualizaciones de versión del Dependabot se encuentran actualmente en beta privado y están sujetas a cambios. Por favor, contacta a tu equipo de administración de cuenta para obtener las instrucciones para habilitar las actualizaciones del Dependabot.
Nota: Tu administrador de sitio debe configurar las Actualizaciones del dependabot para tu instancia de GitHub Enterprise Server antes de que puedas utilizar esta característica. Para obtener más información, consulta la sección "Habilitar la Dependabot en tu empresa".
Acerca del Dependabot y de las GitHub Actions
El Dependabot crea las solicitudes de cambios para mantener actualizadas tus dependencias y puedes utilizar las GitHub Actions para llevar a cabo tareas automatizadas cuando se creen estas solicitudes de cambios. Por ejemplo, recupera artefactos adicionales, agrega etiquetas, ejecuta pruebas o modifica la solicitud de cambios de cualquier otra forma.
Responder a los eventos
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.
- El
GITHUB_TOKEN
tiene permisos de solo lectura, a menos de que tu adminsitrador haya eliminado las restricciones. - No se puede acceder a los secretos a menos de que tu administrador haya eliminado las restricciones.
Para obtener màs informaciòn, consulta la secciòn "Mantener seguras tus GitHub Actions y flujos de trabajo: Prevenir solicitudes de tipo pwn".
Nota: Tu administrador de sitio puede anular estas restricciones para tu instancia de GitHub Enterprise Server. Para obtener más información, consulta la sección "Solucionar los problemas de las GitHub Actions en tu empresa".
Si se eliminan las restricciones, cuando el Dependabot active un flujo de trabajo, este tendrá acceso a los secretos de las GitHub Actions y podrá utilizar el término permissions
para incrementar el alcance predeterminado del GITHUB_TOKEN
desde el acceso de solo lectura. Puedes ignorar los pasos específicos en las secciones de "Eventos de manejo de pull_request
" y de "Eventos de manejo de push
", ya que esto ya no aplica.
Manejar los eventos de pull_request
Si tu flujo de trabajo necesita acceso a los secretos o a un GITHUB_TOKEN
con permisos de escritura, tienes dos opciones: utilizar pull_request_target
, o utilizar dos flujos de trabajo separados. En esta sección, describiremos a detalle cómo utilizar pull_request_target
y utilizaremos los dos siguientes flujos de trabajo en cómo "Manejar eventos push
".
Debajo hay un ejemplo simple de un flujo de trabajo de una pull_request
que podría estar fallando ahora:
### This workflow now has no secrets and a read-only token
name: Dependabot Workflow
on:
pull_request
jobs:
dependabot:
runs-on: ubuntu-latest
# Always check the actor is Dependabot to prevent your workflow from failing on non-Dependabot PRs
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
Puedes reemplazar a pull_request
con pull_request_target
, el cual se utiliza para las solicitudes de cambio de las bifurcaciones y revisar explícitamente el HEAD
de la solicitud de cambios.
Advertencia: El utilizar pull_request_target
como sustituto de pull_request
de expone a un comportamiento inseguro. Te recomendamos utilizar el método de dos flujos de trabajo de acuerdo con lo que se describe a continuación en "Administrar eventos push
".
### This workflow has access to secrets and a read-write token
name: Dependabot Workflow
on:
pull_request_target
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
with:
# Check out the pull request HEAD
ref: ${{ github.event.pull_request.head.sha }}
github-token: ${{ secrets.GITHUB_TOKEN }}
También se recomienda fuertemente que bajes el alcance de los permisos que otorgas al GITHUB_TOKEN
para poder evitar que se fugue un token con más privilegios de lo necesario. Para obtener más información, consulta ña sección "Permisos del GITHUB_TOKEN
".
Manejar eventos push
Ya que no hay un equivalente de pull_request_target
para los eventos push
, tendrás que utilizar dos flujos de trabajo: uno no confiable que termine cargando artefactos, el cual activará un segundo flujo de trabajo que descargará los artefactos y seguirá procesándose.
El primer flujo de trabajo lleva a cabo cualquier trabajo no confiable:
### This workflow doesn't have access to secrets and has a read-only token
name: Dependabot Untrusted Workflow
on:
push
jobs:
check-dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: ...
El segundo flujo de trabajo llevará a cabo el trabajo confiable después de que el primero se complete exitosamente:
### This workflow has access to secrets and a read-write token
name: Dependabot Trusted Workflow
on:
workflow_run:
workflows: ["Dependabot Untrusted Workflow"]
types:
- completed
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: ...
Volver a ejecutar un flujo de trabajo manualmente
También puedes volver a ejecutar un flujo de trabajo fallido del Dependabot manualmente y este seguirá ejecutándose con un token de lectura-escritura y con acceso a los secretos. Antes de volver a ejecutar los flujos de trabajo fallidos manualmente, siempre debes verificar la dependencia que se está actualizando para asegurarte de que el cambio no introduzca ningún comportamiento imprevisto o malicioso.
Automatizaciones comunes del Dependabot
Aquí mostramos varios escenarios comunes que pueden automatizarse utilizando las GitHub Actions.
Nota: Si tu administrador de sitio anuló las restricciones del Dependabot en tu instancia de GitHub Enterprise Server, puedes utilizar pull_request
en vez de pull_request_target
en los siguientes flujos de trabajo.
Recuperar metadatos de una solicitud de cambios
Automatizar mucho requiere saber información del contenido de la solicitud de cambios: cuál era el nombre de la dependencia, si es una dependencia productva y si es una actualización de parche menor o mayor.
La acción dependabot/fetch-metadata
te proporciona toda esta información:
name: Dependabot fetch metadata
on: pull_request_target
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
# The following properties are now available:
# - steps.dependabot-metadata.outputs.dependency-names
# - steps.dependabot-metadata.outputs.dependency-type
# - steps.dependabot-metadata.outputs.update-type
Para obtener más información, consulta el repositorio dependabot/fetch-metadata
.
Etiquetar una solicitud de cambios
Si tienes otros flujos de trabajo de automatización o clasificación que se basen en etiquetas de GitHub, puedes configurar una acción para asignar etiquetas con base en los metadatos proporcionados.
Por ejemplo, si quieres etiquetar todas las actualizaciones de las dependencias de producción con una etiqueta:
name: Dependabot auto-label
on: pull_request_target
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Add a label for all production dependencies
if: ${{ steps.dependabot-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 cambios
Si quieres aprobar las solicitudes de cambios del Dependabot automáticamente, puedes utilizar el CLI de GitHub en un flujo de trabajo:
name: Dependabot auto-approve
on: pull_request_target
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
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}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Habilita la fusión automática en una solicitud de cambios
If you want to allow maintainers to mark certain pull requests for auto-merge, you can use GitHub's auto-merge functionality. Esto habilita a la solicitud de cambios para que se fusione cuando se cumpla con todas las pruebas y aprobaciones requeridas. For more information on auto-merge, see "Automatically merging a pull request."
You can instead use GitHub Actions and the CLI de GitHub. Here is an example that auto merges all patch updates to my-dependency
:
name: Dependabot auto-merge
on: pull_request_target
permissions:
contents: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
if: ${{contains(steps.dependabot-metadata.outputs.dependency-names, 'my-dependency') && steps.dependabot-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}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Solucionar los problemas de las ejecuciones de flujo de trabajo fallidas
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.
- Estás verificando la
ref
de tupull_request
. - No estás intentando acceder a los secretos desde un evento de
pull_request
,pull_request_review
,pull_request_review_comment
, opush
activado por el Dependabot. - No estás intentando llevar a cabo ninguna acción de
write
desde dentro de un evento de tipopull_request
,pull_request_review
,pull_request_review_comment
, opush
que haya activado el Dependabot.
Para obtener más información sobre cómo escribir y depurar las GitHub Actions, consulta la sección "Aprender sobre las Acciones de GitHub".