blob: c9b3c1b97facb8acdefb1051f6f0529ed3db202f [file]
#!/usr/bin/env bash
#
# Automate generation of a new release
set -e
KUP=0
COMMIT=1
LAST_HEAD=""
FOR_NEXT=0
help() {
echo "$(basename $0) - prepare xfsprogs release tarball or for-next update"
printf "\t[--kup|-k] upload final tarball with KUP\n"
printf "\t[--no-commit|-n] don't create release commit\n"
printf "\t[--last-head|-l] commit of the last release\n"
printf "\t[--for-next|-f] generate announce email for for-next update\n"
}
update_version() {
echo "Updating version files"
# doc/CHANGES
header="xfsprogs-${version} ($(date +'%d %b %Y'))"
sed -i "1s/^/$header\n\t<TODO list user affecting changes>\n\n/" doc/CHANGES
$EDITOR doc/CHANGES
# ./configure.ac
CONF_AC="AC_INIT([xfsprogs],[${version}],[linux-xfs@vger.kernel.org])"
sed -i "s/^AC_INIT.*/$CONF_AC/" ./configure.ac
# ./debian/changelog
sed -i "1s/^/\n/" ./debian/changelog
sed -i "1s/^/ -- Nathan Scott <nathans@debian.org> `date -R`\n/" ./debian/changelog
sed -i "1s/^/\n/" ./debian/changelog
sed -i "1s/^/ * New upstream release\n/" ./debian/changelog
sed -i "1s/^/\n/" ./debian/changelog
sed -i "1s/^/xfsprogs (${version}-1) unstable; urgency=low\n/" ./debian/changelog
}
prepare_mail() {
branch="$1"
mail_file=$(mktemp)
if [ -n "$LAST_HEAD" ]; then
if [ $branch == "master" ]; then
reason="$(git describe --abbrev=0 $branch) released"
for_next_update="\n\nThe for-next branch has also been updated to match the state of master."
else
reason="for-next updated to $(git log --oneline --format="%h" -1 $branch)"
for_next_update=""
fi;
cat << EOF > $mail_file
To: linux-xfs@vger.kernel.org
Cc: $(./tools/git-contributors.py $LAST_HEAD..$branch --separator ', ')
Subject: [ANNOUNCE] xfsprogs: $reason
Hi folks,
The xfsprogs $branch branch in repository at:
git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git
has just been updated.
Patches often get missed, so if your outstanding patches are properly reviewed
on the list and not included in this update, please let me know.$(printf "%b" "$for_next_update")
The new head of the $branch branch is commit:
$(git log --oneline --format="%H" -1 $branch)
New commits:
$(git shortlog --format="[%h] %s" $LAST_HEAD..$branch)
Code Diffstat:
$(git diff --stat --summary -C -M $LAST_HEAD..$branch)
EOF
fi
}
while [ $# -gt 0 ]; do
case "$1" in
--kup|-k)
KUP=1
;;
--no-commit|-n)
COMMIT=0
;;
--last-head|-l)
LAST_HEAD=$2
shift
;;
--for-next|-f)
FOR_NEXT=1
;;
--help|-h)
help
exit 0
;;
*)
>&2 printf "Error: Invalid argument\n"
exit 1
;;
esac
shift
done
if [ $FOR_NEXT -eq 1 ]; then
echo "Push your for-next branch:"
printf "\tgit push origin for-next:for-next\n"
prepare_mail "for-next"
if [ -n "$LAST_HEAD" ]; then
echo "Command to send ANNOUNCE email"
printf "\tneomutt -H $mail_file\n"
fi
exit 0
fi
if [ -z "$EDITOR" ]; then
EDITOR=$(command -v vi)
fi
if [ $COMMIT -eq 1 ]; then
if git diff --exit-code ./VERSION > /dev/null; then
$EDITOR ./VERSION
fi
fi
. ./VERSION
version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
date=`date +"%-d %B %Y"`
if [ $COMMIT -eq 1 ]; then
update_version
git diff --color=always | less -r
[[ "$(read -e -p 'All good? [Y/n]> '; echo $REPLY)" == [Nn]* ]] && exit 0
echo "Commiting new version update to git"
git commit --all --signoff --message="xfsprogs: Release v${version}
Update all the necessary files for a v${version} release."
echo "Tagging git repository"
git tag --annotate --sign --message="Release v${version}" v${version}
fi
echo "Cleaning up"
make realclean
rm -rf "xfsprogs-${version}.tar" \
"xfsprogs-${version}.tar.gz" \
"xfsprogs-${version}.tar.asc" \
"xfsprogs-${version}.tar.sign"
echo "Making source tarball"
make dist
gunzip -k "xfsprogs-${version}.tar.gz"
echo "Sign the source tarball"
gpg \
--detach-sign \
--armor \
"xfsprogs-${version}.tar"
echo "Verify signature"
gpg \
--verify \
"xfsprogs-${version}.tar.asc"
if [ $? -ne 0 ]; then
echo "Can not verify signature of tarball"
exit 1
fi
mv "xfsprogs-${version}.tar.asc" "xfsprogs-${version}.tar.sign"
if [ $KUP -eq 1 ]; then
kup put \
xfsprogs-${version}.tar.gz \
xfsprogs-${version}.tar.sign \
pub/linux/utils/fs/xfs/xfsprogs/
fi;
prepare_mail "master"
echo ""
echo "Done. Please remember to push out tags and the branch."
printf "\tgit push origin v${version} master:master master:for-next\n"
if [ -n "$LAST_HEAD" ]; then
echo "Command to send ANNOUNCE email"
printf "\tneomutt -H $mail_file\n"
fi
if [ $KUP -ne 1 ]; then
echo "Don't forget to upload tarball:"
echo -e "\tkup put xfsprogs-${version}.tar.gz" \
"xfsprogs-${version}.tar.sign pub/linux/utils/fs/xfs/xfsprogs/"
fi