From 985fad9e32813b840ebd918e1303219fdd5bbba1 Mon Sep 17 00:00:00 2001 From: Travis Cross <tc@traviscross.com> Date: Mon, 7 May 2012 21:34:08 +0000 Subject: [PATCH] prepare the tag script for the new release --- scripts/ci/common.sh | 10 ++++ scripts/tagscript.sh | 125 ++++++++++++++++++++++++++----------------- 2 files changed, 85 insertions(+), 50 deletions(-) diff --git a/scripts/ci/common.sh b/scripts/ci/common.sh index 5967ae8262..ef191676b3 100755 --- a/scripts/ci/common.sh +++ b/scripts/ci/common.sh @@ -37,6 +37,11 @@ parse_version () { micro="0" ver="${major}.${minor}${rev}" fi + gver="$(echo "$ver" | sed -e 's/[~_]/-/')" + grev="$(echo "$rev" | sed -e 's/[~_]/-/')" + gmajor="$major" + gminor="$minor" + gmicro="$micro" [ -n "$crev" ] && cver="${cver}.${crev}" echo "ver='$ver'" echo "major='$major'" @@ -48,6 +53,11 @@ parse_version () { echo "cminor='$cminor'" echo "cmicro='$cmicro'" echo "crev='$crev'" + echo "gver='$gver'" + echo "gmajor='$gmajor'" + echo "gminor='$gminor'" + echo "gmicro='$gmicro'" + echo "grev='$grev'" } set_fs_ver () { diff --git a/scripts/tagscript.sh b/scripts/tagscript.sh index 91f37bceb0..005fab5499 100755 --- a/scripts/tagscript.sh +++ b/scripts/tagscript.sh @@ -2,20 +2,38 @@ ##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*- ##### release a version of FreeSWITCH -src_repo="$(pwd)" +sdir="." +[ -n "${0%/*}" ] && sdir="${0%/*}" +. $sdir/ci/common.sh -if [ ! -d .git ]; then - echo "error: must be run from within the top level of a FreeSWITCH git tree." 1>&2 - exit 1; -fi +check_pwd showusage() { - echo "usage: ./scripts/tagscript.sh [-s] MAJOR.MINOR.MICRO[.REVISION]" 1>&2 + cat >&2 <<EOF +usage: $0 [-s] <version> + +where <version> follows the format: + +1.2-alpha3 +1.2-beta3 +1.2-rc3 +1.2 +1.2.13-rc4 +1.2.13 +etc. + +I'll take care of correctly naming the tag to be consistent with +FreeSWITCH git policy from there. + +EOF exit 1; } -while getopts "s" o; do +opts="" +debug=false +while getopts "ds" o; do case "$o" in + d) debug=true ;; s) opts="-s" ;; esac done @@ -25,67 +43,74 @@ if [ -z "$1" ]; then showusage fi -ver="$1" -major=$(echo "$ver" | cut -d. -f1) -minor=$(echo "$ver" | cut -d. -f2) -micro=$(echo "$ver" | cut -d. -f3) -rev=$(echo "$ver" | cut -d. -f4) +eval $(parse_version "$1") -dst_name="freeswitch-$major.$minor.$micro" -dst_dir="$src_repo/../$dst_name" +ngrep () { grep -e "$1" >/dev/null; } -if [ -d "$dst_dir" ]; then - echo "error: destination directory $dst_dir already exists." 1>&2 - exit 1; +if ! $debug && ! (echo "$opts" | ngrep '-s'); then + cat >&2 <<EOF +You've asked me to tag a release but haven't asked to me sign it by +passing -s. I'll do this if you really want, but it's a bad idea if +you're making an actual release of FreeSWITCH that'll be seen +publicly. + +EOF + while true; do + echo -n "Is this just a test tag? (yes/no): " >&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 -# save local changes +echo "Saving uncommitted changes before tagging..." >&2 ret=$(git stash save "Save uncommitted changes before tagging.") -if echo $ret | grep "^Saved"; then +if (echo "$ret" | ngrep '^Saved'); then stash_saved=1 fi -sed -e "s|\(AC_SUBST(SWITCH_VERSION_MAJOR, \[\).*\(\])\)|\1$major\2|" \ - -e "s|\(AC_SUBST(SWITCH_VERSION_MINOR, \[\).*\(\])\)|\1$minor\2|" \ - -e "s|\(AC_SUBST(SWITCH_VERSION_MICRO, \[\).*\(\])\)|\1$micro\2|" \ - -e "s|\(AC_INIT(\[freeswitch\], \[\).*\(\], BUG-REPORT-ADDRESS)\)|\1$major.$minor.$micro\2|" \ - -i configure.in - -if [ -n "$rev" ]; then - sed -e "s|\(AC_SUBST(SWITCH_VERSION_REVISION, \[\).*\(\])\)|\1$rev\2|" \ - -e "s|#\(AC_SUBST(SWITCH_VERSION_REVISION\)|\1|" \ - -i configure.in -fi +echo "Changing the version of configure.in..." >&2 +set_fs_ver "$gver" "$gmajor" "$gminor" "$gmicro" "$grev" +echo "Committing the new version..." >&2 git add configure.in -git commit -m "Release freeswitch-$ver" -git tag -a ${opts} -m "freeswitch-$ver release" v$ver +git commit -m "Release freeswitch-$gver" +echo "Tagging freeswitch v$gver..." >&2 +git tag -a ${opts} -m "freeswitch-$gver release" "v$gver" -git clone $src_repo $dst_dir if [ -n "$stash_saved" ]; then - git stash pop + echo "Restoring your uncommitted changes to your working directory..." >&2 + git stash pop >/dev/null fi -cd $dst_dir - -./bootstrap.sh -mv bootstrap.sh rebootstrap.sh -rm -f docs/AUTHORS -rm -f docs/COPYING -rm -f docs/ChangeLog -rm -rf .git -cd .. -tar -cvf $dst_name.tar $dst_dir -gzip -9 -c $dst_name.tar > $dst_name.tar.gz || echo "gzip not available" -bzip2 -z -k $dst_name.tar || echo "bzip2 not available" -xz -z -9 -k $dst_name.tar || echo "xz / xz-utils not available" -rm -rf $dst_name.tar $dst_dir - cat 1>&2 <<EOF ---------------------------------------------------------------------- -The v$ver tag has been committed locally, but it will not be +The v$gver tag has been committed locally, but it will not be globally visible until you 'git push --tags' this repository up to the server (I didn't do that for you, as you might want to review first). + + Next step: + + git push --tags ---------------------------------------------------------------------- EOF