Software bots in Software Engineering (SAVATTE Gabriel, ROHOU Loan, ROULLEAU Tom, ROUILLARD Elouan)#48
Open
GSavatte wants to merge 63 commits into
Open
Software bots in Software Engineering (SAVATTE Gabriel, ROHOU Loan, ROULLEAU Tom, ROUILLARD Elouan)#48GSavatte wants to merge 63 commits into
GSavatte wants to merge 63 commits into
Conversation
Configure Renovate
Added additional configuration options for Renovate.
…-sur-WSL MAJ-karma-pour-fonctionnement-sur-WSL
Ajout de github actions
This workflow automatically labels pull requests based on modified files, categorizing them as 'frontend', 'backend', or 'documentation'.
Updated the bot description to classify contributions as 'frontend', 'api', and 'documentation'. Adjusted the labels assigned based on modified files in Pull Requests.
Add NODE_OPTIONS environment variable for compatibility.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DEVOPS S8
Software bots in Software Engineering
SAVATTE Gabriel | ROHOU Loan | ROULLEAU Tom | ROUILLARD Elouan
Table des matières
Introduction
Afin de réaliser ce projet nous nous sommes basés sur le projet Doodle mis à disposition. Dans ce document nous détaillerons dans une premiere courte partie ce que nous avons fait pour faire fonctionner le projet puis nous détaillerons dans une seconde partie les différents bots et automatismes que nous avons découverts lors de ce cours. Nous expliciterons également les différentes étapes suivies pour la mise en place de certains de ces bots.
Mise en place technique du projet
Versions utilisées
Changement dans le
package.jsonAfin d'adapter le projet aux nouvelles versions de NodeJS (la version 17 a été utilisée ici), il etait nécessaire d'ajouter l'option
openssl-legacy-providerau scriptstartsitué dans le fichierpackage.json.Modification du
docker-composedu back :Healthcheck de la DB
Ajout d'un healthcheck sur la base de données pour bien attendre que MySQL s'initialise avant que le reste du back ne se lance.
Ajout du "cerveau"
backendOn ajoute un service qui va servir à contenir la logique métier de l'application.\
Ses responsabilités sont :
build: context: ./: au lieu de télécharger une image on dit à Docker de trouver le fichierDockerFileet de fabriquer l'image lui même. Cela permet d'automatiser le build du code.ports: "8080:8080": ouverture d'un tunnel entre la machine et le conteneur. Cela permet au front end d'envoyer des requêtes au serveur Java.depends_on: On définit l'ordre de priorité. Il ne faut pas que le serveur Java se lance tant que la base de données n'est pas initialisée et fonctionnelle. Cela évite d'éventuels plantages au démarrage.environment: C'est là qu'on indique au code Java comment trouver les autres services dans le réseau interne de Docker (ex: db:3306 pour la base de données, mail pour le serveur SMTP).Lancement du projet :
Pour lancer le projet il suffit d'ouvrir 2 terminaux :
cd api/ docker compose up --buildcd front/ npm i npm startBots et automatismes
Vue générale des bots découverts
- PR automatiques lors des MAJ de sécurité
- PR intelligentes : Regroupe et planifie les mises à jour pour éviter de submerger les développeurs
Dépendabot
Présentation générale
Dependabot est un bot de gestion des dépendances, acquis par GitHub en 2019 et intégré nativement dans les projets hébergés sur GitHub.
Dans le cycle de vie du développement logiciel, les projets s'appuient sur de nombreuses bibliothèques externes (packages npm, dépendances Maven, images Docker, etc.). Au fil du temps, ces dépendances accumulent de la dette technique à mesure qu'elles vieilissent et, plus grave encore, peuvent présenter des failles de sécurité.
Le rôle de Dependabot est d'agir comme un veilleur silencieux qui analyse en continu les fichiers de configuration du projet (
package.json,pom.xmletc.) et les compare avec les bases de données de vulnérabilités ainsi qu'avec les dernières version publiées par les mainteneurs de paquets. Son objectif principal est de maintenir le codes des dépendances à jour tout en minimisant l'intervention humaine requise pour efefctuer cette veille technologique.Quelques exemples pour comprendre pourquoi c'est important
Pour illustrer l'interet vital d'un outil automatisé comme Dependabot, il est interessant d'observer la rapidité et l'ampleur que peuvent avoir de récentes attaque de type Supply Chain. Des ces scénarios, les attaquants ne visent pas l'application finale (notre projet par exemple), mais ils infiltrent les bibliothèques que nous utilisons.
Le phishing de Josh Junon (Septembre 2025)
En septembre 2025, une campagne de phishing très sophistiquée a permis de voler les identifiants du compte npm de Josh Junon, mainteneur historique de dizaines de bibliothèques JavaScript fondamentales telles que debug ou chalk. En quelques minutes, les attaquants ont publié des versions malveillantes contenant un crypto-clipper (un malware ayant comme objectif de voler les transactions de cryptomonnaies) dans des paquets cumulant plus de 2,6 milliards de téléchargements hebdomadaires et touchant indirectement près de 34 % de l'écosystème npm.
La compromission d'Axios (Mars 2026)
Encore plus récemment, à la fin du mois de mars 2026, une attaque attribuée à des acteurs étatiques nord-coréens à frappe le client HTTP axios (qui cumule environ 100 millions de téléchargements par semaine). Les attaquants ont pu compromettre le compte du mainteneur pour publier des versions malveillantes qui incluaient silencieusement une nouvelle dépendance (
plain-crypto.js[ici pas d'hyperlien pour des raisons évidentes]) servant de cheval de Troie pour infecter les machines des développeurs et les serveurs d'intégration continue.Quel est le rôle de Dépendabot ?
Face à des compromissions d'une telle envergure, le temps de réaction humain est largement insuffisant. Un projet moyen comporte des milliers de dépendances transitives (dépendances de dépendances). Ainsi, dès que la vulnérabilité à été identifiées et qualifiées dans les bases de données, Dependabot a pu alerter instantanément les milliers d'équipes impactées à travers le monde. Il a également généré automatiquement les Pull Request pour rétrograder ou épingler les versions saines, évitant ainsi aux développeurs de devoir auditer manuellement l'integralité de leurs fichiers.
Étapes d'installation
Activation via l'interface : Dans les paramètres du dépôt GitHub (section "Security and quality" > onglet "Advanced Security"), il suffit d'activer les options "Dependabot alerts" et "Dependabot security updates". C'est cette dernière option qui va se charger d'activer les pull requests automatiques. D'autres options existent comme "Dependabot malware alerts" qui permet d'être notifié en cas de malware (et pas juste pour toute MAJ de sécurité) ou encore "Dependabot version updates" qui permet de génerer des pull requests automatiquement pour garder les dépendances à jour des qu'une nouvelle version est publiée.
Configuration fine (pas effectuée dans ce projet) : Pour un contrôle total il est recommandé de créer un fichier
.github/dependabot.ymlà la racine du projet. Ce fichier permet de définir nottament :Actions effectuées
Scan continu et Alertes : Il détecte les dépendances obsolètes ou vulnérables et génère des alertes de sécurité détaillées dans l'onglet Security de GitHub, en précisant le niveau de criticité.
Création automatique de Pull Requests : Dès qu'une mise à jour est disponible pour corriger une faille ou mettre à jour une version, Dependabot crée une branche isolée et ouvre une PR.
Documentation embarquée : Chaque PR générée inclut les notes de version , le journal des modifications et les commits de la nouvelle version de la dépendance, permettant aux développeurs de comprendre rapidement ce qui a changé.
Regard critique et conclusion
Dependabot est un outil très efficace qui démocratise le concept de DevSecOps. Il réduit drastiquement la surface d'attaque des applications et fait gagner un temps précieux aux équipes.
Cependant, son utilisation présente certaines limites qu'il faut connaître et maîtriser. Le risque principal est la "fatigue des alertes" : si le projet possède beaucoup de dépendances et que Dependabot est configuré pour des mises à jour quotidiennes, les développeurs peuvent être noyés sous les Pull Requests. On a pu le voir dans ce projet : bien que le projet soit "petit" nous avons eu 11 pull requests et 141 alertes de sécurité (dont 17 critiques et 62 hautes). De plus, Dependabot met en lumière une règle du DevOps : l'automatisation des mises à jour n'a de sens que si elle est couplée à une intégration continue robuste. Si le projet manque de tests automatisés, fusionner une PR de Dependabot devient un pari risqué, car une mise à jour (même mineure) peut introduire des changements "breaking changes" qui rendront notre code obsolète. En conclusion, Dependabot est un assistant indispensable, mais il exige en retour une très bonne qualité de code et des tests irréprochables.
Renovate Bot
Présentation générale
Renovate est un outil d'automatisation des dépendances "open-source" et multi-plateformes (GitHub, GitLab, Bitbucket). Contrairement à Dependabot qui est verrouillé sur l'écosystème GitHub, Renovate est devenu le standard de l'industrie pour les projets complexes et multi-langages.
Dans une architecture moderne comme la nôtre (un projet Full Stack avec du Java/Quarkus et de l'Angular), la gestion manuelle des bibliothèques est une tâche titanesque. Renovate agit comme un intendant DevOps : au-delà de la simple veille sécuritaire, il gère proactivement le cycle de vie complet de chaque composant du projet, qu'il s'agisse des librairies de code, des plugins Maven, ou même de la version de Node.js utilisée.
Quelques exemples pour comprendre pourquoi c'est important
L'automatisation avec Renovate ne sert pas qu'à corriger des failles, elle sert à éviter la détrition technologique. Rester bloqué sur des versions obsolètes expose le projet à des risques majeurs :
Quel est le rôle de Renovate Bot ?
Le rôle de Renovate est d'automatiser la maintenance évolutive. Il apporte une dimension stratégique à la maintenance du code :
Étapes d'installation
Installation via GitHub App : Renovate a été installé comme une application externe autorisée sur le dépôt. Contrairement aux outils natifs, il démarre par une "Onboarding PR" pour valider sa configuration avant d'agir.
Tout le pilotage repose sur le fichier renovate.json à la racine. Nous y avons configuré :
Actions effectuées
Résolution des incidents techniques
Sécurité et caractères invisibles (Unicode) :
Lors du scan initial, Renovate a bloqué son exécution après avoir détecté des caractères Unicode cachés (
\u00A0) dans les fichiers HTML du frontend. Ce mécanisme de sécurité protège le dépôt contre les "attaques par homogriphes", où des caractères invisibles sont utilisés pour injecter du code malveillant ou tromper les outils d'analyse. Le problème a été résolu en nettoyant les fichiers via des expressions régulières pour ne conserver que les caractères ASCII standards, garantissant ainsi l'intégrité de la base de code.Gestion des conflits de dépendances (Angular 10) :
Un second blocage est survenu lors de la tentative de mise à jour de zone.js. Le bot proposait une version récente (0.16.x) incompatible avec Angular 10, provoquant une erreur de résolution de dépendances (
ERESOLVE). Pour résoudre ce conflit, une règle de compatibilité a été ajoutée dans le fichier renovate.json afin de brider cette bibliothèque à la version ~0.10.0. Cette intervention démontre l'importance de configurer des garde-fous pour automatiser les mises à jour sans casser la stabilité du framework principal.Regard critique et conclusion
Renovate est un outil de référence pour la maintenance DevOps car il transforme la veille technologique en un flux automatisé, limitant la "fatigue des alertes" par le groupement des PR. Cependant, notre mise en pratique a révélé que son rôle dépasse la simple mise à jour : c'est une véritable sentinelle de sécurité.
L'analyse de nos incidents techniques enrichit ce constat :
Intégrité du code : La détection des caractères Unicode prouve que le bot est un rempart contre les injections malveillantes (type Trojan Source), quitte à bloquer l'automatisation par prudence.
Expertise humaine requise : Les conflits Angular 10 rappellent que l'outil ne remplace pas l'architecte ; une configuration précise est indispensable pour éviter que le bot ne casse la stabilité du framework.
Enfin, l'efficacité de Renovate reste indissociable d'une CI robuste : l'automatisation des mises à jour n'a de valeur que si des tests automatisés valident chaque Pull Request avant leur fusion.
TruffleHog
Présentation générale
TruffleHog est un outil de sécurité scanner (SAST) spécialisé dans la détection de secrets. Initialement conçu pour fouiller l'historique des commits Git, il est aujourd'hui l'un des outils de référence dans l'écosystème DevSecOps. Il agit comme un filet automatisé pour empêcher la fuite accidentelle de données sensibles.
Quel est le rôle de TruffleHog ?
Son rôle est d'analyser le code source et le système de fichiers pour identifier des secrets "hardcodés" (clés API, mots de passe, certificats SSH, tokens cloud). En DevOps, il sert de "Security Gate" dans la pipeline CI/CD : si un secret est détecté, le build échoue et le déploiement est bloqué, protégeant ainsi l'infrastructure de l'entreprise.
Étapes d'installation
Dans ce projet, TruffleHog est installé via GitHub Actions en utilisant Docker. Les étapes sont :
.github/workflows/.actions/checkoutpour récupérer le code.trufflesecurity/trufflehog:latest.filesystem,--fail,--exclude-detectors).Actions effectuées
À chaque "Push" ou "Pull Request", le bot effectue les actions suivantes :
Voic un exemple d'utilisation.
Quand on ajoute intentionnellement des faux mots de passes, observe les logs suivants.
Il classe les mots de passe potentiels par types : ici il détecte un mot de passe Github et AWS. Quand on supprime les mots de passe du fichier mais que l'on laisse des variables anodines, le build fonctionne. On observe ceci dans les actions.
Difficultés rencontrées lors de la mise en place
Une des difficultés rencontrées lors de la mise en place est l'ajustement et la sévérité des détections. Lors des premiers essais TruffleHog cherchait des mots de passes ou des clés API précises (par exemple AWS) et recherchait dans des bases de données réelles pour savoir si ce mot de passe existait réellement. En testant avec des mots de passe fictifs, aucune détection n'avait lieu. Nous avons donc préféré garder une version plus sévère qui détecte tout ce qui ressemble à des mots de passe même s'ils n'existent pas vraiment, quitte à générer des faux positifs, dans une volonté de garantir une protection optimale.
Nous avons aussi appris que supprimer une valeur sensible dans un commit ne suffit pas toujours à rendre le build "vert" si le bot scanne l'historique complet, illustrant la difficulté de nettoyer une chaîne DevOps une fois qu'une erreur a été commise. Enfin, l'utilisation de TruffleHog via une GitHub Action a parfois masqué la logique réelle de l'outil, nous obligeant à passer par une exécution Docker directe pour mieux contrôler le comportement du bot.
Regard critique et conclusion
TruffleHog est un outil extrêmement puissant mais qui nécessite un ajustement fin (fine-tuning). Il peut générer des "faux positifs" sur des fichiers de configuration internes (.git/config). C'est un pilier du "Shift Left Security" (sécuriser le plus tôt possible). Il ne remplace pas une bonne hygiène de développement, mais il offre une ceinture de sécurité indispensable contre l'erreur humaine.
Auto-labeler de Pull Requests
Présentation générale
Afin d'un peu plus pousser l'automatisation du projet, nous avons décidé de créer notre propre bot.
Dans un projet collaboratif, la gestion des Pull Requests peut rapidement devenir chaotique : manque de labels, mauvaise catégorisation, difficulté à prioriser les revues.
Pour répondre à ce problème, nous avons développé un bot simple basé sur GitHub Actions permettant d’assigner automatiquement des labels aux Pull Requests en fonction des fichiers modifiés.
Ce bot agit comme un assistant organisationnel en classifiant automatiquement les contributions (frontend, api, documentation).
Quel est le rôle ce bot ?
Le bot analyse les fichiers modifiés dans une Pull Request et applique automatiquement des labels prédéfinis :
/front/sont modifiés → labelfrontend/api/sont modifiés → labelapi.mdsont modifiés → labeldocumentationCela permet :
Étapes d'installation
Ce bot est implémenté via un workflow GitHub Actions.
(Attention : Il faut s'assurer que les labels existent bel et bien dans le repository au préalable).
Actions effectuées
À chaque ouverture ou mise à jour d’une Pull Request, le bot effectue :
On peut voir les labels rajoutés sur ce test modifiant le readme du dossier front :
Regard critique et conclusion
Ce bot est volontairement simple mais apporte une vraie valeur :
Il permet la réduction du travail manuel, d'avoir une meilleure organisation et une meilleure visibilité sur les contributions. Il facilite également la collaboration en orientant les revues vers les bonnes personnes.
Cependant, il présente certaines limites :
front/).GitHub Actions
Présentation
L'automatisation et la validation du code est une étape primordiale dans une démarche DevOps. Pour répondre à ce besoin, nous avons mis en place un workflow GitHub Actions dédié à l'execution automatique des tests sur la partie frontend. Bien que ces Actions ne soient pas des "Bots", ce sont tout de même des actions automatisées, qui se lancement "d'elles mêmes" et qui peuvent produire un résultat (bloquer / accpeter une PR) en fonction d'un résultat. Ces scripts agissent commes des filets de sécurité qui garantissent que les nouvelles modifications n'introduisent pas de régressons avant d'être intégrées au code principal.
Déclenchement et traçabilité
Le pipeline est configuré avec la directive
on: [pull_request]. Cela permet de déclencher le script uniquement lorsqu'un développeur propose d'intégrer son code via une Pull Request. Le workflow agit ainsi comme un point de contrôle bloquant (Gatekeeper) : si les tests échouent, la fusion est bloquée ou fortement déconseillée.De plus, le workflow utilise les variables de contexte de GitHub (
${{ github.actor }},${{ github.ref }}, etc.) à de nombreuses reprises pour générer des logs dynamiques. Cela offre une excellente traçabilité : on sait immédiatement qui a lancé l'action, sur quelle branche, et par quel événement. Aussi en cas d'erreur on sait exactement oùle problème est survenu.Dréoulement de l'exécution
Le job s'execute sur un environnement virtuel vierge et éphémère hébergé par GitHub. Les différentes étapes sont :
actions/checkout@v4pour cloner le dépôt dans l'environnement virtuel.npm installtélécharge tous les paquets nécessaires au projet (définis dans le package.json).Note
Le flag
--watch=falsepermet de forcer l'arrêt du processus une fois les tests terminés en empechant le modewatchactivé par défaut dans les frameworks.Le flag
--browsers=ChromeHeadlesspermet de simuler un navigateur sans interface graphique afin de simuler le rendu et les interactions du front-end.Conclusion sur le workflow
Cette GitHub Action couvre les besoins fondamentaux de l'intégration Continue. Elle garantit l'intégrité du code et standardise l'environnement de test. Elle agit de manière autonome en se déclenchant quand on en a besoin et sans intervention humaine et en produisant des résultats effectifs (bloquage d'une PR, avertissements etc.).