Validation de pull request Github avec "lgtm"

22/04/2016

Les “code reviews” sont souvent sous-estimées alors qu’elles sont une des phases les plus importantes pour la pérennité d’un projet et son bon fonctionnement. LGTM.co propose une solution pour renforcer un peu cette phase.

Avant toute chose, ce que je vais vous montrer ne remplace pas Gerrit. Mais il arrive que, par manque de temps, manque de moyens ou d’infrastructure, vous ne puissiez pas en profiter. C’est donc un outil super intéressant que j’ai testé pour vous: LGTM qui est un commentaire fréquemment utilisé pour dire “Looks Good To Me” (traduction: “ça semble correct”). Ce commentaire va être utilisé par un outil externe lgtm.co qui se connecte en tant qu’application tierce sur GitHub.

Comment ça marche ?

Il suffit de se connecter avec son compte github sur lgtm.co et d’activer la gestion de code-review:

Il faut ensuite impérativement ajouter un fichier “MAINTAINERS” qui doit lister les mainteneurs dont les commentaires seront comptabilisés. Voir: https://lgtm.co/docs/maintainers/ Il en faut un par ligne.

Là par contre j’ai eu un léger bug et la forme suivante ne passait pas:

Patrice FERLET <metal3d@...> (@metal3d)

Donc pour le moment j’utilise:

metal3d <metal3d@...>

Si besoin, vous pouvez aussi ajouter un fichier “.lgtm” pour modifier le nombre de review minimale (2 par défaut), la forme du commentaire (LGTM par défaut), etc. Voir https://lgtm.co/docs/customize/

Pour le test, j’ai demandé à un collègue de se prêter au jeu et j’ai limité le nombre de review à 1:

approvals = 1
pattern = "(?i)LGTM"

Notez que j’ai bien aussi le “pattern” pattern = "(?i):\\+1:" qui fait apparaitre un pouce jaune :)

Bref, à vous de décider.

Phase de review

La phase est assez simple:

  • quand une pull-request est créé, LGTM va “bloquer” la possibilité de la merger
  • quand un nombre de review positive est atteint, le bouton “merge” est déverrouillé

L’idée est super simple:

  • vous paramétrez lgtm pour définir le nombre de reviews positives minimales à trouver
  • qui sont les “mainteneurs” dont les commentaires seront comptabilisé
  • vous laissez faire

Et pour les dépôts privés ou entreprise ?

Là c’est un peu plus compliqué, mais ce n’est pas non plus l’enfer. La licence du projet est assez claire:

Licensing

This product is free for small teams and non-profits, however, we will require a modest licensing fee for on-premise enterprise use in the near future. Pricing to be published soon.

-- https://lgtm.co/docs/install/

Et je ne connais pas vraiment le tarif… Mais bon, passons au test.

En gros, il suffit de faire tourner le conteneur Docker:

$ docker pull lgtm/lgtm
$ docker run \
    --volume /var/lib/lgtm:/var/lib/lgtm \
    --env-file /etc/lgtm/lgtmrc \
    --restart=always \
    --publish=80:8000 \
    --detach=true \
    --name=lgtm \
    lgtm/lgtm

Il faut bien entendu mettre les clefs d’accès GITHUB dans le fichier “/etc/lgtm/lgtmrc“:

GITHUB_URL=https://github.mycompany.com
GITHUB_SCOPE=user:email,read:org,repo
GITHUB_CLIENT=
GITHUB_SECRET=

Bilan

On est en train de proposer ça à nos équipes, le but étant d’éviter l’auto-validation de masse et d’ajouter un côté ludique à la phase de “review”.

Je le répète, ça ne remplace pas Gerrit, mais ça peut franchement ajouter une valeur de plus à votre gestion de projet.

Ça peut vous intéresser aussi


Faire une présentation avec deux écrans sous linux

Demain matin je vais présenter au BlendWebMix une petite conférence mais ...

Merci de m'aider à financer mes services

Si vous avez apprécié cet article, je vous serai reconnaissant de m'aider à me payer une petite bière :)

Si vous voulez en savoir plus sur l'utilisation de flattr sur mon blog, lisez cette page: Ayez pitié de moi

Commentaires

Ajouter un commentaire

Ajouter un commentaire

(*) Votre e-mail ne sera ni revendu, ni rendu public, ni utilisé pour vous proposer des mails commerciaux. Il n'est utilisé que pour vous contacter en cas de souci avec le contenu du commentaire, ou pour vous prévenir d'un nouveau commentaire si vous avez coché la case prévue à cet effet.