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