Comment garder vos dépendances à jour: Github + Renovate

Pragmatic Nerdz
Oct 31, 2023 - 3 Minutes

L'histoire commence toujours avec un nouveau projet avec toutes les technos les plus récentes, les choix d'architectures les plus exotiques. Au fil du temps, les dépendances que l'on utilise dans notre projets évoluent, mais on a de moins en moins le temps de suivre toutes ces évolutions et notre projet se retrouve avec des dépendances dépassée.

Puis une sérieuse vulnérabilité est découverte, et l'équipe se mobilise pour mettre à jour les dépendances. À cause des inter-dépendances entre les librairies, on se retrouve en face d'une tache titanesque! Lors de la découverte de la vulnérabilité log4j en 2021, la boite ou je travaille devait mettre a jour plus de 1000 projets Github, il a fallu plus d'un mois à plusieurs centaine de développeur pour résoudre le problème!

La solution à ce problème est très simple: garder ses dépendances à jour! Mais comment le faire quand on ne travaille plus activement sur le projet? La solution: Renovate.

Qu'est ce que Renovate?

Renovate est un bot qui scanne vos projet dans Github, et crée des pull request pour chacune des dépendance à mettre a jour. Une fois la pull request crée, le développeur peut la fusionner ou configurer les fusions automatiques par Renovate.

Les avantages de Renovate:

  • Open Source.
  • Facile à configurer et flexible.
  • Supporte pratiquement tous les languages (Java, Kotlin, C#, Golang, Phyton, Docker, Ruby, Javascript etc.). Il supporte meme HTML pour les dépendances javascript ou CSS.
  • Crée des pull request pour chaque mise à jour, ce qui permet de tracer tous les changements.

Comment Intégrer Renovate?

Installation

Ajouter Renovate à votre compte Github. 

Cliquez sur le bouton Configure.

Assurez vous d'activer Renovate pour tous vos projets Github.

Receive my Stories your e-mail inbox as soon as I publish them.
Subscribe to my Blog

Configuration

La prochaine étape est de configurer Renovate dans chacun des projets où vous voulez automatiser la mise à jour.

Rajouter le fichier renovate.json, qui contient la configuration que Renovate va utiliser pour mettre à jour les dépendances. Voici un exemple simple de renovate.json pour faire les mises à jour les week-ends.

{
  "extends": [
    "config:base"
  ],
  "schedule": [
    "every weekend"
  ]
}

Lorsque Renovate va détecter une dependance à mettre à jour, il va créer une pull-request qui ressemble à ceci:

Fusion automatique

Ma recommendation est d'activer les fusions automatique avec la configuration automerge, qui est désactiver par default.

{
  "extends": [
    "config:base"
  ],
  "schedule": [
    "every weekend"
  ],
  "automerge": "true"
}

Lorsque activée, la pull request crée par Renovate va être automatiquement fusionnée dans la branche principale. Ceci est particulièrement important dans les projets ou on ne travaille plus activement, pour les garder à jour, sans intervention manuelle.

Mais il y a un risque associé à cette option, c'est d'introduire des regression suite à une mise à jour. Pour mitiger ce risque:

  1. Crée les tests automatisés
  2. Assurer vous d'avoir un haute couverture de test. Personnellement, je maintient une couverture de 90% et plus.
  3. Créer un pipeline Github Action pour valider les pull requests, incluant celles crées par Renovate. La validation des pull request inclue: compilation, exécution des test automatisés et verification du taux de couverture de test. La pull request ne sera fusionnée que si le pipeline Github Action réussi.

Vous pouvez vous referrer à cet article pour apprendre comment intégrer une bonne couverture de test dans vos projets.


C'est tout! Vous avez maintenant automatisé le processus de mise a jour des dépendances de votre projet.

Github
Renovate
Github Action