summaryrefslogtreecommitdiffhomepage
path: root/test/scripts/run/ci.sh
blob: f2c94306cf76f97f073e396569cfdcebf7e8afce (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
#!/usr/bin/env bash

# This script is invoked by the GitHub workflow file below to launch the desktop end to end test framwork.
# <https://github.com/mullvad/mullvadvpn-app/blob/main/.github/workflows/desktop-e2e.yml>

# TODO: Break this down into multiple, smaller scripts and compose them in this file.

set -eu

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.."
TEST_DIR="$TEST_FRAMEWORK_ROOT"

cd "$SCRIPT_DIR"

# Parse arguments
# TODO: Add support for either passing in --account-tokens or reading from env variable.
if [[ "$#" -lt 1 ]]; then
    echo "usage: $0 TEST_OS" 1>&2
    exit 1
fi

TEST_OS=$1

# shellcheck source=test/scripts/utils/lib.sh
source "../utils/lib.sh"

# The `CURRENT_VERSION` variable is set by the workflow file which invokes `mullvad-version`
# We need to add a suffix with tag information to get the current version string
TAG=$(git describe --exact-match HEAD 2>/dev/null || echo "")
if [[ -n "$TAG" && ${CURRENT_VERSION} =~ -dev- ]]; then
    # Remove disallowed version characters from the tag
    CURRENT_VERSION+="+${TAG//[^0-9a-z_-]/}"
fi
export CURRENT_VERSION

echo "**********************************"
echo "* Version to upgrade from: $LATEST_STABLE_RELEASE"
echo "* Version to test: $CURRENT_VERSION"
echo "**********************************"

# TODO: Add support for either passing in --account-tokens or reading from env variable.
if [[ -z "${ACCOUNT_TOKENS+x}" ]]; then
    echo "'ACCOUNT_TOKENS' must be specified" 1>&2
    exit 1
fi
if ! readarray -t tokens < "${ACCOUNT_TOKENS}"; then
    echo "Specify account numbers in 'ACCOUNT_TOKENS' file" 1>&2
    exit 1
fi

# TODO: Can we get rid of this? Seemse excessive / leaves a trail
CI_LOGS_DIR="$TEST_DIR/.ci-logs"
mkdir -p "$CI_LOGS_DIR"
echo "$CURRENT_VERSION" > "$CI_LOGS_DIR/last-version.log"


# TODO: This should def be it's own step in the GitHub actions workflow

echo "**********************************"
echo "* Downloading app packages"
echo "**********************************"


nice_time download_app_package "$LATEST_STABLE_RELEASE" "$TEST_OS"
nice_time download_app_package "$CURRENT_VERSION" "$TEST_OS"
nice_time download_e2e_executable "$CURRENT_VERSION" "$TEST_OS"

# TODO: This should def be it's own step in the GitHub actions workflow

echo "**********************************"
echo "* Running tests"
echo "**********************************"

# TODO: Should we really care about logging in this script?

mkdir -p "$CI_LOGS_DIR/os/"
export TEST_REPORT="$CI_LOGS_DIR/${TEST_OS}_report"
rm -f "$TEST_REPORT"

set -o pipefail

APP_PACKAGE=$(get_app_filename "$CURRENT_VERSION" "$TEST_OS")
export APP_PACKAGE
APP_PACKAGE_TO_UPGRADE_FROM=$(get_app_filename "$LATEST_STABLE_RELEASE" "$TEST_OS")
export APP_PACKAGE_TO_UPGRADE_FROM
ACCOUNT_TOKEN=${tokens[0]} RUST_LOG=debug nice_time run_tests_for_os "${TEST_OS}"