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