diff --git a/eng/cake/dotnet.cake b/eng/cake/dotnet.cake index 5db455519689..fe16cca87da4 100644 --- a/eng/cake/dotnet.cake +++ b/eng/cake/dotnet.cake @@ -11,6 +11,8 @@ string MSBuildExe = Argument("msbuild", EnvironmentVariable("MSBUILD_EXE", "")); string nugetSource = Argument("nugetsource", ""); string officialBuildId = Argument("officialbuildid", ""); +string DefaultDotnetVersion = Argument("targetFrameworkVersion", EnvironmentVariable("TARGET_FRAMEWORK_VERSION") ?? "net10.0"); + string testFilter = Argument("test-filter", EnvironmentVariable("TEST_FILTER")); var rootFolder = Context.Environment.WorkingDirectory; @@ -38,12 +40,14 @@ var NuGetOnlyPackages = new string[] { }; public enum RuntimeVariant { - Mono, - NativeAOT + Mono, + NativeAOT, + CoreCLR } RuntimeVariant RUNTIME_VARIANT = Argument("runtimevariant", RuntimeVariant.Mono); bool USE_NATIVE_AOT = RUNTIME_VARIANT == RuntimeVariant.NativeAOT ? true : false; +bool USE_CORECLR = RUNTIME_VARIANT == RuntimeVariant.CoreCLR ? true : false; ProcessTFMSwitches(); @@ -53,11 +57,11 @@ Task("dotnet") .Description("Provisions the .NET SDK into bin/dotnet based on eng/Versions.props") .Does(() => { - if (!localDotnet) + if (!localDotnet) return; //We are passing a nuget folder with nuget locations - if(!string.IsNullOrEmpty(nugetSource)) + if (!string.IsNullOrEmpty(nugetSource)) { EnsureDirectoryExists(nugetSource); var originalNuget = File($"{rootFolder}/NuGet.config"); @@ -72,19 +76,20 @@ Task("dotnet") .SetConfiguration(configuration), }); - DotNetTool("tool", new DotNetToolSettings { - ToolPath = dotnetPath, - DiagnosticOutput = true, - ArgumentCustomization = args => args.Append("restore") - }); + DotNetTool("tool", new DotNetToolSettings + { + ToolPath = dotnetPath, + DiagnosticOutput = true, + ArgumentCustomization = args => args.Append("restore") + }); }); Task("dotnet-local-workloads") .Does(() => { - if (!localDotnet) + if (!localDotnet) return; - + DotNetBuild("./src/DotNet/DotNet.csproj", new DotNetBuildSettings { MSBuildSettings = new DotNetMSBuildSettings() @@ -102,11 +107,12 @@ Task("dotnet-local-workloads") ToolPath = dotnetPath, }); - DotNetTool("tool", new DotNetToolSettings { - ToolPath = dotnetPath, - DiagnosticOutput = true, - ArgumentCustomization = args => args.Append("restore") - }); + DotNetTool("tool", new DotNetToolSettings + { + ToolPath = dotnetPath, + DiagnosticOutput = true, + ArgumentCustomization = args => args.Append("restore") + }); }); Task("dotnet-buildtasks") @@ -158,9 +164,10 @@ Task("dotnet-samples") var properties = new Dictionary(); - if(useNuget) + if (useNuget) { - properties = new Dictionary { + properties = new Dictionary + { ["UseWorkload"] = "true", // ["GenerateAppxPackageOnBuild"] = "true", ["RestoreConfigFile"] = tempDir.CombineWithFilePath("NuGet.config").FullPath, @@ -198,13 +205,26 @@ Task("uitests-apphost") var properties = new Dictionary(); - if(useNuget) + if (USE_CORECLR) { - properties = new Dictionary { - ["UseWorkload"] = "true", - // ["GenerateAppxPackageOnBuild"] = "true", - ["RestoreConfigFile"] = tempDir.CombineWithFilePath("NuGet.config").FullPath, - }; + Information("Building for CoreCLR"); + properties.Add("UseMonoRuntime", "false"); + properties.Add("TargetFramework", $"{DefaultDotnetVersion}-android"); + } + + if (USE_NATIVE_AOT) + { + Information("Building for NativeAOT"); + properties.Add("_UseNativeAot", "true"); + properties.Add("RuntimeIdentifier", "iossimulator-x64"); + } + + if (useNuget) + { + properties.Add("UseWorkload", "true"); + // properties.Add("GenerateAppxPackageOnBuild", "true"); + // We are passing a nuget folder with nuget locations + properties.Add("RestoreConfigFile", tempDir.CombineWithFilePath("NuGet.config").FullPath); } RunMSBuildWithDotNet("./src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj", properties, binlogPrefix: "uitests-apphost-"); }); @@ -234,7 +254,7 @@ Task("dotnet-test") .Description("Build the solutions") .Does(() => { - var tests = new [] + var tests = new[] { "**/Controls.Core.UnitTests.csproj", // "**/Controls.Core.Design.UnitTests.csproj", @@ -252,7 +272,7 @@ Task("dotnet-test") foreach (var test in tests) { - if (!IsRunningOnWindows() && (test.Contains("Compatibility.Core.UnitTests") || test.Contains("Controls.Core.Design.UnitTests"))) + if (!IsRunningOnWindows() && (test.Contains("Compatibility.Core.UnitTests") || test.Contains("Controls.Core.Design.UnitTests"))) { continue; } @@ -292,8 +312,8 @@ Task("dotnet-pack-maui") { sln = "./eng/Microsoft.Maui.Packages-mac.slnf"; } - - if(string.IsNullOrEmpty(officialBuildId)) + + if (string.IsNullOrEmpty(officialBuildId)) { officialBuildId = DateTime.UtcNow.ToString("yyyyMMdd.1"); } @@ -529,47 +549,58 @@ Task("VS") UseLocalNuGetCacheFolder(); StartVisualStudioForDotNet(); - }); + }); Task("GenerateCgManifest") .Description("Generates the cgmanifest.json file with versions from Versions.props") - .Does(() => + .Does(() => { Information("Generating cgmanifest.json from Versions.props"); - + // Use pwsh on all platforms var pwshExecutable = "pwsh"; - + // Check if pwsh is available - try { - if (IsRunningOnWindows()) { - var exitCode = StartProcess("where", new ProcessSettings { + try + { + if (IsRunningOnWindows()) + { + var exitCode = StartProcess("where", new ProcessSettings + { Arguments = "pwsh", - RedirectStandardOutput = true, + RedirectStandardOutput = true, RedirectStandardError = true }); - if (exitCode != 0) { + if (exitCode != 0) + { Information("pwsh not found, falling back to powershell"); pwshExecutable = "powershell"; } - } else { - var exitCode = StartProcess("which", new ProcessSettings { + } + else + { + var exitCode = StartProcess("which", new ProcessSettings + { Arguments = "pwsh", RedirectStandardOutput = true, RedirectStandardError = true }); - if (exitCode != 0) { + if (exitCode != 0) + { throw new Exception("PowerShell Core (pwsh) is not installed. Please install it to continue."); } } - } catch (Exception ex) when (!IsRunningOnWindows()) { + } + catch (Exception ex) when (!IsRunningOnWindows()) + { Error("Error checking for pwsh: " + ex.Message); throw new Exception("PowerShell Core (pwsh) is required on non-Windows platforms. Please install it and try again."); } - + // Execute the PowerShell script - StartProcess(pwshExecutable, new ProcessSettings { + StartProcess(pwshExecutable, new ProcessSettings + { Arguments = "-NonInteractive -ExecutionPolicy Bypass -File ./eng/scripts/update-cgmanifest.ps1" }); }); @@ -582,17 +613,17 @@ Task("publicapi") var controlsPublicApiDir = MakeAbsolute(Directory("./src/Controls/src/Core/PublicAPI")); var essentialsPublicApiDir = MakeAbsolute(Directory("./src/Essentials/src/PublicAPI")); var graphicsPublicApiDir = MakeAbsolute(Directory("./src/Graphics/src/Graphics/PublicAPI")); - + Information("Resetting PublicAPI.Unshipped.txt files..."); - + // Find and clear all PublicAPI.Unshipped.txt files in Core, Controls, Essentials, and Graphics var coreUnshippedFiles = GetFiles($"{corePublicApiDir}/**/PublicAPI.Unshipped.txt"); var controlsUnshippedFiles = GetFiles($"{controlsPublicApiDir}/**/PublicAPI.Unshipped.txt"); var essentialsUnshippedFiles = GetFiles($"{essentialsPublicApiDir}/**/PublicAPI.Unshipped.txt"); var graphicsUnshippedFiles = GetFiles($"{graphicsPublicApiDir}/**/PublicAPI.Unshipped.txt"); var allUnshippedFiles = coreUnshippedFiles.Concat(controlsUnshippedFiles).Concat(essentialsUnshippedFiles).Concat(graphicsUnshippedFiles); - - foreach(var file in allUnshippedFiles) + + foreach (var file in allUnshippedFiles) { // Skip Windows-specific files if not on Windows if (!IsRunningOnWindows() && file.FullPath.Contains("windows")) @@ -600,27 +631,27 @@ Task("publicapi") Information($"Skipping Windows file (not on Windows): {file}"); continue; } - + // Skip Tizen-specific files if (file.FullPath.Contains("tizen")) { Information($"Skipping Tizen file: {file}"); continue; } - + // Skip macOS-specific files if (file.FullPath.Contains("macos")) { Information($"Skipping macOS file: {file}"); continue; } - + Information($"Clearing: {file}"); System.IO.File.WriteAllText(file.FullPath, string.Empty); } - + Information("Regenerating PublicAPI..."); - + // Build Controls.Core.csproj with PublicApiType=Generate var settings = new DotNetBuildSettings { @@ -628,9 +659,9 @@ Task("publicapi") MSBuildSettings = new DotNetMSBuildSettings() }; settings.MSBuildSettings.Properties["PublicApiType"] = new List { "Generate" }; - + DotNetBuild("./src/Controls/src/Core/Controls.Core.csproj", settings); - + Information("PublicAPI reset and regeneration completed!"); }); @@ -647,7 +678,7 @@ bool RunPackTarget() // Does the user want to run a pack as part of a different target? if (HasArgument("pack") && Argument("pack", "true") != "false") return true; - + // If the request is to open a different sln then let's see if pack has ever run // if it hasn't then lets pack maui so the sln will open if (Argument("sln", null) != null) @@ -685,6 +716,7 @@ void SetDotNetEnvironmentVariables(string dotnetDir = null) { var dotnet = dotnetDir ?? MakeAbsolute(Directory("./.dotnet/")).ToString(); var dotnetHostPath = IsRunningOnWindows() ? $"{dotnet}/dotnet.exe" : $"{dotnet}/dotnet"; + SetEnvironmentVariable("VSDebugger_ValidateDotnetDebugLibSignatures", "0"); SetEnvironmentVariable("DOTNET_INSTALL_DIR", dotnet); SetEnvironmentVariable("DOTNET_ROOT", dotnet); @@ -729,14 +761,14 @@ void StartVisualStudioCodeForDotNet(bool useInsiders) return; } - if(localDotnet) + if (localDotnet) { SetDotNetEnvironmentVariables(); } string codeProcessName = useInsiders ? "code-insiders" : "code"; - StartProcess(codeProcessName, new ProcessSettings{ EnvironmentVariables = GetDotNetEnvironmentVariables() }); + StartProcess(codeProcessName, new ProcessSettings { EnvironmentVariables = GetDotNetEnvironmentVariables() }); } void StartVisualStudioForDotNet() @@ -766,7 +798,7 @@ void StartVisualStudioForDotNet() return; } - if(localDotnet) + if (localDotnet) { SetDotNetEnvironmentVariables(); } @@ -776,13 +808,13 @@ void StartVisualStudioForDotNet() var vsLatest = VSWhereLatest(new VSWhereLatestSettings { IncludePrerelease = includePrerelease, }); if (vsLatest == null) throw new Exception("Unable to find Visual Studio!"); - + StartProcess(vsLatest.CombineWithFilePath("./Common7/IDE/devenv.exe"), sln); } else { - - StartProcess("open", new ProcessSettings{ Arguments = sln, EnvironmentVariables = GetDotNetEnvironmentVariables() }); + + StartProcess("open", new ProcessSettings { Arguments = sln, EnvironmentVariables = GetDotNetEnvironmentVariables() }); } } @@ -806,8 +838,8 @@ void RunMSBuildWithDotNet( var binlog = string.IsNullOrEmpty(targetFramework) ? $"\"{GetLogDirectory()}/{binlogPrefix}{name}-{configuration}-{target}-{type}-{DateTime.UtcNow.ToFileTimeUtc()}.binlog\"" : $"\"{GetLogDirectory()}/{binlogPrefix}{name}-{configuration}-{target}-{targetFramework}-{type}-{DateTime.UtcNow.ToFileTimeUtc()}.binlog\""; - - if(localDotnet) + + if (localDotnet) SetDotNetEnvironmentVariables(); var msbuildSettings = new DotNetMSBuildSettings() @@ -815,8 +847,8 @@ void RunMSBuildWithDotNet( .SetMaxCpuCount(maxCpuCount) .WithTarget(target) .EnableBinaryLogger(binlog) - - // .SetVerbosity(Verbosity.Diagnostic) + + // .SetVerbosity(Verbosity.Diagnostic) ; var loggerArg = GetMSBuildForwardingLoggerPath(); @@ -850,7 +882,7 @@ void RunMSBuildWithDotNet( if (!string.IsNullOrEmpty(targetFramework)) args.Append($"-f {targetFramework}"); - + return args; }; @@ -860,7 +892,7 @@ void RunMSBuildWithDotNet( DotNetBuild(sln, dotnetBuildSettings); } -void RunTestWithLocalDotNet(string csproj, string config, string pathDotnet = null, Dictionary argsExtra = null, bool noBuild = false, string resultsFileNameWithoutExtension = null, string filter = "", int maxCpuCount = 0) +void RunTestWithLocalDotNet(string csproj, string config, string pathDotnet = null, Dictionary argsExtra = null, bool noBuild = false, string resultsFileNameWithoutExtension = null, string filter = "", int maxCpuCount = 0) { if (string.IsNullOrWhiteSpace(filter)) { @@ -869,7 +901,7 @@ void RunTestWithLocalDotNet(string csproj, string config, string pathDotnet = nu if (!string.IsNullOrWhiteSpace(filter)) { - Information("Run Tests With Filter {0}", filter); + Information("Run Tests With Filter {0}", filter); } string binlog; @@ -882,7 +914,7 @@ void RunTestWithLocalDotNet(string csproj, string config, string pathDotnet = nu { // Make sure the path doesn't refer to the dotnet executable and make path absolute var localDotnetRoot = MakeAbsolute(Directory(System.IO.Path.GetDirectoryName(pathDotnet))); - Information("new dotnet root: {0}", localDotnetRoot); + Information("new dotnet root: {0}", localDotnetRoot); SetDotNetEnvironmentVariables(localDotnetRoot.FullPath); } @@ -890,7 +922,7 @@ void RunTestWithLocalDotNet(string csproj, string config, string pathDotnet = nu if (string.IsNullOrWhiteSpace(resultsFileNameWithoutExtension)) { binlog = $"{logDirectory}/{name}-{config}.binlog"; - results = $"{name}-{config}.trx"; + results = $"{name}-{config}.trx"; } else { @@ -901,53 +933,57 @@ void RunTestWithLocalDotNet(string csproj, string config, string pathDotnet = nu Information("Run Test binlog: {0}", binlog); var settings = new DotNetTestSettings - { - Configuration = config, - NoBuild = noBuild, - Filter = filter, - Loggers = { + { + Configuration = config, + NoBuild = noBuild, + Filter = filter, + Loggers = { $"trx;LogFileName={results}", $"console;verbosity=normal" - }, - ResultsDirectory = GetTestResultsDirectory(), + }, + ResultsDirectory = GetTestResultsDirectory(), // Verbosity = Cake.Common.Tools.DotNetCore.DotNetCoreVerbosity.Diagnostic, - ArgumentCustomization = args => - { - var loggerArg = GetMSBuildForwardingLoggerPath(); - if (loggerArg != null) - { - args.Append(loggerArg); - } - args.Append($"-bl:{binlog}"); - if(maxCpuCount > 0) - { - args.Append($"-maxcpucount:{maxCpuCount}"); - } + ArgumentCustomization = args => + { + var loggerArg = GetMSBuildForwardingLoggerPath(); + if (loggerArg != null) + { + args.Append(loggerArg); + } - if(argsExtra != null) + args.Append($"-bl:{binlog}"); + if(maxCpuCount > 0) + { + args.Append($"-maxcpucount:{maxCpuCount}"); + } + + if (argsExtra != null) + { + foreach (var prop in argsExtra) { - foreach(var prop in argsExtra) - { - args.Append($"/p:{prop.Key}={prop.Value}"); - } - } - - // https://github.com/microsoft/vstest/issues/5112 - args.Append($"/p:VStestUseMSBuildOutput=false"); - - return args; + args.Append($"/p:{prop.Key}={prop.Value}"); + } } - }; - - if(!string.IsNullOrEmpty(pathDotnet)) + + // https://github.com/microsoft/vstest/issues/5112 + args.Append($"/p:VStestUseMSBuildOutput=false"); + + return args; + } + }; + + if (!string.IsNullOrEmpty(pathDotnet)) { settings.ToolPath = pathDotnet; } - try { + try + { DotNetTest(csproj, settings); - } finally { + } + finally + { Information("Test Run complete: {0}", results); } } @@ -991,25 +1027,25 @@ void ProcessTFMSwitches() { List replaceTarget = new List(); - if(HasArgument("android")) + if (HasArgument("android")) replaceTarget.Add("_IncludeAndroid"); - if(HasArgument("windows")) + if (HasArgument("windows")) replaceTarget.Add("_IncludeWindows"); - if(HasArgument("ios")) + if (HasArgument("ios")) replaceTarget.Add("_IncludeIos"); - if(HasArgument("catalyst") || HasArgument("maccatalyst")) + if (HasArgument("catalyst") || HasArgument("maccatalyst")) replaceTarget.Add("_IncludeMacCatalyst"); - if(HasArgument("tizen")) + if (HasArgument("tizen")) replaceTarget.Add("_IncludeTizen"); if (replaceTarget.Count > 0) { CopyFile("Directory.Build.Override.props.in", "Directory.Build.Override.props"); - foreach(var replaceWith in replaceTarget) + foreach (var replaceWith in replaceTarget) { ReplaceTextInFiles("Directory.Build.Override.props", $"<{replaceWith}>", $"<{replaceWith}>true"); } diff --git a/eng/pipelines/common/ui-tests-build-sample.yml b/eng/pipelines/common/ui-tests-build-sample.yml index b7d8712b6818..a3872de583cb 100644 --- a/eng/pipelines/common/ui-tests-build-sample.yml +++ b/eng/pipelines/common/ui-tests-build-sample.yml @@ -10,7 +10,7 @@ parameters: skipProvisioning: true configuration: "Release" testFilter: '' - runtimeVariant: 'Mono' + runtimeVariant: 'Mono' #Mono, CoreCLR, NativeAOT steps: - ${{ if eq(parameters.platform, 'ios')}}: @@ -66,25 +66,33 @@ steps: continueOnError: true - publish: $(System.DefaultWorkingDirectory)/artifacts/bin - condition: and(ne('${{ parameters.platform }}' , 'windows'), ne('${{ parameters.runtimeVariant }}' , 'NativeAOT'), succeeded()) + condition: and(ne('${{ parameters.platform }}' , 'windows'), ne('${{ parameters.runtimeVariant }}' , 'NativeAOT'), ne('${{ parameters.runtimeVariant }}' , 'CoreCLR'), succeeded()) artifact: ui-tests-samples - publish: $(System.DefaultWorkingDirectory)/artifacts/bin condition: and(ne('${{ parameters.platform }}' , 'windows'), eq('${{ parameters.runtimeVariant }}' , 'NativeAOT'), succeeded()) artifact: ui-tests-samples-nativeaot +- publish: $(System.DefaultWorkingDirectory)/artifacts/bin + condition: and(ne('${{ parameters.platform }}' , 'windows'), eq('${{ parameters.runtimeVariant }}' , 'CoreCLR'), succeeded()) + artifact: ui-tests-samples-coreclr + - publish: $(System.DefaultWorkingDirectory)/artifacts/bin condition: and(eq('${{ parameters.platform }}' , 'windows'), succeeded()) artifact: ui-tests-samples-windows - publish: $(System.DefaultWorkingDirectory)/artifacts/bin - condition: and(ne('${{ parameters.platform }}' , 'windows'), ne('${{ parameters.runtimeVariant }}' , 'NativeAOT'), failed()) + condition: and(ne('${{ parameters.platform }}' , 'windows'), ne('${{ parameters.runtimeVariant }}' , 'NativeAOT'), ne('${{ parameters.runtimeVariant }}' , 'CoreCLR'), failed()) artifact: ui-tests-samples_failed_$(System.JobAttempt) - publish: $(System.DefaultWorkingDirectory)/artifacts/bin condition: and(ne('${{ parameters.platform }}' , 'windows'), eq('${{ parameters.runtimeVariant }}' , 'NativeAOT'), failed()) artifact: ui-tests-samples-nativeaot_failed_$(System.JobAttempt) +- publish: $(System.DefaultWorkingDirectory)/artifacts/bin + condition: and(ne('${{ parameters.platform }}' , 'windows'), eq('${{ parameters.runtimeVariant }}' , 'CoreCLR'), failed()) + artifact: ui-tests-samples-coreclr_failed_$(System.JobAttempt) + - publish: $(System.DefaultWorkingDirectory)/artifacts/bin condition: and(eq('${{ parameters.platform }}' , 'windows'), failed()) artifact: ui-tests-samples-windows_failed_$(System.JobAttempt) diff --git a/eng/pipelines/common/ui-tests-steps.yml b/eng/pipelines/common/ui-tests-steps.yml index 186e8fbb5cb7..9f38a99022f9 100644 --- a/eng/pipelines/common/ui-tests-steps.yml +++ b/eng/pipelines/common/ui-tests-steps.yml @@ -25,6 +25,11 @@ steps: inputs: artifact: ui-tests-samples-nativeaot +- task: DownloadPipelineArtifact@2 + condition: and(ne('${{ parameters.platform }}' , 'windows'), eq('${{ parameters.runtimeVariant }}' , 'CoreCLR')) + inputs: + artifact: ui-tests-samples-coreclr + - task: DownloadPipelineArtifact@2 condition: eq('${{ parameters.platform }}' , 'windows') inputs: diff --git a/eng/pipelines/common/ui-tests.yml b/eng/pipelines/common/ui-tests.yml index e84b23ebe35d..cc65db785543 100644 --- a/eng/pipelines/common/ui-tests.yml +++ b/eng/pipelines/common/ui-tests.yml @@ -58,10 +58,26 @@ stages: parameters: runtimeVariant: "Mono" skipProvisioning: ${{ parameters.skipProvisioning }} + + - stage: build_ui_tests_coreclr + displayName: Build UITests CoreCLR Sample App + dependsOn: [] + jobs: + - job: build_ui_tests + displayName: Build Sample App + pool: ${{ parameters.androidPool }} + variables: + REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE) + APPIUM_HOME: $(System.DefaultWorkingDirectory)/.appium/ + steps: + - template: ui-tests-build-sample.yml + parameters: + runtimeVariant: "CoreCLR" + skipProvisioning: ${{ parameters.skipProvisioning }} - ${{ if or(parameters.BuildEverything, and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'devdiv'))) }}: - stage: build_ui_tests_nativeaot - displayName: Build UITests Sample App NativeAOT + displayName: Build UITests NativeAOT Sample App dependsOn: [] jobs: - job: build_ui_tests @@ -129,6 +145,45 @@ stages: agentPoolAccessToken: ${{ parameters.agentPoolAccessToken }} testFilter: $(CATEGORYGROUP) skipProvisioning: ${{ parameters.skipProvisioning }} + + - stage: android_ui_tests_coreclr + displayName: Android UITests CoreClr + dependsOn: build_ui_tests_coreclr + jobs: + - ${{ each project in parameters.projects }}: + - ${{ if ne(project.android, '') }}: + - ${{ each api in parameters.androidApiLevels }}: + - ${{ if not(containsValue(project.androidApiLevelsExclude, api)) }}: + - job: android_ui_tests_${{ project.name }}_${{ api }} + strategy: + matrix: + ${{ each categoryGroup in parameters.categoryGroupsToTest }}: + ${{ categoryGroup }}: + CATEGORYGROUP: ${{ categoryGroup }} + timeoutInMinutes: 240 # how long to run the job before automatically cancelling + workspace: + clean: all + displayName: ${{ coalesce(project.desc, project.name) }} (API ${{ api }}) + pool: ${{ parameters.androidLinuxPool }} + variables: + REQUIRED_XCODE: $(DEVICETESTS_REQUIRED_XCODE) + APPIUM_HOME: $(System.DefaultWorkingDirectory)/.appium/ + steps: + - template: ui-tests-steps.yml + parameters: + platform: android + version: ${{ api }} + path: ${{ project.android }} + app: ${{ project.app }} + ${{ if eq(api, 27) }}: + device: android-emulator-32_${{ api }} + ${{ if not(eq(api, 27)) }}: + device: android-emulator-64_${{ api }} + provisionatorChannel: ${{ parameters.provisionatorChannel }} + agentPoolAccessToken: ${{ parameters.agentPoolAccessToken }} + testFilter: $(CATEGORYGROUP) + skipProvisioning: ${{ parameters.skipProvisioning }} + runtimeVariant: "CoreCLR" - stage: ios_ui_tests_mono displayName: iOS UITests Mono diff --git a/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj b/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj index 797dd7b78342..bee3c5b3fd2c 100644 --- a/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj +++ b/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj @@ -23,7 +23,7 @@ <_FastDeploymentDiagnosticLogging>True None - $(NoWarn);CS0618;CS0672;XC0618;XC0022;XC0023 + $(NoWarn);CS0618;CS0672;XC0618;XC0022;XC0023;IL2026;IL2091;IL2067;IL2072;IL2087;IL3050