blob: e7001e19af529d31fe1f5432348c978cbf64c78d (
plain)
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
|
#!/usr/bin/env bash
#
# Can inject correctly formatted version strings/numbers in all the various
# project metadata files. Can also back them up and restore them.
set -eu
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"
INCLUDED_CRATES=(
"mullvad-daemon"
"mullvad-cli"
"mullvad-problem-report"
"mullvad-setup"
"mullvad-exclude"
"talpid-openvpn-plugin"
)
MANIFESTS=( "${INCLUDED_CRATES[@]/%//Cargo.toml}" )
# Parse arguments
COMMAND="$1"
shift 1
PRODUCT_VERSION=""
ANDROID="false"
DESKTOP="false"
for argument in "$@"; do
case "$argument" in
"--android")
ANDROID="true"
;;
"--desktop")
DESKTOP="true"
;;
-*)
echo >&2 "Unknown option \"$argument\""
exit 1
;;
*)
PRODUCT_VERSION="$argument"
;;
esac
done
function inject_version {
# Regex that only matches valid Mullvad VPN versions. It also captures
# relevant values into capture groups, read out via BASH_REMATCH[x].
local VERSION_REGEX="^20([0-9]{2})\.([1-9][0-9]?)(-beta([1-9][0-9]?))?(-dev-[0-9a-f]+)?$"
if [[ ! $PRODUCT_VERSION =~ $VERSION_REGEX ]]; then
echo >&2 "Invalid version format. Please specify version as:"
echo >&2 "<YEAR>.<NUMBER>[-beta<NUMBER>]"
return 1
fi
local semver_version
semver_version=$(echo "$PRODUCT_VERSION" | sed -Ee 's/($|-.*)/.0\1/g')
local semver_major="20${BASH_REMATCH[1]}"
local semver_minor=${BASH_REMATCH[2]}
local semver_patch="0"
echo "Setting Rust crate versions to $semver_version"
# Rust crates
for toml in "${MANIFESTS[@]}"; do
cp "$toml" "$toml.bak"
awk "BEGIN { matches=0; } matches==0 && /^version = \"[^\"]+\"$/ \
{ print \"version = \\\"$semver_version\\\"\"; matches++; next; } { print }" "$toml.bak" > "$toml"
done
if [[ "$DESKTOP" == "true" ]]; then
echo "Setting desktop version to $semver_version"
# Electron GUI
cp gui/package.json gui/package.json.bak
cp gui/package-lock.json gui/package-lock.json.bak
(cd gui/ && npm version "$semver_version" --no-git-tag-version --allow-same-version)
# Windows C++
cp dist-assets/windows/version.h dist-assets/windows/version.h.bak
cat <<EOF > dist-assets/windows/version.h
#define MAJOR_VERSION $semver_major
#define MINOR_VERSION $semver_minor
#define PATCH_VERSION $semver_patch
#define PRODUCT_VERSION "$PRODUCT_VERSION"
EOF
fi
if [[ "$ANDROID" == "true" ]]; then
# Android
local version_year
version_year=$(printf "%02d" "${BASH_REMATCH[1]}")
local version_number
version_number=$(printf "%02d" "${BASH_REMATCH[2]}")
local version_patch="00" # Not used for now.
local version_beta
version_beta=$(printf "%02d" "${BASH_REMATCH[4]:-99}")
local android_version_code=${version_year}${version_number}${version_patch}${version_beta}
echo "Setting Android versionName to $PRODUCT_VERSION and versionCode to $android_version_code"
cp android/app/build.gradle.kts android/app/build.gradle.kts.bak
sed -i -Ee "s/versionCode = [0-9]+/versionCode = $android_version_code/g" \
android/app/build.gradle.kts
sed -i -Ee "s/versionName = \"[^\"]+\"/versionName = \"$PRODUCT_VERSION\"/g" \
android/app/build.gradle.kts
fi
}
function restore_backup {
set +e
# Rust crates
for toml in "${MANIFESTS[@]}"; do
mv "${toml}.bak" "${toml}"
done
if [[ "$DESKTOP" == "true" ]]; then
# Electron GUI
mv gui/package.json.bak gui/package.json
mv gui/package-lock.json.bak gui/package-lock.json
# Windows C++
mv dist-assets/windows/version.h.bak dist-assets/windows/version.h
fi
if [[ "$ANDROID" == "true" ]]; then
# Android
mv android/app/build.gradle.kts.bak android/app/build.gradle.kts
fi
set -e
}
function delete_backup {
set +e
# Rust crates
for toml in "${MANIFESTS[@]}"; do
rm "${toml}.bak"
done
if [[ "$DESKTOP" == "true" ]]; then
# Electron GUI
rm gui/package.json.bak
rm gui/package-lock.json.bak
# Windows C++
rm dist-assets/windows/version.h.bak
fi
if [[ "$ANDROID" == "true" ]]; then
# Android
rm android/app/build.gradle.kts.bak
fi
set -e
}
case "$COMMAND" in
"inject")
inject_version
;;
"restore-backup")
restore_backup
;;
"delete-backup")
delete_backup
;;
*)
echo >&2 "Invalid command"
exit 1
;;
esac
|