#!/bin/bash
usage() {
cat <<<EOF
USAGE: $0 OPTIONS
Prépare une application à la mise en Prod
Crée un tag qui correspond à la prochaine version à publier
Doit être lancé dans le répertoire de base des sources de l'application
(celui qui contient le.git)
OPTIONS:
-h affiche ce message
-m Incrémente la version mineure
-M Incrémente la version majeure
-p publier en preprod (TODO)
-P publier en Prod (TODO)
EOF
}
b='$3+1'; m='$2'; M='$1';
while getopts "mMhPpl" OPTION
do
case $OPTION in
h)
usage
exit 1
;;
m) b='0'; m='$2+1'; M='$1';
;;
M) b='0'; m='0'; M='$1+1';
;;
p) preprod=1
;;
P) prod=1;
;;
esac
done
# vérification que tout est à jour
# on ne peut publier de nouvelle version que si on est à jour par rapport
# au dépôt distant et qu'il n'y a pas de modifs en cours
test=$(git fetch --dry-run | wc -l)
if [ "$test" -ne "0" ]
then
echo "la copie locale n'est pas à jour. git -> remote -> pull"
exit 1
fi
test=$(git push --dry-run 2>&1 | grep "Everything up-to-date" | wc -l)
if [ "$test" -ne "1" ]
then
echo "le repository distant n'est pas a jour. git -> remote -> push"
exit 1
fi
test=$(git commit --dry-run | grep "nothing to commit" | wc -l)
if [ "$test" -ne "1" ]
then
echo "Des modifications sont en cours. git -> commit"
exit 1
fi
# récupération du dernier numéro de version de la forme Vx.y.z
# last_ver=$(git describe --tags)
last_ver=$(git tag --list | grep "V[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" | sort -V | tail -n1)
new_ver=$(echo $last_ver | sed -e 's/V//'| awk -F\. "{ printf(\"V%d.%d.%d\n\", $M,$m,$b); }")
git tag $new_ver
git push --tags