1*1c12ee1eSDan Willemsen#!/bin/bash 2*1c12ee1eSDan Willemsen# Copyright 2019 The Go Authors. All rights reserved. 3*1c12ee1eSDan Willemsen# Use of this source code is governed by a BSD-style 4*1c12ee1eSDan Willemsen# license that can be found in the LICENSE file. 5*1c12ee1eSDan Willemsen 6*1c12ee1eSDan Willemsencd "$(git rev-parse --show-toplevel)" 7*1c12ee1eSDan Willemsen 8*1c12ee1eSDan Willemsenread -p "What is the next release version (e.g., 'v1.26.0')? " VERSION 9*1c12ee1eSDan WillemsenSEMVER_REGEX='^v\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([.a-zA-Z0-9A-Z-]*\)$' 10*1c12ee1eSDan Willemsenif ! [[ -z $(echo $VERSION | sed -e "s/$SEMVER_REGEX//") ]]; then 11*1c12ee1eSDan Willemsen echo; echo "invalid: must be a semver string"; exit 1 12*1c12ee1eSDan Willemsenfi 13*1c12ee1eSDan WillemsenVERSION_MAJOR=$(echo $VERSION | sed -e "s/$SEMVER_REGEX/\1/") 14*1c12ee1eSDan WillemsenVERSION_MINOR=$(echo $VERSION | sed -e "s/$SEMVER_REGEX/\2/") 15*1c12ee1eSDan WillemsenVERSION_PATCH=$(echo $VERSION | sed -e "s/$SEMVER_REGEX/\3/") 16*1c12ee1eSDan WillemsenVERSION_PRERELEASE=$(echo $VERSION | sed -e "s/$SEMVER_REGEX/\4/") 17*1c12ee1eSDan Willemsenif ! [[ "$VERSION_MAJOR" =~ ^1$ ]]; then 18*1c12ee1eSDan Willemsen echo; echo "invalid: major version must be 1"; exit 1 19*1c12ee1eSDan Willemsenfi 20*1c12ee1eSDan Willemsenif ! [[ -z $VERSION_PRERELEASE ]] && ! [[ "$VERSION_PRERELEASE" =~ ^-rc[.][0-9]+$ ]]; then 21*1c12ee1eSDan Willemsen echo; echo "invalid: pre-release suffix must be empty or '-rc.X'"; exit 1 22*1c12ee1eSDan Willemsenfi 23*1c12ee1eSDan WillemsenVERSION_PRERELEASE=${VERSION_PRERELEASE#"-"} # trim possible leading dash 24*1c12ee1eSDan Willemsen 25*1c12ee1eSDan Willemsenfunction version_string() { 26*1c12ee1eSDan Willemsen VERSION_STRING="v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" 27*1c12ee1eSDan Willemsen if ! [[ -z $VERSION_PRERELEASE ]]; then 28*1c12ee1eSDan Willemsen VERSION_STRING="${VERSION_STRING}-${VERSION_PRERELEASE}" 29*1c12ee1eSDan Willemsen fi 30*1c12ee1eSDan Willemsen echo $VERSION_STRING 31*1c12ee1eSDan Willemsen} 32*1c12ee1eSDan Willemsen 33*1c12ee1eSDan Willemsenread -p "Were there any changes to the generator that relies on new runtime functionality? " YN 34*1c12ee1eSDan Willemsencase $YN in 35*1c12ee1eSDan Willemsen[Yy]* ) 36*1c12ee1eSDan Willemsen read -p " What minor version of the runtime is required now? " GEN_VERSION 37*1c12ee1eSDan Willemsen if ! [[ "$GEN_VERSION" =~ ^[0-9]+$ ]]; then echo; echo "invalid: must be an integer"; exit 1; fi;; 38*1c12ee1eSDan Willemsen[Nn]* ) ;; 39*1c12ee1eSDan Willemsen* ) echo; echo "invalid: must be 'yes' or 'no'"; exit 1;; 40*1c12ee1eSDan Willemsenesac 41*1c12ee1eSDan Willemsen 42*1c12ee1eSDan Willemsenread -p "Were there any dropped functionality in the runtime for old generated code? " YN 43*1c12ee1eSDan Willemsencase $YN in 44*1c12ee1eSDan Willemsen[Yy]* ) 45*1c12ee1eSDan Willemsen read -p " What minor version of the runtime is required now? " MIN_VERSION 46*1c12ee1eSDan Willemsen if ! [[ "$MIN_VERSION" =~ ^[0-9]+$ ]]; then echo; echo "invalid: must be an integer"; exit 1; fi;; 47*1c12ee1eSDan Willemsen[Nn]* ) ;; 48*1c12ee1eSDan Willemsen* ) echo; echo "invalid: must be 'yes' or 'no'"; exit 1;; 49*1c12ee1eSDan Willemsenesac 50*1c12ee1eSDan Willemsen 51*1c12ee1eSDan Willemsen 52*1c12ee1eSDan Willemsenecho 53*1c12ee1eSDan Willemsenecho "Preparing changes to release $(version_string)." 54*1c12ee1eSDan Willemsenecho 55*1c12ee1eSDan Willemsen 56*1c12ee1eSDan Willemsenset -e 57*1c12ee1eSDan Willemsen 58*1c12ee1eSDan Willemsen# Create a new branch to contain the release changes. 59*1c12ee1eSDan Willemsenif [[ $(git branch --list release) ]]; then 60*1c12ee1eSDan Willemsen echo "error: release branch already exists"; exit 1 61*1c12ee1eSDan Willemsenfi 62*1c12ee1eSDan Willemsengit codereview change release 63*1c12ee1eSDan Willemsengit codereview sync 64*1c12ee1eSDan Willemsen 65*1c12ee1eSDan Willemsen# Create commit for actual release. 66*1c12ee1eSDan WillemsenINPLACE='-i ""' # BSD version of sed expects argument after -i 67*1c12ee1eSDan Willemsenif [[ "$(sed --version)" == *"GNU"* ]]; then 68*1c12ee1eSDan Willemsen INPLACE="-i" # GNU version of sed does not expect argument after -i 69*1c12ee1eSDan Willemsenfi 70*1c12ee1eSDan Willemsensed $INPLACE -e "s/\(Minor *= *\)[0-9]*/\1$VERSION_MINOR/" internal/version/version.go 71*1c12ee1eSDan Willemsensed $INPLACE -e "s/\(Patch *= *\)[0-9]*/\1$VERSION_PATCH/" internal/version/version.go 72*1c12ee1eSDan Willemsensed $INPLACE -e "s/\(PreRelease *= *\)\"[^\"]*\"/\1\"$VERSION_PRERELEASE\"/" internal/version/version.go 73*1c12ee1eSDan Willemsenif ! [[ -z $GEN_VERSION ]]; then 74*1c12ee1eSDan Willemsen sed $INPLACE -e "s/\(GenVersion *= *\)[0-9]*/\1$GEN_VERSION/" runtime/protoimpl/version.go 75*1c12ee1eSDan Willemsenfi 76*1c12ee1eSDan Willemsenif ! [[ -z $MIN_VERSION ]]; then 77*1c12ee1eSDan Willemsen sed $INPLACE -e "s/\(MinVersion *= *\)[0-9]*/\1$MIN_VERSION/" runtime/protoimpl/version.go 78*1c12ee1eSDan Willemsenfi 79*1c12ee1eSDan Willemsengit commit -a -m "all: release $(version_string)" 80*1c12ee1eSDan Willemsen 81*1c12ee1eSDan Willemsen# Build release binaries. 82*1c12ee1eSDan Willemsengo test -mod=vendor -timeout=60m -count=1 integration_test.go "$@" -buildRelease 83*1c12ee1eSDan Willemsen 84*1c12ee1eSDan Willemsen# Create commit to start development after release. 85*1c12ee1eSDan WillemsenVERSION_PRERELEASE="${VERSION_PRERELEASE}.devel" # append ".devel" 86*1c12ee1eSDan WillemsenVERSION_PRERELEASE="${VERSION_PRERELEASE#"."}" # trim possible leading "." 87*1c12ee1eSDan Willemsensed $INPLACE -e "s/\(PreRelease *= *\)\"[^\"]*\"/\1\"$VERSION_PRERELEASE\"/" internal/version/version.go 88*1c12ee1eSDan Willemsengit commit -a -m "all: start $(version_string)" 89*1c12ee1eSDan Willemsen 90*1c12ee1eSDan Willemsenecho 91*1c12ee1eSDan Willemsenecho "Release changes prepared. Additional steps:" 92*1c12ee1eSDan Willemsenecho " 1) Submit the changes:" 93*1c12ee1eSDan Willemsenecho " a. Mail out the changes: git mail HEAD" 94*1c12ee1eSDan Willemsenecho " b. Request a review on the changes and merge them." 95*1c12ee1eSDan Willemsenecho " 2) Tag a new release on GitHub:" 96*1c12ee1eSDan Willemsenecho " a. Write release notes highlighting notable changes." 97*1c12ee1eSDan Willemsenecho " b. Attach pre-compiled binaries as assets to the release." 98*1c12ee1eSDan Willemsenecho 99