summaryrefslogtreecommitdiffhomepage
path: root/version_metadata.sh
blob: 55f5df631b09b7e5364fb2e4f1154eeb7ee2e873 (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
#!/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

# Regex that only matches valid Mullvad VPN versions. It also captures
# relevant values into capture groups, read out via BASH_REMATCH[x].
VERSION_REGEX="^20([0-9]{2})\.([1-9][0-9]?)(-beta([1-9][0-9]?))?(-dev-[0-9a-f]+)?$"

case "$1" in
    "inject")
        PRODUCT_VERSION=$2
        if [[ ! $PRODUCT_VERSION =~ $VERSION_REGEX ]]; then
            echo "Invalid version format. Please specify version as:"
            echo "<YEAR>.<NUMBER>[-beta<NUMBER>]"
            exit 1
        fi

        VERSION_YEAR=$(printf "%02d" ${BASH_REMATCH[1]})
        VERSION_NUMBER=$(printf "%02d" ${BASH_REMATCH[2]})
        VERSION_PATCH="00" # Not used for now.
        VERSION_BETA=$(printf "%02d" ${BASH_REMATCH[4]:-99})
        ANDROID_VERSION_CODE=${VERSION_YEAR}${VERSION_NUMBER}${VERSION_PATCH}${VERSION_BETA}

        SEMVER_VERSION=$(echo $PRODUCT_VERSION | sed -Ee 's/($|-.*)/.0\1/g')
        SEMVER_MAJOR="20${BASH_REMATCH[1]}"
        SEMVER_MINOR=${BASH_REMATCH[2]}
        SEMVER_PATCH="0"

        # 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)

        # Rust crates
        sed -i.bak -Ee "s/^version = \"[^\"]+\"\$/version = \"$SEMVER_VERSION\"/g" \
            mullvad-daemon/Cargo.toml \
            mullvad-cli/Cargo.toml \
            mullvad-problem-report/Cargo.toml \
            talpid-openvpn-plugin/Cargo.toml

        # 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

        # Android
        if [[ ("$(uname -s)" == "Linux") ]]; then
            cp android/build.gradle android/build.gradle.bak
            sed -i -Ee "s/versionCode [0-9]+/versionCode $ANDROID_VERSION_CODE/g" \
                android/build.gradle
            sed -i -Ee "s/versionName \"[^\"]+\"/versionName \"$PRODUCT_VERSION\"/g" \
                android/build.gradle
        fi
        ;;
    "restore-backup")
        # Electron GUI
        mv gui/package.json.bak gui/package.json || true
        mv gui/package-lock.json.bak gui/package-lock.json || true
        # Rust crates
        mv mullvad-daemon/Cargo.toml.bak mullvad-daemon/Cargo.toml || true
        mv mullvad-cli/Cargo.toml.bak mullvad-cli/Cargo.toml || true
        mv mullvad-problem-report/Cargo.toml.bak mullvad-problem-report/Cargo.toml || true
        mv talpid-openvpn-plugin/Cargo.toml.bak talpid-openvpn-plugin/Cargo.toml || true
        # Windows C++
        mv dist-assets/windows/version.h.bak dist-assets/windows/version.h || true
        # Android
        if [[ ("$(uname -s)" == "Linux") ]]; then
            mv android/build.gradle.bak android/build.gradle || true
        fi
        ;;
    "delete-backup")
        # Electron GUI
        rm gui/package.json.bak || true
        rm gui/package-lock.json.bak || true
        # Rust crates
        rm mullvad-daemon/Cargo.toml.bak || true
        rm mullvad-cli/Cargo.toml.bak || true
        rm mullvad-problem-report/Cargo.toml.bak || true
        rm talpid-openvpn-plugin/Cargo.toml.bak || true
        # Windows C++
        rm dist-assets/windows/version.h.bak || true
        # Android
        if [[ ("$(uname -s)" == "Linux") ]]; then
            rm android/build.gradle.bak || true
        fi
        ;;
    *)
        echo "Invalid command"
        exit 1
        ;;
esac