Renovate è un automated dependency update tool che crea le pull request di aggiornamento per il suo utilizzatore. In questo modo si riduce il rischio di rimanere bloccati a causa di librerie obsolete o vulnerabili. Il progetto è open source e il suo sorgente è disponibile su GitHub in un repository dedicato.
Che cos'è Renovate e cosa serve
Renovate scansiona i repository alla ricerca dei manifest e dei file di lock delle dipendenze. Quando trova una versione più recente e compatibile, genera automaticamente una pull request con il cambio di versione e tutte le informazioni utili a decidere se effettuare il merging (età della release, adozione, pass rate dei test, merge confidence..). Lo sviluppatore continua a lavorare sul prodotto, mentre un bot ordinato (e virtualmente "instancabile") si occupa della manutenzione del progetto.
Mantenere aggiornati package.json, immagini Docker e action di CI è spesso un lavoro infinito. Renovate, però, è altamente configurabile, in questo modo si possono adattare ritmo e modalità degli update: schedulare finestre di aggiornamento (ad esempio: solo durante la notte), raggruppare i pacchetti correlati, imporre delle regole diverse per patch, minor e major o abilitare l'automerge quando i test vengono superati. Tutto ciò avviene in un semplice renovate.json presente nel repository.
Renovate copre la gran parte degli stack usati nel web contemporaneo e non solo: JavaScript e TypeScript, Python, Java, .NET, Scala, Ruby, Go, Docker e oltre 90 package manager, non solo npm. Funziona su GitHub, GitLab, Bitbucket, Azure DevOps, AWS CodeCommit, Gitea, Forgejo e perfino Gerrit (in fase sperimentale). Se si lavora in multi-repo o polyglot (cioè con più linguaggi), questo significa un unico strumento e una sola policy per tutte le procedure che si devono affrontare.
Come eseguire Renovate
Esistono diverse opzioni per eseguire Renovate, dal zero-ops all'approccio auto-gestito. La prima è quella Cloud-Hosted con cui si installa l'applicazione su GitHub.com o Bitbucket Cloud e si selezionano i repository da abilitare. In questo caso non è necessario creare alcuna infrastruttura, quindi si tratta di una soluzione ideale per chi desidera iniziare ad utilizzare il bot in pochi minuti.
L'opzione Self-Hosted prevede invece di attivare un server Renovate nella propria rete con cui accedere a registri privati interni e avere il pieno controllo su ogni aspetto degli aggiornamenti.
Con la Pipeline/CI abbiamo invece una GitHub Action ufficiale, un runner per GitLab e un'estensione per Azure DevOps. In alternativa si può lanciare un semplice:
npx renovate
nella propria CI.
L'ultima opzione è invece quella della CLI pura. Utile nel caso in cui si preferisca integrare tutto manualmente con esecuzioni dirette dalla CLI.
Renovate e pull request
Le pull request sono pensate per essere "decision-friendly". Esse includono il diff del manifest/lockfile, note sulla versione, metadati che aiutano a capire il livello di rischio e possono rispettare le convenzioni per i nomi e le regole di branching già in uso. Con delle policy adeguate è possibile attivare l'automerge per le patch e le minor, lasciando alla revisione manuale solo i major upgrade. Tutto ciò riduce drasticamente il debito operativo sull'aggiornamento delle dipendenze.
L'utente può abilitare gradualmente le parti da un singolo repository, accendere l'automerge solo per patch e minor e monitorare il flusso. Nello stesso modo si possono raggruppare gli update per ridurre il numero di pull request, definire finestre di maintenance per non disturbare i rilasci, integrare con test in cui ogni pull request viene validata automaticamente.
Conclusioni
Renovate è tra le soluzioni più complete a livello di ampiezza dello spettro (linguaggi, registri, piattaforme..) e di profondità di configurazione. La documentazione ufficiale mette a confronto i diversi modi di eseguirlo e fornisce una pagina "Renovate vs Dependabot" per valutare i trade-off e i vari scenari d'uso. Per chi lavora fuori dall'ecosistema GitHub puro o ha esigenze avanzate di policy è spesso la scelta più flessibile.
Il progetto viene rilasciato sotto licenza AGPL-3.0, ha una community molto ampia e vanta rilasci frequenti. Se si vuole eliminare la fatica (e il rischio) dell'aggiornamento manuale delle dipendenze Renovate è un "alleato" che automatizza, standardizza e porta gli update nelle pull request.