206 lines
5.5 KiB
Bash
Executable File
206 lines
5.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#=============================================================================
|
|
# bash script to assist in creating a new library release.
|
|
# Created by Bill Perry 2016-08-01
|
|
# bperrybap@opensource.billsworld.billandterrie.com
|
|
#
|
|
# the script will:
|
|
# - update version strings in the library files.
|
|
# optionally:
|
|
# - commit updated files
|
|
# - create tag using supplied revision string
|
|
#
|
|
#
|
|
# To use, just run script.
|
|
# if argument is given it will be assumd to be the revision string
|
|
# if not, it will prompt for input.
|
|
#
|
|
# script will prompt to optionally commit updates, & tag the updated repo
|
|
#
|
|
# Note:
|
|
# It is recommend that all other change be commited prior to running script
|
|
#
|
|
#=============================================================================
|
|
|
|
# location of root repository directory relative to directory where script lives
|
|
repodir=../..
|
|
|
|
#get name & location of this script
|
|
progname=`basename $0`
|
|
progwd=`dirname $0`
|
|
|
|
# pre/post/patcher scripts
|
|
# (assume in same dirctory with this scketh)
|
|
PREPATCHER=$progwd/mkreleasePrePatcher
|
|
PATCHER=$progwd/mkreleasePatcher
|
|
POSTPATCHER=$progwd/mkreleasePostPatcher
|
|
|
|
|
|
#make sure script running where script lives
|
|
cd $progwd
|
|
|
|
# check to see if on master branch and ask to proceed if not
|
|
git rev-parse --abbrev-ref HEAD |grep -q master
|
|
if [ $? -ne 0 ]
|
|
then
|
|
while
|
|
read -e -p "Not on master branch; continue?:" -i "n" yesno
|
|
[ "$yesno" = "" ]
|
|
do
|
|
:;
|
|
done
|
|
fi
|
|
if [ "$yesno" = "n" ]
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
# check to see if there are uncommitted changes and ask to proceed if so
|
|
git diff-index --quiet HEAD --
|
|
if [ $? -ne 0 ]
|
|
then
|
|
while
|
|
read -e -p "Uncommitted changes; continue?:" -i "n" yesno
|
|
[ "$yesno" = "" ]
|
|
do
|
|
:;
|
|
done
|
|
fi
|
|
if [ "$yesno" = "n" ]
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
|
|
#check to see if version string passed in
|
|
#if not then ask for it interactively
|
|
if [ $# = 1 ]
|
|
then
|
|
rawverstr=$1
|
|
else
|
|
while
|
|
read -e -p "Version:" rawverstr;
|
|
[ "$rawverstr" = "" ]
|
|
do
|
|
:;
|
|
done
|
|
fi
|
|
|
|
#
|
|
# create RETARDED SemVer compliant Revision string by sanitizing input string
|
|
# http://semver.org/
|
|
# this uses sed to alter a string to be @#$@$ SEMVER compliant
|
|
# it will work as long as the version used starts with a version number that is
|
|
# either 2 digits or 3 digits. Example 1.0 1.0.0
|
|
# string will be massaged to ensure compliance should tags used not be SEMVER
|
|
# compliant. i.e. v1.2rc1 will be turned into 1.2.0-rc1
|
|
#
|
|
# shown here is how each "-e" works:
|
|
# - strip out leading a leading leading non numeric chars (like 'v')
|
|
# will change a tag of v1.0 to 1.0 trailing strings after digits are left alone
|
|
#
|
|
# - convert 2 digit version numbers to 3 digit numbers
|
|
# will change #.# to #.#.0 trailing strings are left alone
|
|
#
|
|
# - change a period after the 3rd version digit to a dash
|
|
# will change #.#.#.foo to #.#.#-foo
|
|
#
|
|
# - insert a "-" afer the 3rd version digit if the character is not already a - or a +
|
|
# handles case of changing #.#.#foo to #.#.#-foo
|
|
#
|
|
#
|
|
VERSIONSTR=$(echo $rawverstr | sed -e 's/^\([^0-9]*\)\(.*\)/\2/' -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\)\($\|[^\.].*\|\.[^0-9].*\)/\1.0\2/' -e 's/^\([0-9][0-9]*\.[0-9][0-9]*.[0-9][0-9]*\)\.\(.*\)/\1-\2/' -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\([^0-9+-].*\)/\1-\2/')
|
|
|
|
#extract out the major, minor, and point version numbers from the semver version string
|
|
MAJ=$(echo $VERSIONSTR | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\(.*\)/\1/')
|
|
MIN=$(echo $VERSIONSTR | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\(.*\)/\2/')
|
|
PT=$(echo $VERSIONSTR | sed -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)\(.*\)/\3/')
|
|
|
|
#debug
|
|
#echo VERSIONSTR $VERSIONSTR
|
|
#echo MAJ $MAJ
|
|
#echo MIN $MIN
|
|
#echo PT $PT
|
|
|
|
# create a single numeric version number from the components.
|
|
# format is MMmmPP so each version digit consumes two decimal digits
|
|
# leading zeros are dropped to prevent number being octal
|
|
# Examples:
|
|
# 1.2.3 would be 10203
|
|
# 1.0.0 would be 10000
|
|
# 0.5.0 would be 500 (can't start with 0 as that means octal)
|
|
|
|
# drop the Major number if 0 since we don't want an octal number
|
|
if [ $MAJ -ne 0 ]
|
|
then
|
|
VERSION=`printf "%d%02d%02d" $MAJ $MIN $PT`
|
|
else
|
|
# drop the Minor number if 0 when MAJ is 0 ince we don't want an octal number
|
|
if [ $MIN -ne 0 ]
|
|
then
|
|
VERSION=`printf "%d%02d" $MIN $PT`
|
|
else
|
|
VERSION=`printf "%d" $PT`
|
|
fi
|
|
fi
|
|
|
|
#debug
|
|
#echo $progname: "setting VERSION to $VERSION"
|
|
#echo $progname: "setting VERSIONSTR to $VERSIONSTR"
|
|
|
|
# check to see if a prepatcher script exists, if does does,
|
|
# call prepatcher script to do anything needed before doing patching
|
|
if [ -e $PREPATCHER ]
|
|
then
|
|
$PREPATCHER
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "$progname: error pre patching files"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
|
|
# call patcher script to do the actual file patching
|
|
# hand patch all the version information and let it do its thing...
|
|
$PATCHER "$VERSIONSTR" "$VERSION" "$MAJ" "$MIN" "$PT"
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "$progname: error patching version files"
|
|
exit 1
|
|
fi
|
|
|
|
# check to see if a postpatcher script exists, if does does,
|
|
# call postpatcher script to do anything needed after doing patching
|
|
if [ -e $POSTPATCHER ]
|
|
then
|
|
$POSTPATCHER
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "$progname: error post patching files"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# ask if changes should be committed and tagged
|
|
|
|
while
|
|
read -e -p "Commit & Tag Release version updates?:" -i "n" yesno
|
|
[ "$yesno" = "" ]
|
|
do
|
|
:;
|
|
done
|
|
|
|
if [ "$yesno" = "y" ]
|
|
then
|
|
gitcomment="update version info for $VERSIONSTR release"
|
|
echo commiting changes to git with comment: $gitcomment
|
|
git commit -a -m "$gitcomment"
|
|
echo "setting git tag to $VERSIONSTR"
|
|
git tag -a $VERSIONSTR -m "Release of library version $VERSIONSTR"
|
|
fi
|
|
|
|
echo "---"
|
|
read -n1 -p "Press any key to exit"
|
|
echo
|