github.com/whiteCcinn/protobuf-go@v1.0.9/release.bash (about)

     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 codereview change release
    63  git codereview sync
    64  
    65  # Create commit for actual release.
    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
    73  if ! [[ -z $GEN_VERSION ]]; then
    74  	sed $INPLACE -e "s/\(GenVersion *= *\)[0-9]*/\1$GEN_VERSION/" runtime/protoimpl/version.go
    75  fi
    76  if ! [[ -z $MIN_VERSION ]]; then
    77  	sed $INPLACE -e "s/\(MinVersion *= *\)[0-9]*/\1$MIN_VERSION/" runtime/protoimpl/version.go
    78  fi
    79  git commit -a -m "all: release $(version_string)"
    80  
    81  # Build release binaries.
    82  go test -mod=vendor -timeout=60m -count=1 integration_test.go "$@" -buildRelease
    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 "."
    87  sed $INPLACE -e "s/\(PreRelease *= *\)\"[^\"]*\"/\1\"$VERSION_PRERELEASE\"/" internal/version/version.go
    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