Caveats
Tené en mente que a pesar de que esto funcion tiene un par de salvedades:
- Renovate no puede crear PRs para archivos en
./.workflowsya que eso requiere el permiso deworkflowsque no se puede otorgar a un token de github actions. - Los PRs creados por el token de github actions no corren CI, por una política de seguridad de github.
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.
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'
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. - Cambiar el selector de
Read repository contents and packages permissionsaWorkflows have read and write permissions in the repository for all scopes.
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@v6
- uses: renovatebot/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
env:
RENOVATE_REPOSITORIES: ${{ github.repository }}
# LOG_LEVEL: 'debug'