diff options
| author | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2025-03-18 11:13:05 +0100 |
|---|---|---|
| committer | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2025-03-18 11:13:05 +0100 |
| commit | 4c74788e4560ce8c1baa12a058af7c23e37510e8 (patch) | |
| tree | dc02ef350df45a8cea77fa5b24400b452dbb25bd /test/scripts/utils | |
| parent | e9af9e754c57fb9646cc5701c0f34b285ece100f (diff) | |
| parent | 321ac006318d707e1a0dfdeee1fce6761d090932 (diff) | |
| download | mullvadvpn-4c74788e4560ce8c1baa12a058af7c23e37510e8.tar.xz mullvadvpn-4c74788e4560ce8c1baa12a058af7c23e37510e8.zip | |
Merge branch 'mullvad-version-test-framework-is-broken'
Diffstat (limited to 'test/scripts/utils')
| -rwxr-xr-x | test/scripts/utils/download.sh | 219 | ||||
| -rwxr-xr-x | test/scripts/utils/lib.sh | 88 |
2 files changed, 63 insertions, 244 deletions
diff --git a/test/scripts/utils/download.sh b/test/scripts/utils/download.sh deleted file mode 100755 index b3e73d579c..0000000000 --- a/test/scripts/utils/download.sh +++ /dev/null @@ -1,219 +0,0 @@ -#!/usr/bin/env bash - -set -eu - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.." -REPO_ROOT="$TEST_FRAMEWORK_ROOT/.." - -export BUILD_RELEASE_REPOSITORY="https://releases.mullvad.net/desktop/releases" -export BUILD_DEV_REPOSITORY="https://releases.mullvad.net/desktop/builds" - -function executable_not_found_in_dist_error { - 1>&2 echo "Executable \"$1\" not found in specified dist dir. Exiting." - exit 1 -} - -# Returns the directory of the lib.sh script -function get_test_utils_dir { - echo "$SCRIPT_DIR" -} - -# Infer stable version from GitHub repo -RELEASES=$(curl -sf https://api.github.com/repos/mullvad/mullvadvpn-app/releases | jq -r '[.[] | select(((.tag_name|(startswith("android") or startswith("ios"))) | not))]') -LATEST_STABLE_RELEASE=$(jq -r '[.[] | select(.prerelease==false)] | .[0].tag_name' <<<"$RELEASES") - -function get_current_version { - local app_dir - app_dir="$REPO_ROOT" - if [ -n "${TEST_DIST_DIR+x}" ]; then - if [ ! -x "${TEST_DIST_DIR%/}/mullvad-version" ]; then - executable_not_found_in_dist_error mullvad-version - fi - "${TEST_DIST_DIR%/}/mullvad-version" - else - cargo run -q --manifest-path="$app_dir/Cargo.toml" --bin mullvad-version - fi -} - -CURRENT_VERSION=$(get_current_version) -commit=$(git rev-parse HEAD^\{commit\}) -commit=${commit:0:6} - -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 -export LATEST_STABLE_RELEASE - -function print_available_releases { - for release in $(jq -r '.[].tag_name' <<<"$RELEASES"); do - echo "$release" - done -} - -function get_package_dir { - local package_dir - if [[ -n "${PACKAGE_DIR+x}" ]]; then - # Resolve the package dir to an absolute path since cargo must be invoked from the test directory - package_dir=$(realpath "$PACKAGE_DIR") - elif [[ ("$(uname -s)" == "Darwin") ]]; then - package_dir="$HOME/Library/Caches/mullvad-test/packages" - elif [[ ("$(uname -s)" == "Linux") ]]; then - package_dir="$HOME/.cache/mullvad-test/packages" - else - echo "Unsupported OS" 1>&2 - exit 1 - fi - - mkdir -p "$package_dir" || exit 1 - # Clean up old packages - find "$package_dir" -type f -mtime +5 -delete || true - - echo "$package_dir" - return 0 -} - -function nice_time { - SECONDS=0 - if "$@"; then - result=0 - else - result=$? - fi - s=$SECONDS - echo "\"$*\" completed in $((s / 60))m:$((s % 60))s" - return $result -} -# Matches $1 with a build version string and sets the following exported variables: -# - BUILD_VERSION: The version part of the build string (e.g., "2024.3-beta1-dev-"). -# - COMMIT_HASH: The commit hash part of the build string (e.g., "abcdef"). -# - TAG: The tag part of the build string (e.g., "+tag"). -function parse_build_version { - if [[ "$1" =~ (^[0-9.]+(-beta[0-9]+)?-dev-)([0-9a-z]+)(\+[0-9a-z|-]+)?$ ]]; then - BUILD_VERSION="${BASH_REMATCH[1]}" - COMMIT_HASH="${BASH_REMATCH[3]}" - TAG="${BASH_REMATCH[4]}" - return 0 - fi - return 1 -} - -# Returns 0 if $1 is a development build. -function is_dev_version { - if [[ "$1" == *"-dev-"* ]]; then - return 0 - fi - return 1 -} - -function get_app_filename { - local version=$1 - local os=$2 - if is_dev_version "$version"; then - parse_build_version "$version" - version="${BUILD_VERSION}${COMMIT_HASH}${TAG:-}" - fi - case $os in - debian* | ubuntu*) - echo "MullvadVPN-${version}_amd64.deb" - ;; - fedora*) - echo "MullvadVPN-${version}_x86_64.rpm" - ;; - windows*) - echo "MullvadVPN-${version}.exe" - ;; - macos*) - echo "MullvadVPN-${version}.pkg" - ;; - *) - echo "Unsupported target: $os" 1>&2 - return 1 - ;; - esac -} - -function download_app_package { - local version=$1 - local os=$2 - local package_repo="" - - if is_dev_version "$version"; then - package_repo="${BUILD_DEV_REPOSITORY}" - else - package_repo="${BUILD_RELEASE_REPOSITORY}" - fi - - local filename - filename=$(get_app_filename "$version" "$os") - local url="${package_repo}/$version/$filename" - - local package_dir - package_dir=$(get_package_dir) - if [[ ! -f "$package_dir/$filename" ]]; then - echo "Downloading build for $version ($os) from $url" - if ! curl -sf -o "$package_dir/$filename" "$url"; then - echo "Failed to download package from $url (hint: build may not exist, check the url)" 1>&2 - exit 1 - fi - else - echo "App package for version $version ($os) already exists at $package_dir/$filename, skipping download" - fi -} - -function get_e2e_filename { - local version=$1 - local os=$2 - if is_dev_version "$version"; then - parse_build_version "$version" - version="${BUILD_VERSION}${COMMIT_HASH}" - fi - case $os in - debian* | ubuntu* | fedora*) - echo "app-e2e-tests-${version}-x86_64-unknown-linux-gnu" - ;; - windows*) - echo "app-e2e-tests-${version}-x86_64-pc-windows-msvc.exe" - ;; - macos*) - echo "app-e2e-tests-${version}-aarch64-apple-darwin" - ;; - *) - echo "Unsupported target: $os" 1>&2 - return 1 - ;; - esac -} - -function download_e2e_executable { - local version=${1:?Error: version not set} - local os=${2:?Error: os not set} - local package_repo - - if is_dev_version "$version"; then - package_repo="${BUILD_DEV_REPOSITORY}" - else - package_repo="${BUILD_RELEASE_REPOSITORY}" - fi - - local filename - filename=$(get_e2e_filename "$version" "$os") - local url="${package_repo}/$version/additional-files/$filename" - - local package_dir - package_dir=$(get_package_dir) - if [[ ! -f "$package_dir/$filename" ]]; then - echo "Downloading e2e executable for $version ($os) from $url" - if ! curl -sf -o "$package_dir/$filename" "$url"; then - echo "Failed to download package from $url (hint: build may not exist, check the url)" 1>&2 - exit 1 - fi - else - echo "GUI e2e executable for version $version ($os) already exists at $package_dir/$filename, skipping download" - fi -} diff --git a/test/scripts/utils/lib.sh b/test/scripts/utils/lib.sh index 55b98f89cb..2b260966d7 100755 --- a/test/scripts/utils/lib.sh +++ b/test/scripts/utils/lib.sh @@ -2,7 +2,7 @@ set -eu -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TEST_FRAMEWORK_ROOT="$SCRIPT_DIR/../.." REPO_ROOT="$TEST_FRAMEWORK_ROOT/.." @@ -23,31 +23,9 @@ function get_test_utils_dir { RELEASES=$(curl -sf https://api.github.com/repos/mullvad/mullvadvpn-app/releases | jq -r '[.[] | select(((.tag_name|(startswith("android") or startswith("ios"))) | not))]') LATEST_STABLE_RELEASE=$(jq -r '[.[] | select(.prerelease==false)] | .[0].tag_name' <<<"$RELEASES") -function get_current_version { - local app_dir - app_dir="$REPO_ROOT" - if [ -n "${TEST_DIST_DIR+x}" ]; then - if [ ! -x "${TEST_DIST_DIR%/}/mullvad-version" ]; then - executable_not_found_in_dist_error mullvad-version - fi - "${TEST_DIST_DIR%/}/mullvad-version" - else - cargo run -q --manifest-path="$app_dir/Cargo.toml" --bin mullvad-version - fi -} - -CURRENT_VERSION=$(get_current_version) commit=$(git rev-parse HEAD^\{commit\}) commit=${commit:0:6} -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 export LATEST_STABLE_RELEASE function print_available_releases { @@ -264,15 +242,19 @@ function run_tests_for_os { function build_current_version { local app_dir app_dir="$REPO_ROOT" + local current_version + pushd "$app_dir" + current_version=$(cargo run --package mullvad-version) + popd local app_filename # TODO: TEST_OS must be set to local OS manually, should be set automatically - app_filename=$(get_app_filename "$CURRENT_VERSION" "${TEST_OS:?Error: TEST_OS not set}") + app_filename=$(get_app_filename "$current_version" "${TEST_OS:?Error: TEST_OS not set}") local package_dir package_dir=$(get_package_dir) local app_package="$package_dir"/"$app_filename" local gui_test_filename - gui_test_filename=$(get_e2e_filename "$CURRENT_VERSION" "$TEST_OS") + gui_test_filename=$(get_e2e_filename "$current_version" "$TEST_OS") local gui_test_bin="$package_dir"/"$gui_test_filename" if [ ! -f "$app_package" ]; then @@ -298,3 +280,59 @@ function build_current_version { echo "GUI e2e executable for current version already exists at $gui_test_bin, skipping build" fi } + +function download_app_package { + local version=$1 + local os=$2 + local package_repo="" + + if is_dev_version "$version"; then + package_repo="${BUILD_DEV_REPOSITORY}" + else + package_repo="${BUILD_RELEASE_REPOSITORY}" + fi + + local filename + filename=$(get_app_filename "$version" "$os") + local url="${package_repo}/$version/$filename" + + local package_dir + package_dir=$(get_package_dir) + if [[ ! -f "$package_dir/$filename" ]]; then + echo "Downloading build for $version ($os) from $url" + if ! curl -sf -o "$package_dir/$filename" "$url"; then + echo "Failed to download package from $url (hint: build may not exist, check the url)" 1>&2 + exit 1 + fi + else + echo "App package for version $version ($os) already exists at $package_dir/$filename, skipping download" + fi +} + +function download_e2e_executable { + local version=${1:?Error: version not set} + local os=${2:?Error: os not set} + local package_repo + + if is_dev_version "$version"; then + package_repo="${BUILD_DEV_REPOSITORY}" + else + package_repo="${BUILD_RELEASE_REPOSITORY}" + fi + + local filename + filename=$(get_e2e_filename "$version" "$os") + local url="${package_repo}/$version/additional-files/$filename" + + local package_dir + package_dir=$(get_package_dir) + if [[ ! -f "$package_dir/$filename" ]]; then + echo "Downloading e2e executable for $version ($os) from $url" + if ! curl -sf -o "$package_dir/$filename" "$url"; then + echo "Failed to download package from $url (hint: build may not exist, check the url)" 1>&2 + exit 1 + fi + else + echo "GUI e2e executable for version $version ($os) already exists at $package_dir/$filename, skipping download" + fi +} |
