forked from EleutherAI/minetest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbump_version.sh
executable file
·230 lines (186 loc) · 6.96 KB
/
bump_version.sh
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#!/bin/bash -e
prompt_for() {
local prompt_text=$1
local pattern=$2
local default_value=$3
local tmp=
while true; do
read -p "$prompt_text [$default_value]: " tmp
if [ -z "$tmp" ]; then
echo "$default_value"; return
elif echo "$tmp" | grep -qE "^(${pattern})\$"; then
echo "$tmp"; return
fi
done
}
# Reads current versions
# out: VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_IS_DEV CURRENT_VERSION ANDROID_VERSION_CODE
read_versions() {
VERSION_MAJOR=$(grep -oE '^set\(VERSION_MAJOR [0-9]+\)$' CMakeLists.txt | tr -dC 0-9)
VERSION_MINOR=$(grep -oE '^set\(VERSION_MINOR [0-9]+\)$' CMakeLists.txt | tr -dC 0-9)
VERSION_PATCH=$(grep -oE '^set\(VERSION_PATCH [0-9]+\)$' CMakeLists.txt | tr -dC 0-9)
VERSION_IS_DEV=$(grep -oE '^set\(DEVELOPMENT_BUILD [A-Z]+\)$' CMakeLists.txt)
ANDROID_VERSION_CODE=$(grep -oE '\("versionCode", [0-9]+\)' android/build.gradle | tr -dC 0-9)
# Make sure they all exist
[ -n "$VERSION_MAJOR" ]
[ -n "$VERSION_MINOR" ]
[ -n "$VERSION_PATCH" ]
[ -n "$VERSION_IS_DEV" ]
[ -n "$ANDROID_VERSION_CODE" ]
if echo "$VERSION_IS_DEV" | grep -q ' TRUE'; then
VERSION_IS_DEV=1
else
VERSION_IS_DEV=0
fi
CURRENT_VERSION="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH"
echo "Current Minetest version: $CURRENT_VERSION"
echo "Current Android version code: $ANDROID_VERSION_CODE"
}
# Retrieves protocol version from header
# in: $1
read_proto_ver() {
local ref=$1
git show "$ref":src/network/networkprotocol.h | grep -oE 'LATEST_PROTOCOL_VERSION [0-9]+' | tr -dC 0-9
}
## Prompts for new android version code
# in: ANDROID_VERSION_CODE
# out: NEW_ANDROID_VERSION_CODE
bump_android_ver() {
# +1 for ARM and +1 for ARM64 APKs
NEW_ANDROID_VERSION_CODE=$(expr $ANDROID_VERSION_CODE + 2)
NEW_ANDROID_VERSION_CODE=$(prompt_for "Set android version code" '[0-9]+' $NEW_ANDROID_VERSION_CODE)
echo
echo "New android version code: $NEW_ANDROID_VERSION_CODE"
}
## Prompts for new version
# in: VERSION_{MAJOR,MINOR,PATCH} DO_PATCH_REL
# out: NEXT_VERSION NEXT_VERSION_{MAJOR,MINOR,PATCH}
bump_version() {
NEXT_VERSION_MAJOR=$VERSION_MAJOR
if [ "$DO_PATCH_REL" -eq 1 ]; then
NEXT_VERSION_MINOR=$VERSION_MINOR
NEXT_VERSION_PATCH=$(expr $VERSION_PATCH + 1)
else
NEXT_VERSION_MINOR=$(expr $VERSION_MINOR + 1)
NEXT_VERSION_PATCH=0
fi
NEXT_VERSION_MAJOR=$(prompt_for "Set next major" '[0-9]+' $NEXT_VERSION_MAJOR)
if [ "$NEXT_VERSION_MAJOR" != "$VERSION_MAJOR" ]; then
NEXT_VERSION_MINOR=0
NEXT_VERSION_PATCH=0
fi
NEXT_VERSION_MINOR=$(prompt_for "Set next minor" '[0-9]+' $NEXT_VERSION_MINOR)
if [ "$NEXT_VERSION_MINOR" != "$VERSION_MINOR" ]; then
NEXT_VERSION_PATCH=0
fi
NEXT_VERSION_PATCH=$(prompt_for "Set next patch" '[0-9]+' $NEXT_VERSION_PATCH)
NEXT_VERSION="$NEXT_VERSION_MAJOR.$NEXT_VERSION_MINOR.$NEXT_VERSION_PATCH"
echo
echo "New version: $NEXT_VERSION"
}
## Toggles development build
# in: $1
set_dev_build() {
local is_dev=$1
# Update CMakeList.txt versions
if [ "$is_dev" -eq 1 ]; then
sed -i -re 's/^set\(DEVELOPMENT_BUILD [A-Z]+\)$/set(DEVELOPMENT_BUILD TRUE)/' CMakeLists.txt
else
sed -i -re 's/^set\(DEVELOPMENT_BUILD [A-Z]+\)$/set(DEVELOPMENT_BUILD FALSE)/' CMakeLists.txt
fi
# Update Android versions
if [ "$is_dev" -eq 1 ]; then
sed -i 's/set("versionExtra", "")/set("versionExtra", "-dev")/' android/build.gradle
sed -i 's/project.ext.set("developmentBuild", 0)/project.ext.set("developmentBuild", 1)/' android/build.gradle
else
sed -i 's/set("versionExtra", "-dev")/set("versionExtra", "")/' android/build.gradle
sed -i 's/project.ext.set("developmentBuild", 1)/project.ext.set("developmentBuild", 0)/' android/build.gradle
fi
git add -f CMakeLists.txt android/build.gradle
}
## Writes new android version code
# in: NEW_ANDROID_VERSION_CODE
write_android_version() {
sed -i -re "s/\"versionCode\", [0-9]+/\"versionCode\", $NEW_ANDROID_VERSION_CODE/" android/build.gradle
git add -f android/build.gradle
}
## Writes new version to the right files
# in: NEXT_VERSION NEXT_VERSION_{MAJOR,MINOR,PATCH}
write_new_version() {
# Update CMakeList.txt versions
sed -i -re "s/^set\(VERSION_MAJOR [0-9]+\)$/set(VERSION_MAJOR $NEXT_VERSION_MAJOR)/" CMakeLists.txt
sed -i -re "s/^set\(VERSION_MINOR [0-9]+\)$/set(VERSION_MINOR $NEXT_VERSION_MINOR)/" CMakeLists.txt
sed -i -re "s/^set\(VERSION_PATCH [0-9]+\)$/set(VERSION_PATCH $NEXT_VERSION_PATCH)/" CMakeLists.txt
# Update Android versions
sed -i -re "s/set\(\"versionMajor\", [0-9]+\)/set(\"versionMajor\", $NEXT_VERSION_MAJOR)/" android/build.gradle
sed -i -re "s/set\(\"versionMinor\", [0-9]+\)/set(\"versionMinor\", $NEXT_VERSION_MINOR)/" android/build.gradle
sed -i -re "s/set\(\"versionPatch\", [0-9]+\)/set(\"versionPatch\", $NEXT_VERSION_PATCH)/" android/build.gradle
# Update doc versions
sed -i -re '1s/[0-9]+\.[0-9]+\.[0-9]+/'"$NEXT_VERSION"'/g' doc/menu_lua_api.txt
sed -i -re '1s/[0-9]+\.[0-9]+\.[0-9]+/'"$NEXT_VERSION"'/g' doc/client_lua_api.txt
git add -f CMakeLists.txt android/build.gradle doc/menu_lua_api.txt doc/client_lua_api.txt
}
## Create release commit and tag
# in: $1
perform_release() {
local release_version=$1
RELEASE_DATE=$(date +%Y-%m-%d)
sed -i '/\<release/s/\(version\)="[^"]*"/\1="'"$release_version"'"/' misc/net.minetest.minetest.appdata.xml
sed -i 's/\(<release date\)="[^"]*"/\1="'"$RELEASE_DATE"'"/' misc/net.minetest.minetest.appdata.xml
git add -f misc/net.minetest.minetest.appdata.xml
git commit -m "Bump version to $release_version"
echo "Tagging $release_version"
git tag -a "$release_version" -m "$release_version"
}
## Create after-release commit
# in: NEXT_VERSION
back_to_devel() {
echo 'Creating "return back to development" commit'
git commit -m "Continue with $NEXT_VERSION-dev"
}
#######################
# Start of main logic:
#######################
# Switch to top minetest directory
cd ${0%/*}/..
# Determine old versions
read_versions
# Double-check what we're doing
if [ "$VERSION_IS_DEV" -eq 1 ]; then
echo "You are on the development branch and about to make a major or minor release."
DO_PATCH_REL=0
else
echo "You are on the stable/backport branch and about to make a patch release."
DO_PATCH_REL=1
fi
if [[ "$(prompt_for "Is this correct?" '[Yy][Ee][Ss]|[Nn][Oo]|' no)" != [Yy][Ee][Ss] ]]; then
echo "Aborting"
exit 1
fi
if [ "$DO_PATCH_REL" -eq 0 ]; then
# On a regular release the version moves from 5.7.0-dev -> 5.7.0 (new tag) -> 5.8.0-dev
old_proto=$(read_proto_ver origin/stable-5)
new_proto=$(read_proto_ver HEAD)
[ -n "$old_proto" ]
[ -n "$new_proto" ]
echo "Protocol versions: $old_proto (last release) -> $new_proto (now)"
if [ "$new_proto" -le "$old_proto" ]; then
echo "The protocol version has not been increased since last release, refusing to continue."
exit 1
fi
bump_android_ver
write_android_version
set_dev_build 0
perform_release "$CURRENT_VERSION"
bump_version
set_dev_build 1
write_new_version
back_to_devel
else
# On a patch release the version moves from 5.7.0 -> 5.7.1 (new tag)
bump_android_ver
write_android_version
bump_version
write_new_version
perform_release "$NEXT_VERSION"
fi