Hopefully this makes releases a little better for users. In particular, this avoids listing old build artifacts in the SHA256SUMS files when we make new releases, and users can now download them directly. Now to make a release you run: `make tag && make release`. After the first make session ends, you'll have a new tag released publicly, and then during the second make session, the release target will notice this new tag, build some assets, and upload them!
51 lines
1.5 KiB
Bash
Executable File
51 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eEu
|
|
set -o pipefail
|
|
|
|
################################################################################
|
|
# Tag and push a new release of the git repo.
|
|
# There are no arguments for this script.
|
|
################################################################################
|
|
|
|
# Variables:
|
|
#
|
|
# v: the old tag version, such as 0.0.13
|
|
# t: the new tag version, such as 0.0.14
|
|
# h: the head version, such as 0.0.13-40-g62ca126-dirty
|
|
v=`git describe --match '[0-9]*\.[0-9]*\.[0-9]*' --tags --abbrev=0`
|
|
t=`echo "${v%.*}.$((${v##*.}+1))"` # increment version
|
|
h="$(git describe --tags --dirty --always)"
|
|
|
|
if [[ $# -gt 0 ]]; then
|
|
echo "ERR: $0 does not take arguments." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Never tag a dirty git tree.
|
|
if [[ "${h}" =~ dirty ]]; then
|
|
echo "ERR: git tree is dirty. Commit or stash changes before tagging." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Be idempotent.
|
|
if [[ "${h}" == "${v}" ]]; then
|
|
echo "INFO: HEAD \"${h}\" is equivalent to the current (old) version tag \"${v}\"; nothing to do."
|
|
exit 0
|
|
fi
|
|
|
|
# Give the user a chance to abort.
|
|
echo "WARN: About to tag \"${h}\" as \"${t}\" and push."
|
|
echo "Press ^C within 3s to abort."
|
|
sleep 3s
|
|
|
|
# Tag and push.
|
|
echo "release: tag $t" | git tag --file=- --sign $t
|
|
echo "INFO: Version $t is now tagged."
|
|
echo "INFO: Pushing $t to origin."
|
|
git push origin $t
|
|
|
|
# Be informative.
|
|
GIT_PAGER=cat git diff --stat "$v" "$t"
|
|
if command -v contrib.sh &>/dev/null; then contrib.sh "$v"; fi
|
|
echo -e "run 'git log $v..$t' to see what has changed since $v"
|