Merge requests automatiques
Table des matières
Que ce soit à titer personnel ou pour le travail, j’utilise gitlab
. Sur la plupart des side-projects, j’œuvre seul mais le reste du temps, il est normal de passer par des merge requests afin de lancer les tests automatiques et permettre une revue de code en bonne et due forme. Seulement voilà: comme beaucoup, je n’aime pas le clicodrome.
Par chance, gitlab
propose des options disponnible au push pour créer une merge request. Cet article présente un petit script qui m’est bien pratique au quotidien pour ne pas passer trop de temps sur ma souris.
Le code
#!/bin/sh
branch=$(git symbolic-ref --short HEAD)
function help {
echo "Usage"
echo
echo "$0 [options] [-v]"
echo
echo "Options:"
echo " -t title ( defaults to \"Draft: $branch\")"
echo " -d description ( defaults to \"$branch\")"
echo " -b target branch ( defaults to \"master\")"
echo " -v verbose"
}
while getopts ":hvt:d:b:" option; do
case $option in
h)
help
exit;;
\?)
echo Invalid -$OPTARG option
help
exit;;
v) verbose=1;;
t) title=$OPTARG;;
d) description=$OPTARG;;
b) target=$OPTARG;;
esac
done
title=${title:-"Draft: $branch"}
description=${description:-"$branch"}
target=${target:-"master"}
if [ $verbose ]
then
echo "Title would be \"$title\""
echo "Description would be \"$description\""
echo "Target would be \"$target\""
exit
fi
git push -u origin $branch \
-o merge_request.create \
-o merge_request.target="$target" \
-o merge_request.merge_when_pipeline_succeeds \
-o merge_request.remove_source_branch \
-o merge_request.title="$title" \
-o merge_request.description="$description"
L’usage
Le script suivant est à placer dans ~/.local/bin/mr
et à rendre exécutable chmod +x ~/.local/bin/mr
.
❯ mr -h
Usage
/home/pcoves/.local/bin/mr [options] [-v]
Options:
-t title ( defaults to "Draft: $nom_de_la_branche_courante")
-d description ( defaults to "$nom_de_la_brache_courante")
-b target branch ( defaults to "master")
-v verbose
Autrement dit mr -t Tourbilol -d Autruche -b Foobar
créera une merge request nommée Tourbilol
avec Autruche
en description et pour branche cible Foobar
.
À noter que, sur gitlab
, la présence du préfixe Draft:
dans le titre de la merge request permet d’indiquer au collègue que le code n’est pas prêt à être passé au crible d’une revue. S’il y est par défaut, il ne faut pas oublier de le mettre manuellement lors de l’usage du flag -t
.
Amélioration
Une amélioration à laquelle je pense maintenant serait de récupérer la branche par défaut du dépôt courant au lieu de viser master
. De nos jours, on nombre de dépôts ont changé master
pour main
et il n’est pas rare que je préfère viser alpha
dans mon quotidien pour tester au lieu de directement déployer en production.