Restricciones cuando Dependabot desencadena 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.
En el caso de los flujos de trabajo iniciados por Dependabot (github.actor == 'dependabot[bot]'
) mediante los eventos pull_request
, pull_request_review
, pull_request_review_comment
, push
, create
, deployment
y deployment_status
, se aplican las restricciones siguientes:
GITHUB_TOKEN
tiene permisos de solo lectura de manera predeterminada.- Los secretos se llenan desde los secretos del Dependabot. Los secretos de las GitHub Actions no están disponibles.
En el caso de los flujos de trabajo iniciados por Dependabot (github.actor == 'dependabot[bot]'
) mediante el evento pull_request_target
, si la referencia base de la solicitud de incorporación de cambios se ha creado mediante Dependabot (github.event.pull_request.user.login == 'dependabot[bot]'
), el valor GITHUB_TOKEN
será de solo lectura y los secretos no estarán disponibles.
Estas restricciones se aplican incluso si un actor diferente vuelve a ejecutar el flujo de trabajo.
Para más información, consulta Mantenimiento de la seguridad de flujos de trabajo y Acciones de GitHub: prevención de solicitudes pwn.
Solucionar los fallos cuando el Dependabot active los 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
permissions
aumente 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 GitHub Actions.
Acceder a los secretos
Cuando un evento del Dependabot activa un flujo de trabajo, los únicos secretos disponibles para dicho flujo de trabajo son los del Dependabot. Los secretos de GitHub Actions no están disponibles. Por tanto, debes almacenar cualquier secreto que se utilice en un flujo de trabajo desencadenado mediante los eventos de Dependabot como secretos del Dependabot. Para más información, consulta Configuración del acceso a registros privados para Dependabot.
Los secretos de Dependabot se agregan al contexto secrets
y se les hace referencia mediante la misma sintaxis exacta que la de los secretos para GitHub Actions. Para más información, consulta Uso de secretos en Acciones de GitHub.
Si tienes un flujo de trabajo que se activará mediante el Dependabot y también mediante otros actores, la solución más simple es almacenar el token con los permisos requeridos en una acción y en un secreto del Dependabot con nombres idénticos. Entonces, el flujo de trabajo puede incluir una llamada simple a estos secretos. Si el secreto del Dependabot tiene un nombre diferente, utiliza condiciones para especificar los secretos correctos para que los utilicen los diferentes actores.
Para obtener ejemplos en los que se usan condiciones, consulta Automatizar al Dependabot con las GitHub Actions.
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 desencadena 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.
name: CI on: pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - 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)
name: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- 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 manera predeterminada, los flujos de trabajo de GitHub Actions desencadenados por Dependabot obtienen un valor 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 repository-projects: write ... jobs: ...
name: CI
on: pull_request
# Set the access for individual scopes, or use permissions: write-all
permissions:
pull-requests: write
issues: write
repository-projects: write
...
jobs:
...
Para más información, consulta Autenticación automática de tokens.
Volver a ejecutar un flujo de trabajo manualmente
Cuando vuelvas a ejecutar manualmente un flujo de trabajo de Dependabot, se ejecutará con los mismos privilegios que antes incluso si el usuario que ha iniciado la nueva ejecución tiene otros privilegios. Para más información, consulta Volver a ejecutar flujos de trabajo y jobs.