From 73349a6a61323cd7f559380f2663e75b7c06a898 Mon Sep 17 00:00:00 2001 From: Ivan Date: Fri, 26 Jan 2024 19:51:26 +0000 Subject: [PATCH] Add release dev script --- dev-bin/release.sh | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100755 dev-bin/release.sh diff --git a/dev-bin/release.sh b/dev-bin/release.sh new file mode 100755 index 0000000..1a03a1e --- /dev/null +++ b/dev-bin/release.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +set -eu -o pipefail + +changelog=$(cat CHANGELOG.md) + +regex=' +## v([0-9]+\.[0-9]+\.[0-9]+) \(([0-9]{4}-[0-9]{2}-[0-9]{2})\) + +((.| +)*) +' + +if [[ ! $changelog =~ $regex ]]; then + echo "Could not find date line in change log!" + exit 1 +fi + +version="${BASH_REMATCH[1]}" +date="${BASH_REMATCH[2]}" +notes="$(echo "${BASH_REMATCH[3]}" | sed -n -E '/^## v[0-9]+\.[0-9]+\.[0-9]+/,$!p')" + +echo "$notes" +if [[ "$date" != "$(date +"%Y-%m-%d")" ]]; then + echo "$date is not today!" + exit 1 +fi + +tag="v$version" + +if [ -n "$(git status --porcelain)" ]; then + echo ". is not clean." >&2 + exit 1 +fi + +echo $"go mod tidy:" + +go mod tidy + +echo $"Test results:" + +go test -race -v ./... + +echo $'\nDiff:' +git diff + +echo $'\nRelease notes:' +echo "$notes" + +read -e -p "Push to origin? " should_push + +if [ "$should_push" != "y" ]; then + echo "Aborting" + exit 1 +fi + +git push + +gh release create --target "$(git branch --show-current)" -t "$version" -n "$notes" "$tag"