Dagger SonarQube
Nous commençons à prendre en main Dagger avec nos différents tests précédents, mais il ne faut pas oublier de vérifier notre qualité logicielle ! 😎
SonarQube
SonarQube est un outil de qualité logicielle open source qui permet de vérifier la qualité de notre code en s’appuyant des bonnes pratiques, clean code. SonarQube
Il y a bien sûr d’autres fonctionnalités, mais ce n’est pas le sujet, ici on va voir comment faire l’analyse sonar dans notre CI/CD avec Dagger.
Il existe un module pour Dagger, mais je n’ai pas réussi à le faire fonctionner avec l’URL d’un sonar self hosted.
J’essayerai de faire une Pull Request ou une Issue au mainteneur du module pour résoudre ce problème (Ou peut être une skill issue 🫣)
On va donc le faire nous même ! Au final c’est juste un container SonarCLI donc ça ne devrait pas être difficile.
Intégration
On va donc reprendre notre projet lib-acl-json.
Nous avons déjà les fonctions suivantes qui permettent d’installer les packages et de réaliser les tests unitaires.
Sonar scanner CLI
Comme Dagger nous permet de lancer de travailler avec des conteneurs nativement, nous allons en profiter et utiliser l’image de Sonnar Scanner
Voici la fonction de scan :
Nous allons faire en async comme les tests pour bien attendre la fin de l’analyse avant de passer à la suite.
.stdout()
permet de retourner le résultat en string, donc notre promise est bien un string, si vous souhaitez, vous pouvez le retirer pour retourner une Promise container
Nous avons besoin aussi de lancer l’analyse en root avec .withUser("root")
, sinon le container n’aura pas les droits pour l’analyse.
Voici quelques informations à propos de la fonction, on test ??
On va d’abord mettre notre token en ENV :
Et maintenant on lance notre fonction avec dagger call :
Notre analyse c’est réalisé avec succès ! 🎉
Mais, la nous avons pas le code coverage dans sonar car nous n’avons pas réalisé la fonction de tests et récupérer les fichiers générés par bun test
.
On va donc créer une fonction pour exécuter les différentes fonctions.
On return preBuild, pour avoir le répertoire avec le bun install afin de build le projet plus tard dans une autre fonction.
On va stocker le Directory après les tests dans notre variable unitTest, comme ça, nous aurons les résultats de coverage pour l’analyse sonar.
Lançons notre fonction minimal
Résultat :
Nous voyons que nous avons bien le bun install, ensuite le test et enfin notre analyse sonar.
Nous avons bien notre % de coverage du projet sur notre interface sonar.
Pourquoi faire un fonction minimal ?
La fonction minimal va permettre aux développeurs de lancer l’analyse sonar sans forcement build tout le projet. Puis s’ils veulent build le projet juste après, le cache de Dagger va rendre le processus plus rapide.
Voici mon fichier index.ts au complet :
Je vais juste lancer un build pour vous montrer la mécanique de cache.
4,4s le build !
Comme nous utilisons le cache, il y a juste l’étape du build à réaliser finalement.
Conclusion
Comme vous l’avez vu, l’intégration est vraiment simple, étant donné que la plupart des outils est maintenant conteneurisé, cela nous facilite le travail et optimise le processus de CI/CD. C’est aussi ce qui rend Dagger très efficace, il permet de réaliser des pipelines en local qui sera très proche de l’environnement de production grâce aux conteneurs.
Github
Lien du projet : lib-acl-json