make_release.sh 2.14 KiB
#!/bin/bash
#
# Simple script to create a new release in a Git repository.
#
# Increase the version number and update the Git repo with the new version
# number and a new annotated tag marking the new release.
#
# By default, this script reads version number from the `VERSION` file and
# increments the patch level (i.e., if `VERSION` contains `maj.min.pat`, this
# scripts will create a release for version `maj.min.(pat+1)`).
#
# Usage:
# <script name> <release-type> [<version-file>]
# where:
# - <release-type>: the type of the release; one of 'major', 'minor' and
# 'patch'.
# [default: 'patch']
# - <version-file>: the file containing the version number.
# [default: 'VERSION']
#
#
# Marco Guazzone (marco.guazzone@gmail.com)
#
default_release_type=patch
default_version_file=VERSION
release_type=$default_release_type
version_file=$default_version_file
if [ $# -gt 0 ]; then
release_type=$1
if [ $# -gt 1 ]; then
version_file=$2
fi
fi
if [ ! -e "$version_file" ]; then
echo "Version file '$version_file' not found. Created a new one for version '0.0.0'"
echo "0.0.0" > $version_file
fi
version=$(cat $version_file)
IFS='.' read -r major_version minor_version patch_version <<<"$version"
case "$release_type" in
major)
major_version=$((major_version+1))
minor_version=0
patch_version=0
;;
minor)
minor_version=$((minor_version+1))
patch_version=0
;;
patch)
patch_version=$((patch_version+1))
;;
*)
echo "Usage: $0 <release-type> [<version-file>]"
echo "where:"
echo "- <release-type> is one of 'major', 'minor', 'patch'. [default: '$default_release_type']"
echo "- <version-file> is the path to the file containing the version number. [default: '$default_version_file']"
exit 1
;;
esac
new_version="${major_version}.${minor_version}.${patch_version}"
cp -f $version_file $version_file.bak \
&& echo "$new_version" > $version_file \
&& git add $version_file \
&& git ci -m "Bumped version number to $new_version" \
&& git tag -a "v${new_version}" -m "Released version $new_version." \
&& git push --follow-tags \
&& rm -f "$version_file.bak"
if [ $? -ne 0 ]; then
echo "Something went wrong! Please check your repo."
exit 1
fi