Tests unitaires sur un dépôt Mercurial avec Drone.io

Support Mercurial pour Drone.io

XCG utilise Mercurial de façon intensive en plus de Git. Nous faisons aussi beaucoup de tests unitaires. Pendant très longtemps, nous avons utilisé Hudson – devenu Jenkins – pour piloter le lancement des tests de façon automatique à chaque "commit".

Mais cela demande pas mal de patience pour mettre au point des recettes qui fonctionnent correctement sans effets de bords.

De plus, les recettes de tests sont stockées et gérées dans l'interface Jenkins plutôt que dans le code source du projet que l'on souhaite tester, ce qui ajoute une couche de complexité dans la gestion et lors de changements d'environnement.

Et puis est arrivé Drone.io.

Drone.io est l'un des derniers nés dans la série des outils de CI (Continuous Integration) et a été écrit à l'origine pour proposer un service SaaS (Software as a Service). Mais les auteurs de la solution ont décidé de mettre le logiciel en OpenSource sur github et de baser la prochaine version de leur offre SaaS dessus.

Drone.io supporte nativement le DVCS Git et les plateformes de hosting github, bitbucket et gitlab. De plus, il dispose d'un système de plugin qui permet assez facilement d'ajouter une plateforme supplémentaire du moment que celle-ci fournit une API (Application Programing Interface) pour manipuler les projets et peut utiliser des « post commit hooks » pour prévenir Drone.io lors d'un commit.

Par contre, le support de Mercurial était manquant, ce qui nous empêchait d'utiliser Drone.io pour l'ensemble de notre base de code. 

Drone.io étant OpenSource et écrit en Go, il nous était alors assez facile d'aller jeter un œil dans le code source et d'ajouter les fonctionnalités dont nous avions besoin. 

Nous avons donc apporté le support de Mercurial pour les projets hébergés sur Bitbucket (puisque github ne propose pas l'hebergement Mercurial) et proposé une « pull request » aux auteurs du projet, intégrée au standard depuis.

 Afin d'utiliser Mercurial avec Drone.io, il faudra utiliser une image Docker contenant le binaire « hg ». Nous avons publié une image que nous utilisons pour tester des projets Python et qui permet de compiler les dépendances.

 Cette image est disponible sur la registry Docker sous le nom django_xcgd/dronebase. 

Un packaging debian/ubuntu de notre version modifiée de Drone.io est disponible sur un dépôt privé en attendant l'inclusion dans le standard.