From 9fb4c6cace2fa4505af8dd6578fbd285bf8e2c2a Mon Sep 17 00:00:00 2001 From: James Andariese Date: Wed, 1 Nov 2023 22:18:04 -0500 Subject: [PATCH] add release script --- release.sh | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 release.sh diff --git a/release.sh b/release.sh new file mode 100644 index 0000000..2ccf745 --- /dev/null +++ b/release.sh @@ -0,0 +1,93 @@ +#!/bin/sh + +### whatif (patch|minor|major|alpha|rc|beta) +whatif() {( + set -e + TMPPREFIX=/tmp/tmp.releaser-whatif + T="$(mktemp -d "${TMPPREFIX}.XXXXXXXX")" + cleanup() { (set -x;rm -rf "/tmp/${TMPPREFIX#/tmp/}${T#$TMPPREFIX}"); } + trap "cleanup;exit 1" SIGINT SIGTERM + git clone . "$T" &> /dev/null + cargo set-version --manifest-path "$T/Cargo.toml" --bump "$1" &> /dev/null + tomlq -r .package.version "$T/Cargo.toml" + rm -rf "/tmp/${TMPPREFIX#/tmp/}${T#$TMPPREFIX}" + cleanup +)} + +if [ $# -eq 0 ];then + echo "crate releaser:" + echo + + printf "% 8s : %s\n" name version + printf "% 8s : %s\n" -------- -------- + for f in major minor patch rc beta alpha;do + printf "% 8s : %s\n" $f "$(whatif "$f")" + done + + echo " +Call with any of the above arguments to change this crate's version +to the associated version: + + $0 [major|minor|patch|rc|beta|alpha] +" + exit 0 +fi + +BUMP="$1" + +if [ x"$(git branch --show-current)" != xdev ];then + 1>&2 echo this can only be run from the dev branch + exit 1 +fi + +if [ ! -d .git ] || [ ! -f Cargo.toml ];then + 1>&2 echo this can only be run from the root of a rust git repo + exit 1 +fi + +if git status --porcelain | grep -q . ;then + git status || true + 1>&2 echo can only be run on a clean git tree + exit 1 +fi + +upgrade() { + cargo set-version --bump "$BUMP" + VERSION="$(tomlq -r .package.version Cargo.toml)" + git add Cargo.toml Cargo.lock + git commit -m "release $VERSION" + git merge main + git checkout main + git merge dev + git tag "$VERSION" + git checkout dev + cargo set-version --bump alpha + NEW_VERSION="$(tomlq -r .package.version Cargo.toml)" + git add Cargo.toml Cargo.lock + git commit -m "a new version appears: $NEW_VERSION" +} + +( + set -e + echo "smoke testing the release process first..." + TMPPREFIX="/tmp/tmp.releaser-testrun" + T="$(mktemp -d "${TMPPREFIX}.XXXXXXXX")" + cleanup() { (set -x; rm -rf "/tmp/${TMPPREFIX#/tmp/}${T#$TMPPREFIX}"); } + trap "cleanup;exit 1" SIGINT SIGTERM + git clone . "$T" + cd "$T" + kill -INT $$ + git checkout main + git checkout dev + upgrade "$BUMP"; echo $? + cleanup +); RC=$? +if [ $RC -ne 0 ]; then + 1>&2 echo "smoke test failed. aborting!" + exit 1 +fi + +( + set -e + upgrade +) \ No newline at end of file