El problema
Me gustaría correr renovate en github actions pero realmente no me gusta la idea de crear tokens para darle permisos para crear issues y pull requests.
El plan
En un rapido googleo no encontre ningún ejemplo de renovate usando los tokens efimeros de github actions (que sea crean por cada corrida).
Cuando
Primero quiero que esto corra una vez por semana, entonces usamos el trigger de cron de github actions (podés usar crontab guru para la sintaxis).
on:
schedule:
- cron: '0 6 * * 1'
También me gustaría poder triggerearlo manualmente:
on:
workflow_dispatch:
Quién
El token de github actions tiene muy pocos permisos para correr renovate, así que tenemos que darle algunos.
jobs:
renovate:
permissions:
contents: write
pull-requests: write
issues: write
packages: write
Acá depende de que queremos que haga renovate pero:
contents: Para poder crear archivos en el repo, principalmente para poder crear PRs.pull-requests: Si queremos que renovate cree PRs por si solo.issues: Para que renovate maneje su propio dashboard.
Que
Finalmente tenemos que pasarle el token de github actions a la action de renovate.
jobs:
renovate:
steps:
- uses: actions/checkout@v5
- uses: renovatebot/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
env:
RENOVATE_REPOSITORIES: ${{ github.repository }}
# LOG_LEVEL: 'debug'
Notese que hay que decirle el nombre del repo sobre el que queremos que trabaje porque renovate corre en un container así que no tiene acceso al repo. Pero igual necesitamos checkout para conseguir la configuración de renovate.
Detalle para crear PRs
Finalmente si queremos que renovate tenga la capacidad de crear PRs tenemos que
habilitarlo en los settings del proyecto, por ejemplo:
https://github.com/USUARIO/REPOSITORIO/settings/actions ahí luego necesitamos
ir a la sección Workflow permissions y habilitar
Allow GitHub Actions to create and approve pull requests.
Debug
Si algo no funciona podemos pasar LOG_LEVEL para que renovate no cuente en detalle de que esta haciendo.
jobs:
renovate:
steps:
- uses: renovatebot/[email protected]
env:
LOG_LEVEL: 'debug'
TLDR
En resumen el archivo quedaría en .github/workflows/renovate.yaml con:
name: Renovate
on:
schedule:
- cron: '0 6 * * 1'
workflow_dispatch:
jobs:
renovate:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
packages: write
steps:
- uses: actions/checkout@v5
- uses: renovatebot/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
env:
RENOVATE_REPOSITORIES: ${{ github.repository }}
# LOG_LEVEL: 'debug'