xref: /aosp_15_r20/external/golang-protobuf/release.bash (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
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