Qu’est-ce que c’est ?

Renovate est un outil d’automatisation des mises à jour de dépendances. Il permet de garder les dépendances à jour en créant automatiquement des pull requests pour les nouvelles versions, les correctifs de sécurité et les mises à jour majeures.

Exemple de PR avec Renovate

Renovate PR

Comment ça fonctionne ?

Renovate fonctionne en scannant à intervalles réguliers les dépôts Git pour détecter les mises à jour de dépendances. Lorsqu’une mise à jour est disponible, il crée automatiquement une pull request avec les changements nécessaires, y compris un changelog et des notes de version.

Ensuite, la pull request peut être automatiquement fusionnée si les contrôles de CI sont verts, ou elle peut nécessiter une revue humaine avant d’être fusionnée.

Parfois une image vaut milles mots, alors voici une illustration du workflow de Renovate :

  flowchart TD
    A([Planificateur cron]) --> B[Scan du dépôt Git / Lecture des fichiers de config]
    B --> C[Détection des mises à jour]
    C --> D{Mises à jour disponibles ?}
    D -- Non --> E[Aucune PR]
    D -- Oui --> F[Création de la PR Branche + changelog]
    F --> G[CI / Tests automatiques]
    G --> H[Automerge]
    G -.ou.- I[Review humaine]

Ce schéma a été généré avec Mermaid. J’en ferai certainement un article dédié dans le futur.

Un changement de paradigme

Dans le monde du développement logiciel, la gestion des dépendances est un défi constant. Les bibliothèques et les frameworks évoluent rapidement, et il est crucial de maintenir les dépendances à jour pour bénéficier des dernières fonctionnalités, des correctifs de sécurité et des améliorations de performance.

Autrefois (et encore aujourd’hui dans de nombreux projets), la mise à jour des dépendances n’est pas maitrisée et se fait de manière manuelle, souvent de manière ad-hoc. Cela peut entraîner des retards dans l’adoption des nouvelles versions, des risques de sécurité et une dette technique croissante.

Renovate change complètement la donne en automatisant ce processus. Plutôt que de dépendre d’une intervention humaine pour surveiller les mises à jour, Renovate prend en charge cette tâche de manière proactive. Il scanne régulièrement les dépôts, détecte les mises à jour disponibles et crée automatiquement des pull requests pour les intégrer.

Supply chain attacks

Ces derniers mois, nous avons vu une augmentation significative des attaques de la chaîne d’approvisionnement (supply chain attacks). Ces attaques ciblent les dépendances utilisées par les projets, en injectant du code malveillant dans des librairies souvent méconnues mais utilisées par tous.

En voici quelques unes :

La fin des wildcards pour les versions

L’un des avantages (ou inconvénients) majeurs de Renovate est qu’il encourage une gestion plus rigoureuse des versions. Plutôt que d’utiliser des wildcards (comme ^1.0.0 ou ~1.0.0) qui peuvent introduire des changements inattendus, Renovate propose de spécifier des versions exactes pour les dépendances.

Cela permet de mieux contrôler les mises à jour et de réduire les risques liés à l’introduction de changements non désirés.

Les concurrents

Dependabot

Dependabot est un outil similaire à Renovate qui propose également une automatisation des mises à jour de dépendances. Cependant, il est principalement intégré à GitHub et ne supporte pas autant de plateformes que Renovate. De plus, Renovate offre une plus grande flexibilité en termes de configuration et de personnalisation des règles de mise à jour.

C’est toutefois un excellent choix pour les projets hébergés sur GitHub qui souhaitent une solution simple et intégrée, sans avoir à maintenir soit même un outil supplémentaire.

Exemple d’une pull request générée par Dependabot

Dependabot PR

Vous remarquerez que le résultat est très similaire à celui de Renovate.

Le mot de la fin

Dans cet article, nous avons vu comment Renovate révolutionne la gestion des dépendances en automatisant les mises à jour et en encourageant une approche plus rigoureuse du versioning. C’est un maillon supplémentaire dans une chaîne de CI/CD qui permet à la fois de réduire les risques liés à l’introduction de changements non désirés et de réduire la friction liée à la maintenance des dépendances.