kayobe/tools/release.sh
Mark Goddard b87135d3c3 Add release.sh, a script for creating releases
Also adds documentation on releasing to the developer guide.

Change-Id: Ic26daf362ce79fa1ea9ce217cf470d85c961affa
2018-11-18 17:41:43 +00:00

65 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Script to create a tagged release of a deliverable and push the tag to
# Gerrit.
set -eu
function usage {
echo "Usage"
echo "$0 <repo> <version> <ref> <series>"
echo
echo "Example:"
echo "$0 kayobe 4.0.0 origin/stable/queens queens"
}
function get_last_tag {
# Print the most recent tag for a ref. If no ref is specified, the
# currently checked out branch is examined.
local ref="$1"
if ! git describe --abbrev=0 --first-parent ${ref} >/dev/null 2>&1; then
echo ""
else
git describe --abbrev=0 --first-parent ${ref}
fi
}
[[ $# -eq 4 ]] || (usage; exit 1)
REPO=$1
VERSION=$2
REF=$3
SERIES=$4
RELEASETYPE=release
[[ -n $REPO ]] || (echo "Repo not specified"; exit 1)
[[ -n $VERSION ]] || (echo "Version not specified"; exit 1)
[[ -n $REF ]] || (echo "Ref not specified"; exit 1)
[[ -n $SERIES ]] || (echo "Series not specified"; exit 1)
TARGETSHA=`git log -1 $REF --format='%H'`
# Determine the most recent tag before we add the new one.
PREVIOUS=$(get_last_tag $TARGETSHA)
echo "Tagging $TARGETSHA as $VERSION"
if git show-ref "$VERSION"; then
echo "$REPO already has a version $VERSION tag, skipping further processing"
continue
fi
# WARNING(mgoddard): announce.sh expects to be able to parse this
# commit message, so if you change the format you may have to
# update announce.sh as well.
TAGMSG="$REPO $VERSION $RELEASETYPE
meta:version: $VERSION
meta:diff-start: -
meta:series: $SERIES
meta:release-type: $RELEASETYPE
meta:pypi: no
meta:first: no
"
git tag -m "$TAGMSG" -s "$VERSION" $TARGETSHA
git push gerrit "$VERSION"