Utiliser Dist::Zilla pour vos distributions
Introduction
Toute personne ayant écrit des modules Perl disponible sur le CPAN, sait à quel point il peut être lourd de maintenir les fichiers pour l'installation de la distribution, sans parler des erreurs potentiels. C'est là qu'intervient Dist::Zilla initié par Ricardo Signes avec comme slogan Rooar, car lui aussi préfère se concentrer sur le code de son projet, plutôt que sur des licences et autres.
Rappel
Une distribution est une archive tar compressé, versionné car il arrive qu'il y est des fixes de bugs ou l'ajout de nouvelle fonctionalité, une distribution répond à un certains nombres de convention pour diverses raisons mais notamment pour pouvoir être installé via des clients comme cpanm par exemple. Une distribution contient un certains nombres de choses, du code pour commencer, les modules se trouvent dans le répertoire lib à la racine du projet et respecte une certaine hiérarchie. Il se peut aussi que la distribution soit accompagné de programmes ou d'outils, qu'on trouve dans le répertoire bin. Elle contient aussi un script d'installation qui peut utiliser soit ExtUtils::MakeMaker qui génère un makefile, soit Module::Build. Une distribution contient aussi un fichier appelé Manifest contenant la liste des fichiers du projet. Des tests et de la documentation. Voilà principalement ce que contient une distribution, il peut y avoir d'autres choses, mais ce sont les principales.
Des conventions
Il y a aussi un certains nombres de convetions que le code se doit de respecter. La fsf recommande que chaque fichiers contienne l'en-tête avec le copyleft, que l'on peut retrouver dans beaucoup de projets. Chaque module doit aussi contenir des paragraphes, AUTHOR, LICENSE, NAME et de la documentation.
Les solutions
Il existe plusieurs solutions pour créer sa distribution, mais aucune qui facile la tache de l'auteur, avec beaucoup de choses redondante à faire qui ne sont pas très amusante. Il y a ExtUtils::MakeMaker et Module::Build pour écrire le script d'installation et générer les fichiers MANIFEST et meta.yml, ce qui va créer l'archive tar, il faut néanmoins penser à lancer la commande pour mettre à jour les fichiers. Il y a Module::Starter qui génére les différents fichiers nécessaire et module un squelette. Il y aussi Module::Release qui permet de pousser la distribution sur différents sites. Ce sont de bon point de départ, mais ce n'est pas suffisant, il reste un gros travail pour l'auteur de la distribution.
Le graal
C'est là que Dist::Zilla rentre en scéne. En plus d'aider dans la création de la distribution, Dist::Zilla posséde un grand nombre de plugin pour aller encore plus loin. Il sera utilisé uniquement par l'auteur de la distribution, la distribution sera la même qu'une distribution classique et s'installera de la même manière.
Installation
Pour l'installation comme pour n'importe quel module, il suffit d'utiliser un client cpan.
cpanm Dist::Zilla
C'est un projet assez lourd avec un certains nombres de dépendances, mais ce n'est pas très important aux vues des facilités apporté ensuite pour la création de distrubtion, sans compter qu'aujourd'hui on est capable de gérer correctement des dépendances et comme-dit il sera utilisé uniquement par l'auteur de la distribution, donc invisible pour l'auteur final, dans son côté il n'aura pas toutes ses dépendances.
Fonctionnement
Pour utiliser Dist::Zilla pour sa distribution, il faut un fichier dist.ini à la racine de son projet. Dans ce fichier sera présent différentes informations statiques et les différents plugin à utiliser pour créer la distribution. Voici un exemple de configuration:
name = Dancer-Plugin-RequireSSL
author = Hobbestigrou
license = Perl_5
copyright_holder = Hobbestigrou
copyright_header = 2012
[AutoVersion]
major = 0
; -- Remove files
[GatherDir]
[PruneCruft]
[ManifestSkip]
; -- Get prereqs
[AutoPrereqs]
; -- Munge files
[NextRelease]
[PkgVersion]
[PodWeaver]
[Prepender]
copyright = 1
; -- Generate meta files
[License]
[MakeMaker]
[ModuleBuild]
[MetaYAML]
[Readme]
[InstallGuide]
[Manifest]
; -- Release
[CheckChangeLog]
[Git::Commit]
[Git::Tag]
[Git::Push]
[UploadToCPAN]
Utilisation
Une fois la configuration effectué, il faut utiliser la commande dzil pour effectuer ses différentes actions.
Pour lancer les tests:
dzil test
Pour créer la distribution:
dzil build
Pour installer la distribution:
dzil install
Pour publier la distribution:
dzil release
Pour créer un projet contentant une configuration de base:
dzil new Nom::Projet
Ce qui fait déjà gagner quelques commandes en moins à taper. Je ne vais pas aller plus loin, car plutôt que d'écrire un énorme article long à écrire et à lire, je préfère découper en petit article, je présenterai des plugins intéressants et que j'utilise au fil du temps.
Conclusion
Dist::Zilla est vraiment un projet que je trouve formidable qui facilite beaucoup le travail de l'auteur, en automatisant toutes les taches redondantes à la création d'une distribution. Il y aussi énormément de plugins très intéressants qui permette d'allers encore plus loin. Il fait partit des outils dont je ne peux plus me séparer, et je pense que toutes auteurs devrait au moins l'avoir essayé pour se faire son opinion. En attendant de prochains articles, je vous conseille de lire l'article Dist-Zilla - distribution simplifiée pour auteur CPAN duquel je me suis inspiré pour cette article, écrit par Jérôme Quelin et paru dans Gnu/linux magazine 128 de juin 2010, très complet qui donne toutes les cartes pour commencer à utiliser Dist::Zilla pour ses distributions.