Solución de problemas cuando Dependabot activa flujos de trabajo existentes
Después de configurar las actualizaciones del Dependabot para tu instancia de GitHub Enterprise Server, puedes ver errores cuando los flujos de trabajo existentes los desencadenan los eventos del Dependabot.
De manera predeterminada, las ejecuciones de flujo de trabajo de GitHub Actions que se activan desde Dependabot a partir de los eventos push, pull_request, pull_request_review o pull_request_review_comment se tratan como si se abrieran desde una bifurcación de repositorio. A diferencia de los flujos de trabajo que activan otros actores, esto significa que recibieron un GITHUB_TOKEN de solo lectura y no tienen acceso a ninguno de los secretos que normalmente se encuentran disponibles. Esto ocasionará que cualquier flujo de trabajo que intente escribir en el repositorio falle cuando los activa el Dependabot.
Hay tres formas de resolver este problema:
- Puede actualizar los flujos de trabajo para que ya nos los active Dependabot mediante una expresión como:
if: github.actor != 'dependabot[bot]'. Para más información, consulta Evaluación de expresiones en flujos de trabajo y acciones. - Puede modificar los flujos de trabajo para usar un proceso en dos pasos que incluya
pull_request_target, que no tiene estas limitaciones. Para más información, consulta Solución de problemas de Dependabot en acciones de GitHub. - Puede proporcionar acceso a los flujos de trabajo que activa Dependabot a secretos y permitir que el término
permissionsaumente el alcance predeterminado deGITHUB_TOKEN.
En este artículo se proporcionan algunos consejos para solucionar problemas. También puedes consultar Sintaxis del flujo de trabajo para Acciones de GitHub.
Acceder a los secretos
Cuando un evento Dependabot activa un flujo de trabajo, los únicos secretos disponibles para el flujo de trabajo son los secretos Dependabot. GitHub Actions los secretos no están disponibles. Por lo tanto, debe almacenar como secretos de Dependabot todos los secretos que utilice un flujo de trabajo que se active con eventos Dependabot. Para obtener más información, vea Configuración del acceso a registros privados para Dependabot.
Los secretos Dependabot se agregan al contexto secrets y se hace referencia a ellos usando exactamente la misma sintaxis que los secretos para GitHub Actions. Para obtener más información, vea Uso de secretos en Acciones de GitHub.
Si tiene un flujo de trabajo que se active mediante Dependabot y también por otros actores, la solución más sencilla es almacenar el token con los permisos necesarios en una acción y en un secreto de Dependabot con el mismo nombre. Entonces, el flujo de trabajo puede incluir una llamada simple a estos secretos. Si el secreto de Dependabot tiene un nombre diferente, use condiciones para especificar los secretos correctos para que usen distintos actores.
Para obtener ejemplos en los que se usan condiciones, consulta Automatizar al Dependabot con las Acciones de GitHub.
Para acceder a un registro de contenedor privado en AWS con un nombre de usuario y una contraseña, un flujo de trabajo debe incluir un secreto para username y password.
En este ejemplo, cuando Dependabot activa el flujo de trabajo, se usan los secretos de Dependabot con los nombres READONLY_AWS_ACCESS_KEY_ID y READONLY_AWS_ACCESS_KEY. Si otro actor activa el flujo de trabajo, se utilizarán los secretos de las acciones con estos nombres.
# 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: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Login to private container registry for dependencies
uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
with:
registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }}
password: ${{ secrets.READONLY_AWS_ACCESS_KEY }}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
# 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: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Login to private container registry for dependencies
uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
with:
registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }}
password: ${{ secrets.READONLY_AWS_ACCESS_KEY }}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
Cambio de permisos GITHUB_TOKEN
De forma predeterminada, GitHub Actions los flujos de trabajo activados por Dependabot obtienen un GITHUB_TOKEN con permisos de solo lectura. Puede usar la clave permissions del flujo de trabajo para aumentar el acceso del token:
name: CI on: pull_request # Set the access for individual scopes, or use permissions: write-all permissions: pull-requests: write issues: write ... jobs: ...
name: CI
on: pull_request
# Set the access for individual scopes, or use permissions: write-all
permissions:
pull-requests: write
issues: write
...
jobs:
...
Para obtener más información, vea Uso de GITHUB_TOKEN para la autenticación en flujos de trabajo.
Volver a ejecutar un flujo de trabajo manualmente
Al volver a ejecutar manualmente un Dependabot flujo de trabajo, se ejecutará con los mismos privilegios que antes incluso si el usuario que inició la nueva ejecución tiene privilegios diferentes. Para obtener más información, vea Volver a ejecutar flujos de trabajo y tareas.