-
Notifications
You must be signed in to change notification settings - Fork 151
Expand file tree
/
Copy pathupdate-version.sh
More file actions
215 lines (183 loc) · 7.54 KB
/
update-version.sh
File metadata and controls
215 lines (183 loc) · 7.54 KB
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
#!/bin/bash
# Version Update Script for Nuvio App
# Updates version across app.json, src/utils/version.ts, and iOS/Android build files
set -e # Exit on any error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Function to show usage
show_usage() {
echo "Usage: $0 <version> [build_number]"
echo "Example: $0 0.7.0-beta.1 7"
echo "Example: $0 1.0.0 10"
echo ""
echo "If build_number is not provided, it will be auto-incremented from current value"
}
# Check if version argument is provided
if [ $# -lt 1 ]; then
print_error "Version argument is required"
show_usage
exit 1
fi
NEW_VERSION="$1"
NEW_BUILD_NUMBER="$2"
# Validate version format (basic check)
if [[ ! $NEW_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9\.]+)?$ ]]; then
print_error "Invalid version format. Expected format: X.Y.Z or X.Y.Z-suffix"
exit 1
fi
# File paths
APP_JSON="./app.json"
VERSION_TS="./src/utils/version.ts"
INFO_PLIST="./ios/Nuvio/Info.plist"
ANDROID_BUILD_GRADLE="./android/app/build.gradle"
ANDROID_STRINGS_XML="./android/app/src/main/res/values/strings.xml"
# Check if files exist
for file in "$APP_JSON" "$VERSION_TS" "$INFO_PLIST" "$ANDROID_BUILD_GRADLE" "$ANDROID_STRINGS_XML"; do
if [ ! -f "$file" ]; then
print_error "File not found: $file"
exit 1
fi
done
print_status "Starting version update process..."
print_status "New version: $NEW_VERSION"
# Get current build number if not provided
if [ -z "$NEW_BUILD_NUMBER" ]; then
CURRENT_BUILD=$(grep -o '"versionCode": [0-9]*' "$APP_JSON" | grep -o '[0-9]*')
if [ -n "$CURRENT_BUILD" ]; then
NEW_BUILD_NUMBER=$((CURRENT_BUILD + 1))
print_status "Auto-incrementing build number from $CURRENT_BUILD to $NEW_BUILD_NUMBER"
else
print_warning "Could not find current build number, defaulting to 1"
NEW_BUILD_NUMBER=1
fi
fi
print_status "New build number: $NEW_BUILD_NUMBER"
# Backup files
print_status "Creating backups..."
cp "$APP_JSON" "${APP_JSON}.backup"
cp "$VERSION_TS" "${VERSION_TS}.backup"
cp "$INFO_PLIST" "${INFO_PLIST}.backup"
cp "$ANDROID_BUILD_GRADLE" "${ANDROID_BUILD_GRADLE}.backup"
cp "$ANDROID_STRINGS_XML" "${ANDROID_STRINGS_XML}.backup"
# Function to restore backups on error
restore_backups() {
print_warning "Restoring backups due to error..."
mv "${APP_JSON}.backup" "$APP_JSON"
mv "${VERSION_TS}.backup" "$VERSION_TS"
mv "${INFO_PLIST}.backup" "$INFO_PLIST"
mv "${ANDROID_BUILD_GRADLE}.backup" "$ANDROID_BUILD_GRADLE"
mv "${ANDROID_STRINGS_XML}.backup" "$ANDROID_STRINGS_XML"
}
# Set trap to restore backups on error
trap restore_backups ERR
# Update app.json
print_status "Updating app.json..."
# Update version in expo section
sed -i '' "s/\"version\": \"[^\"]*\"/\"version\": \"$NEW_VERSION\"/g" "$APP_JSON"
# Update ALL runtimeVersion fields (handles multiple instances if they exist)
sed -i '' "s/\"runtimeVersion\": \"[^\"]*\"/\"runtimeVersion\": \"$NEW_VERSION\"/g" "$APP_JSON"
# Update versionCode in android section
sed -i '' "s/\"versionCode\": [0-9]*/\"versionCode\": $NEW_BUILD_NUMBER/g" "$APP_JSON"
# Update buildNumber in ios section
sed -i '' "s/\"buildNumber\": \"[^\"]*\"/\"buildNumber\": \"$NEW_BUILD_NUMBER\"/g" "$APP_JSON"
print_success "Updated app.json"
# Update src/utils/version.ts
print_status "Updating src/utils/version.ts..."
# Replace the APP_VERSION constant value (portable BSD sed regex)
sed -E -i '' "s/export const APP_VERSION = '[^']*';/export const APP_VERSION = '$NEW_VERSION';/g" "$VERSION_TS"
print_success "Updated src/utils/version.ts"
# Update Info.plist
print_status "Updating Info.plist..."
# Update CFBundleShortVersionString
sed -i '' "/<key>CFBundleShortVersionString<\/key>/{n;s/<string>[^<]*<\/string>/<string>$NEW_VERSION<\/string>/;}" "$INFO_PLIST"
# Update CFBundleVersion
sed -i '' "/<key>CFBundleVersion<\/key>/{n;s/<string>[^<]*<\/string>/<string>$NEW_BUILD_NUMBER<\/string>/;}" "$INFO_PLIST"
print_success "Updated Info.plist"
# Update Android build.gradle
print_status "Updating Android build.gradle..."
# Update versionCode in defaultConfig section
sed -i '' "s/versionCode [0-9]*/versionCode $NEW_BUILD_NUMBER/g" "$ANDROID_BUILD_GRADLE"
# Update versionName in defaultConfig section
sed -i '' "s/versionName \"[^\"]*\"/versionName \"$NEW_VERSION\"/g" "$ANDROID_BUILD_GRADLE"
# Update baseVersionCode in the split APK section (should match versionCode)
sed -i '' "s/def baseVersionCode = [0-9]*/def baseVersionCode = $NEW_BUILD_NUMBER/g" "$ANDROID_BUILD_GRADLE"
print_success "Updated Android build.gradle"
# Update Android strings.xml (expo_runtime_version)
print_status "Updating Android strings.xml..."
# Update <string name="expo_runtime_version"> value
sed -i '' "s|<string name=\"expo_runtime_version\">[^<]*</string>|<string name=\"expo_runtime_version\">$NEW_VERSION</string>|g" "$ANDROID_STRINGS_XML"
print_success "Updated Android strings.xml"
# Verify updates
print_status "Verifying updates..."
# Check app.json
if grep -q "\"version\": \"$NEW_VERSION\"" "$APP_JSON" &&
grep -q "\"runtimeVersion\": \"$NEW_VERSION\"" "$APP_JSON" &&
grep -q "\"versionCode\": $NEW_BUILD_NUMBER" "$APP_JSON" &&
grep -q "\"buildNumber\": \"$NEW_BUILD_NUMBER\"" "$APP_JSON"; then
print_success "app.json updated correctly"
else
print_error "app.json update verification failed"
exit 1
fi
# Check src/utils/version.ts
if grep -q "export const APP_VERSION = '$NEW_VERSION';" "$VERSION_TS"; then
print_success "src/utils/version.ts updated correctly"
else
print_error "src/utils/version.ts update verification failed"
exit 1
fi
# Check Info.plist
if grep -A1 "<key>CFBundleShortVersionString</key>" "$INFO_PLIST" | grep -q "<string>$NEW_VERSION</string>" &&
grep -A1 "<key>CFBundleVersion</key>" "$INFO_PLIST" | grep -q "<string>$NEW_BUILD_NUMBER</string>"; then
print_success "Info.plist updated correctly"
else
print_error "Info.plist update verification failed"
exit 1
fi
# Check Android build.gradle
if grep -q "versionCode $NEW_BUILD_NUMBER" "$ANDROID_BUILD_GRADLE" &&
grep -q "versionName \"$NEW_VERSION\"" "$ANDROID_BUILD_GRADLE" &&
grep -q "def baseVersionCode = $NEW_BUILD_NUMBER" "$ANDROID_BUILD_GRADLE"; then
print_success "Android build.gradle updated correctly"
else
print_error "Android build.gradle update verification failed"
exit 1
fi
# Check Android strings.xml
if grep -q "<string name=\"expo_runtime_version\">$NEW_VERSION</string>" "$ANDROID_STRINGS_XML"; then
print_success "Android strings.xml updated correctly"
else
print_error "Android strings.xml update verification failed"
exit 1
fi
# Clean up backups
print_status "Cleaning up backups..."
rm "${APP_JSON}.backup" "${VERSION_TS}.backup" "${INFO_PLIST}.backup" "${ANDROID_BUILD_GRADLE}.backup" "${ANDROID_STRINGS_XML}.backup"
print_success "Version update completed successfully!"
print_status "Summary:"
echo " Version: $NEW_VERSION"
echo " Runtime Version: $NEW_VERSION"
echo " Build Number: $NEW_BUILD_NUMBER"
echo " Files updated: app.json, src/utils/version.ts, Info.plist, Android build.gradle, Android strings.xml"
echo ""
print_status "Next steps:"
echo " 1. Test the app to ensure everything works correctly"
echo " 2. Commit the changes: git add . && git commit -m 'Bump version to $NEW_VERSION'"
echo " 3. Build and deploy as needed"