#!/bin/bash ##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*- ##### release a version of FreeSWITCH sdir="." [ -n "${0%/*}" ] && sdir="${0%/*}" . $sdir/ci/common.sh check_pwd showusage() { cat >&2 < DESCRIPTION Creates a new FreeSWITCH tag after performing some sanity checks. The tag is optionally signed if '-s' is provided, but you should really sign any public release tags, so pass '-s'. follows the format: 1.2-alpha3 1.2-beta3 1.2-rc3 1.2 1.2.13-rc4 1.2.13 etc. This tool will take care of correctly naming the tag to be consistent with FreeSWITCH git policy from there. OPTIONS -s Signs the resulting tag. -d Debug mode. Remove the tag after creating it and don't warn about the lack of a signature. EOF exit 1; } opts="" debug=false while getopts "ds" o; do case "$o" in d) debug=true ;; s) opts="-s" ;; esac done shift $(($OPTIND-1)) if [ -z "$1" ]; then showusage fi eval $(parse_version "$1") ngrep () { (echo "$2" | grep -e "$1" >/dev/null); } err () { echo "$1" >&2; exit 1; } ngrep '^[1-9]*$' "$gmajor" || \ err "The major version '$gmajor' appears invalid." ngrep '^[0-9]*$' "$gminor" || \ err "The minor version '$gminor' appears invalid." [ -z "$gmicro" ] || ngrep '^[0-9]*$' "$gmicro" || \ err "The micro version '$gmicro' appears invalid." [ -z "$grev" ] || ngrep '^[.-]' "$grev" || \ err "The revision '$grev' appears invalid." echo "We're going to release freeswitch v$gver" >&2 echo >&2 if ! ($debug || ngrep '-s' "$opts"); then cat >&2 <&2 read r [ -z "$r" ] && continue if [ "$r" = yes ] || [ "$r" = y ]; then (echo; echo "OK, I believe you."; echo) >&2 break else (echo; echo "This is a bad idea then."; echo) >&2 fi while true; do echo -n "Are you really really sure? (yes/no): " >&2 read r [ -z "$r" ] && continue if [ "$r" = yes ] || [ "$r" = y ]; then (echo; echo "As you wish, you've been warned."; echo) >&2 break else (echo; echo "Great; go setup a GPG key and try again with -s"; echo) >&2 exit 1 fi break done break done fi echo "Saving uncommitted changes before tagging..." >&2 ret=$(git stash save "Save uncommitted changes before tagging.") if (ngrep '^Saved' "$ret"); then stash_saved=1 fi echo "Determining next-release (release+1) version..." >&2 if [ -n "$grev" ] && ngrep '[0-9]*$' "$grev"; then rev_ver="$(echo "$grev" | sed -e 's/^[^0-9]*\([0-9]*\)$/\1/')" next_rev="$((rev_ver+1))" next_ver="${gver%%$rev_ver}${next_rev}" elif [ -n "$grev" ]; then next_ver="${gver}1" elif ! [ "$gmicro" = "0" ]; then next_ver="${gver%%$micro}$((micro+1))" else next_ver="${gmajor}.$((gminor+1))-rc1" fi echo "Setting next-release version ($next_ver)..." >&2 echo "${next_ver}" > build/next-release.txt git add build/next-release.txt echo "Changing the version of configure.ac..." >&2 set_fs_ver "$gver" "$gmajor" "$gminor" "$gmicro" "$grev" echo "Committing the new version..." >&2 git add configure.ac if ! (git commit --allow-empty -m "release FreeSWITCH $gver"); then cat >&2 <&2 if ! (git tag -a ${opts} -m "FreeSWITCH $gver" "v$gver"); then cat >&2 <&2 git tag -d "v$gver" || true git reset --hard HEAD^ || true fi if [ -n "$stash_saved" ]; then echo "Restoring your uncommitted changes to your working directory..." >&2 git stash pop >/dev/null fi cat 1>&2 <