Skip to content

Commit

Permalink
Fix device tests to tun on arm64 (#16408)
Browse files Browse the repository at this point in the history
* Build on arm64

* magic

* Only install on Arm64 machines

* cleanup demands on the pipeline and add windows parameter

* Print system arch

* Fix getting OSArchitecture

---------

Co-authored-by: Rui Marinho <[email protected]>
  • Loading branch information
mattleibow and rmarinho authored Jul 31, 2023
1 parent 95319f3 commit 3fe10f7
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 74 deletions.
14 changes: 11 additions & 3 deletions eng/devices/android.cake
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const string dotnetVersion = "net7.0";

// required
FilePath PROJECT = Argument("project", EnvironmentVariable("ANDROID_TEST_PROJECT") ?? "");
string TEST_DEVICE = Argument("device", EnvironmentVariable("ANDROID_TEST_DEVICE") ?? $"android-emulator-32_{defaultVersion}");
string TEST_DEVICE = Argument("device", EnvironmentVariable("ANDROID_TEST_DEVICE") ?? $"android-emulator-64_{defaultVersion}");
string DEVICE_NAME = Argument("skin", EnvironmentVariable("ANDROID_TEST_SKIN") ?? "Nexus 5X");

// optional
Expand Down Expand Up @@ -82,25 +82,33 @@ Setup(context =>
if (parts[0] != "android")
throw new Exception("Unexpected platform (expected: android) in device: " + TEST_DEVICE);
// device/emulator
Information("Create for: {0}", parts[1]);
if (parts[1] == "device")
emulator = false;
else if (parts[1] != "emulator" && parts[1] != "simulator")
throw new Exception("Unexpected device type (expected: device|emulator) in device: " + TEST_DEVICE);
// arch/bits
Information("Host OS System Arch: {0}", System.Runtime.InteropServices.RuntimeInformation.OSArchitecture);
Information("Host Processor System Arch: {0}", System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture);
if (parts[2] == "32") {
if (emulator)
DEVICE_ARCH = "x86";
else
DEVICE_ARCH = "armeabi-v7a";
} else if (parts[2] == "64") {
if (emulator)
if (System.Runtime.InteropServices.RuntimeInformation.OSArchitecture == System.Runtime.InteropServices.Architecture.Arm64)
DEVICE_ARCH = "arm64-v8a";
else if (emulator)
DEVICE_ARCH = "x86_64";
else
DEVICE_ARCH = "arm64-v8a";
}
var sdk = api >= 24 ? "google_apis_playstore" : "google_apis";
var sdk = api >= 28 ? "google_apis_playstore" : "google_apis";
if (api == 27 && DEVICE_ARCH == "x86_64")
sdk = "default";
DEVICE_ID = $"system-images;android-{api};{sdk};{DEVICE_ARCH}";

Information("Going to run image: {0}", DEVICE_ID);
// we are not using a virtual device, so quit
if (!emulator)
return;
Expand Down
10 changes: 3 additions & 7 deletions eng/pipelines/common/device-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ parameters:
androidPool: { }
iosPool: { }
catalystPool: { }
windowsPool: { }
androidApiLevels: [ 30 ]
iosVersions: [ 'latest' ]
catalystVersions: [ 'latest' ]
Expand Down Expand Up @@ -36,13 +37,9 @@ stages:
${{ each api in parameters.androidApiLevels }}:
${{ if not(containsValue(project.androidApiLevelsExclude, api)) }}:
${{ replace(coalesce(project.desc, project.name), ' ', '_') }}_API_${{ api }}:
${{ if ge(api, 24) }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis_playstore;x86"
${{ else }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86"
REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE)
PROJECT_PATH: ${{ project.android }}
DEVICE: android-emulator-32_${{ api }}
DEVICE: android-emulator-64_${{ api }}
steps:
- template: device-tests-steps.yml
parameters:
Expand Down Expand Up @@ -139,8 +136,7 @@ stages:
workspace:
clean: all
displayName: "Windows device tests"
pool:
vmImage: windows-latest
pool: ${{ parameters.windowsPool }}
strategy:
matrix:
# create all the variables used for the matrix
Expand Down
12 changes: 2 additions & 10 deletions eng/pipelines/common/ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,6 @@ stages:
displayName: ${{ coalesce(project.desc, project.name) }} (API ${{ api }})
pool: ${{ parameters.androidPool }}
variables:
${{ if ge(api, 24) }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis_playstore;x86"
${{ if lt(api, 24) }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86"
REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE)
steps:
- template: ui-tests-steps.yml
Expand All @@ -52,7 +48,7 @@ stages:
version: ${{ api }}
path: ${{ project.android }}
app: ${{ project.app }}
device: android-emulator-32_${{ api }}
device: android-emulator-64_${{ api }}
provisionatorChannel: ${{ parameters.provisionatorChannel }}
agentPoolAccessToken: ${{ parameters.agentPoolAccessToken }}

Expand Down Expand Up @@ -153,10 +149,6 @@ stages:
displayName: ${{ coalesce(project.desc, project.name) }} (API ${{ api }})
pool: ${{ parameters.androidCompatibilityPool }}
variables:
${{ if ge(api, 24) }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis_playstore;x86"
${{ if lt(api, 24) }}:
ANDROID_EMULATORS: "system-images;android-${{ api }};google_apis;x86"
REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE)
steps:
- template: ui-tests-compatibility-steps.yml
Expand All @@ -168,7 +160,7 @@ stages:
path: ${{ project.compatibilityAndroidTestProject }}
app: ${{ project.compatibilityAndroidApp }}
targetSample: "dotnet-legacy-controlgallery-android"
device: android-emulator-32_${{ api }}
device: android-emulator-64_${{ api }}
provisionatorChannel: ${{ parameters.provisionatorChannel }}
agentPoolAccessToken: ${{ parameters.agentPoolAccessToken }}

Expand Down
11 changes: 10 additions & 1 deletion eng/pipelines/device-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,33 @@ parameters:
- name: BuildEverything
type: boolean
default: false

- name: androidPool
type: object
default:
name: $(androidTestsVmPool)
vmImage: $(androidTestsVmImage)
demands:
- macOS.Name -equals Ventura
- macOS.Architecture -equals x64

- name: iosPool
type: object
default:
name: $(iosTestsVmPool)
vmImage: $(iosTestsVmImage)

- name: catalystPool
type: object
default:
name: $(iosTestsVmPool)
vmImage: $(iosTestsVmImage)

- name: windowsPool
type: object
default:
name: $(windowsTestsVmPool)
vmImage: $(windowsTestsVmImage)

resources:
repositories:
- repository: yaml-templates
Expand All @@ -90,6 +98,7 @@ stages:
androidPool: ${{ parameters.androidPool }}
iosPool: ${{ parameters.iosPool }}
catalystPool: ${{ parameters.catalystPool }}
windowsPool: ${{ parameters.windowsPool }}
agentPoolAccessToken: $(AgentPoolAccessToken)
${{ if or(parameters.BuildEverything, and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'devdiv'))) }}:
androidApiLevels: [ 30, 29, 28, 27, 26, 25, 24, 23 ]
Expand Down
4 changes: 0 additions & 4 deletions eng/pipelines/ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ parameters:
vmImage: $(androidTestsVmImage)
demands:
- macOS.Name -equals Ventura
- macOS.Architecture -equals x64

- name: iosPool
type: object
Expand All @@ -77,7 +76,6 @@ parameters:
vmImage: $(androidTestsVmImage)
demands:
- macOS.Name -equals Ventura
- macOS.Architecture -equals x64

- name: windowsPool
type: object
Expand All @@ -98,7 +96,6 @@ parameters:
vmImage: $(androidTestsVmImage)
demands:
- macOS.Name -equals Ventura
- macOS.Architecture -equals x64

- name: iosCompatibilityPool
type: object
Expand All @@ -107,7 +104,6 @@ parameters:
vmImage: $(androidTestsVmImage)
demands:
- macOS.Name -equals Ventura
- macOS.Architecture -equals x64


resources:
Expand Down
79 changes: 30 additions & 49 deletions eng/provisioning/provisioning.csx
Original file line number Diff line number Diff line change
Expand Up @@ -24,55 +24,36 @@ if(String.IsNullOrWhiteSpace(ANDROID_API_SDKS))
.ApiLevel((AndroidApiLevel)31)
.ApiLevel((AndroidApiLevel)32)
.ApiLevel((AndroidApiLevel)33)
.VirtualDevice(
"Android_API23",
(AndroidApiLevel)23,
AndroidSystemImageApi.Google,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice(
"Android_API24",
AndroidApiLevel.Nougat,
AndroidSystemImageApi.GooglePlayStore,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice(
"Android_API25",
AndroidApiLevel.Nougat_7_1,
AndroidSystemImageApi.GooglePlayStore,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice(
"Android_API26",
AndroidApiLevel.Oreo,
AndroidSystemImageApi.GooglePlayStore,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice(
"Android_API27",
AndroidApiLevel.Oreo_8_1 ,
AndroidSystemImageApi.GooglePlayStore,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice(
"Android_API28",
AndroidApiLevel.P,
AndroidSystemImageApi.GooglePlayStore,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice(
"Android_API29",
AndroidApiLevel.Q,
AndroidSystemImageApi.GooglePlayStore,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice(
"Android_API30",
AndroidApiLevel.R,
AndroidSystemImageApi.GooglePlayStore,
AndroidSystemImageAbi.x86,
AndroidVirtualDevice.NEXUS_5X)
.SdkManagerPackage ("build-tools;33.0.0");
.VirtualDevice("Android_x64_API23", (AndroidApiLevel)23, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API24", (AndroidApiLevel)24, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API25", (AndroidApiLevel)25, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API26", (AndroidApiLevel)26, AndroidSystemImageApi.Google, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API27", (AndroidApiLevel)27, AndroidSystemImageApi.Default, /*!!*/ AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API28", (AndroidApiLevel)28, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API29", (AndroidApiLevel)29, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API30", (AndroidApiLevel)30, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API31", (AndroidApiLevel)31, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API32", (AndroidApiLevel)32, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_x64_API33", (AndroidApiLevel)33, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.x86_64, AndroidVirtualDevice.NEXUS_5X);


if (IsArm64)
{
AndroidSdk()
.VirtualDevice("Android_arm64_API23", (AndroidApiLevel)23, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API24", (AndroidApiLevel)24, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API25", (AndroidApiLevel)25, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API26", (AndroidApiLevel)26, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API27", (AndroidApiLevel)27, AndroidSystemImageApi.Google, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API28", (AndroidApiLevel)28, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API29", (AndroidApiLevel)29, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API30", (AndroidApiLevel)30, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API31", (AndroidApiLevel)31, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API32", (AndroidApiLevel)32, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X)
.VirtualDevice("Android_arm64_API33", (AndroidApiLevel)33, AndroidSystemImageApi.GooglePlayStore, AndroidSystemImageAbi.ARM64_v8a, AndroidVirtualDevice.NEXUS_5X);
}

AndroidSdk().SdkManagerPackage ("build-tools;33.0.0");
}
else
{
Expand Down

0 comments on commit 3fe10f7

Please sign in to comment.