SCRIPTS: make announce release support preparing announces before tag exists

It takes so much time to write an announce message that sometimes it's
annoying not being able to start the work while a fix is being finished.
With the new "-p" argument, announce-release will allow to prepare the
announce message for the current HEAD and with no tag yet. It will
restart from the last tag and automatically increment the version using
the same algorithm as create-release so that everything is accurate. It
should then be easier at the last moment to just include the final entry
by hand when the last fix finally arrives. For convenience, this argument
also allows to create an announce from another branch than master.
This commit is contained in:
Willy Tarreau 2021-01-06 15:46:33 +01:00
parent 0c612936b2
commit 96d5368202

View File

@ -10,8 +10,9 @@
# - creates web-$version.html
# - indicates how to edit the mail and how to send it
USAGE="Usage: ${0##*/} [-f] [-b branch] [-d date] [-o oldver] [-n newver]
USAGE="Usage: ${0##*/} [-f] [-p] [-b branch] [-d date] [-o oldver] [-n newver]
-f: force to overwrite existing files and ignore local changes
-p: prepare future relase (skip branch and tags existence checks)
-b: force the project branch name to this (def: inherited from the version)
-d: force the release date (e.g. to rework a failed announce)
-o: previous version (def: newver-1)
@ -49,6 +50,7 @@ while [ -n "$1" -a -z "${1##-*}" ]; do
-d) DATE="$2" ; shift 2 ;;
-b) BRANCH="$2" ; shift 2 ;;
-f) FORCE=1 ; shift ;;
-p) PREPARE=1 ; shift ;;
-o) OLD="$2" ; shift 2 ;;
-n) NEWVER="$2" ; shift 2 ;;
-h|--help) quit "$USAGE" ;;
@ -74,7 +76,7 @@ if [ -z "$FORCE" -a "$(git diff HEAD|wc -c)" != 0 ]; then
die
fi
if [ "$(git rev-parse --verify -q HEAD)" != "$(git rev-parse --verify -q master)" ]; then
if [ -z "$PREPARE" -a "$(git rev-parse --verify -q HEAD)" != "$(git rev-parse --verify -q master)" ]; then
die "git HEAD doesn't match master branch."
fi
@ -92,7 +94,30 @@ if [ -z "$NEWTAG" ]; then
if [ -z "$NEWTAG" ]; then
die "Fatal: cannot determine new version, please specify it."
elif [ -n "$PREPARE" ] && ! git show-ref --tags HEAD >/dev/null; then
# HEAD not tagged, hence we have to pretend we're on one version
# after the current tag
echo "Current version not tagged, trying to determine next one."
NEWTAG="${NEWTAG#v}"
if [ -z "$OLD" ]; then
OLD="$NEWTAG"
fi
radix="$NEWTAG"
while [ -n "$radix" -a -z "${radix%%*[0-9]}" ]; do
radix="${radix%[0-9]}"
done
number=${NEWTAG#$radix}
if [ -z "$number" -o "$radix" = "$NEWTAG" ]; then
die "Fatal: cannot determine new version, please specify it."
fi
NEWTAG="${radix}$((number+1))"
if [ -z "$NEWVER" ]; then
NEWVER="${NEWTAG}"
fi
NEWTAG="v$NEWTAG"
LASTCOM="$(git rev-parse --short HEAD)"
echo "Next version expected to be $NEWVER and next tag $NEWTAG based on commit $LASTCOM"
elif [ "$(git describe --tags HEAD)" != "$NEWTAG" ]; then
die "About to use current HEAD which doesn't seem tagged, it reports '$(git describe --tags HEAD 2>/dev/null)'. Did you release it ?"
fi