From 7649a72a735a26ebe24e07bc20ee5eb72dc87c83 Mon Sep 17 00:00:00 2001 From: Mustafa Elbehery Date: Mon, 10 Feb 2025 23:01:40 +0100 Subject: [PATCH] release: add release script Signed-off-by: Mustafa Elbehery --- scripts/release.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100755 scripts/release.sh diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100755 index 000000000..ca738a3f9 --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + + echo "enter release string according to semantic versioning (e.g. v1.2.3)." + read INPUT + if [[ ! "${INPUT}" =~ ^v[0-9]+.[0-9]+.[0-9]+ ]]; then + echo "Expected 'version' param of the form 'v..' but got '${INPUT}'" + exit 1 + fi + + VERSION=${INPUT#v} + RELEASE_VERSION="${VERSION}" + MINOR_VERSION=$(echo "${VERSION}" | cut -d. -f 1-2) + + source_version=$(grep -E "\s+Version\s*=" ../version/version.go | sed -e "s/.*\"\(.*\)\".*/\1/g") + if [[ "${source_version}" != "${RELEASE_VERSION}" ]]; then + source_minor_version=$(echo "${source_version}" | cut -d. -f 1-2) + echo $source_minor_version + if [[ "${source_minor_version}" != "${MINOR_VERSION}" ]]; then + echo "Wrong bbolt minor version in version.go. Expected ${MINOR_VERSION} but got ${source_minor_version}. Aborting." + exit 1 + fi + + echo "Updating version from ${source_version} to ${RELEASE_VERSION} in version.go" + sed -i "" "s/${source_version}/${RELEASE_VERSION}/g" ../version/version.go + fi + + REPOSITORY=${REPOSITORY:-"git@github.com:etcd-io/bbolt.git"} + BRANCH=${BRANCH:-"release-${MINOR_VERSION}"} + + echo "committing 'version.go' to remote repo" + date_string=$(date +%Y%m%d) + local_branch_name="version_${date_string}" + local_branch_err=$(git checkout -b $local_branch_name | grep -E "error|fatal" || true ) + echo $local_branch_err + git add ../version/version.go + + echo "committing version.go" + git commit -s -m "Update version to ${VERSION}" + + git push -u origin + echo "version.go has been committed to remote repo" + + + remote_tag_exists=$(git ls-remote --tags $REPOSITORY | grep -c "${INPUT}" || true) + echo $remote_tag_exists + if [ "${remote_tag_exists}" -gt 0 ]; then + echo "Release version tag exists on remote. Checking out refs/tags/${INPUT}" + git checkout -q "tags/${INPUT}" + elif [ "${remote_tag_exists}" -eq 0 ]; then + echo "Create new tag" + git tag $INPUT + git push origin $INPUT + fi + echo "SUCCESS" \ No newline at end of file