Nous avons vu dans un précédent article le plugin sbt-dynver qui permet de versionner votre code en se basant sur les tags Git. Il manquait un processus de release automatisé tout comme sbt-release tout en restant plus léger.
Voici un script permettant d'effectuer ce processus de release. Il effectue les tâches suivantes :
- Vérifier que vous êtes sur la branche prévue pour les releases.
- Vérifier s'il n'y a pas de modifications non commitées.
- Lire et vérifier le nouveau numéro de version (en affichant la version actuelle).
- Création du tag en se basant sur le nouveau numéro de version.
- Pousser toutes les dernières modifications (tag inclus) sur le repo distant
#!/bin/sh
# Release script
#
# This script asks the user for the new version tag and push the
# code with the new tag.
#
# You should:
# - have release based on Git tags
# - be in your main branch
# - have a tag that starts with 'v' and the rest looks like
# [semver](https://semver.org/)
release_branch=master
remote_repository=origin
version_tag_regexp='v[0-9]+(\.[0-9]+)+(-.*)?'
# check current branch
current_branch=$(git branch --show-current)
if [ "$current_branch" != "$release_branch" ]; then
echo "current branch is not $release_branch (current: $current_branch)"
exit 1
fi
# check there are no uncommitted files
modified_files=$(git ls-files --modified --deleted --exclude-standard --others)
if [ "$modified_files" != "" ]; then
echo "those files have been modified, deleted, and/or added:"
echo "$modified_files"
exit 1
fi
# get the last available tag
last_tag=$(git tag --list --sort=-v:refname | grep -E "$version_tag_regexp" | head -n 1)
# read and check the new tag
read -r -p "Enter new version (prefix with 'v') [last version:$last_tag]: " new_tag
if [ "$new_tag" = "" ]; then
echo "the tag input is empty"
exit 1
fi
if [ "$(echo "$new_tag" | grep -E "$version_tag_regexp")" = "" ]; then
echo "bad tag format: $new_tag"
exit 1
fi
# proceed the new release
echo "set version to $new_tag"
git tag "$new_tag" -m "Set version to $new_tag"
echo "push new tag and last commit to remote"
git push --atomic "$remote_repository" "$release_branch" "$new_tag"
Mettez ce script dans un fichier nommé release.sh
. Rendez-le exécutable et ajoutez son répertoire dans votre PATH ou déposez-le dans un sous-répertoire dédié aux scripts dans votre projet.