diff --git a/tests/common/Configuration.cs b/tests/common/Configuration.cs index 3bb6d23278..22d048e3aa 100644 --- a/tests/common/Configuration.cs +++ b/tests/common/Configuration.cs @@ -224,11 +224,15 @@ namespace Xamarin.Tests { public static string EvaluateVariable (string variable) { + var result = Environment.GetEnvironmentVariable (variable); + if (!string.IsNullOrEmpty (result)) + return result; + var output = new StringBuilder (); var rv = ExecutionHelper.Execute ("/usr/bin/make", new string [] { "-C", Path.Combine (SourceRoot, "tools", "devops"), "print-abspath-variable", $"VARIABLE={variable}" }, environmentVariables: null, stdout: output, stderr: output, timeout: TimeSpan.FromSeconds (5)); if (rv != 0) throw new Exception ($"Failed to evaluate variable '{variable}'. Exit code: {rv}. Output:\n{output}"); - var result = output.ToString ().Split (new char [] { '\n' }, StringSplitOptions.RemoveEmptyEntries).Where (v => v.StartsWith (variable + "=", StringComparison.Ordinal)).SingleOrDefault (); + result = output.ToString ().Split (new char [] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Where (v => v.StartsWith (variable + "=", StringComparison.Ordinal)).SingleOrDefault (); if (result is null) throw new Exception ($"Could not find the variable '{variable}' to evaluate."); return result.Substring (variable.Length + 1); diff --git a/tests/xharness/Harness.cs b/tests/xharness/Harness.cs index edf04e9c2b..af0b27c0e6 100644 --- a/tests/xharness/Harness.cs +++ b/tests/xharness/Harness.cs @@ -168,7 +168,7 @@ namespace Xharness { // the Make.config will use the wrong version. The CI set the version in the environment variable {platform}_WORKLOAD_VERSION via a script. var workloadVersion = Environment.GetEnvironmentVariable ($"{platform.ToUpperInvariant ()}_WORKLOAD_VERSION"); mlaunchPath = Path.Combine (mlaunchPath, $"Microsoft.{platform}.Sdk", - string.IsNullOrEmpty (workloadVersion) ? config [$"{platform.ToUpperInvariant ()}_NUGET_VERSION_NO_METADATA"] : workloadVersion); + string.IsNullOrEmpty (workloadVersion) ? GetVariable ($"{platform.ToUpperInvariant ()}_NUGET_VERSION_NO_METADATA") : workloadVersion); mlaunchPath = Path.Combine (mlaunchPath, "tools", "bin", "mlaunch"); return mlaunchPath; } else if (INCLUDE_XAMARIN_LEGACY && INCLUDE_IOS) { @@ -178,6 +178,21 @@ namespace Xharness { } } + bool IsVariableSet (string variable) + { + return !string.IsNullOrEmpty (GetVariable (variable)); + } + + string GetVariable (string variable, string @default = null) + { + var result = Environment.GetEnvironmentVariable (variable); + if (string.IsNullOrEmpty (result)) + config.TryGetValue (variable, out result); + if (string.IsNullOrEmpty (result)) + result = @default; + return result; + } + public List IOSTestProjects { get; } public List MacTestProjects { get; } = new List (); @@ -207,7 +222,7 @@ namespace Xharness { public bool INCLUDE_XAMARIN_LEGACY { get; } public string SYSTEM_MONO { get; set; } public string DOTNET_DIR { get; set; } - public string DotNetTfm { get; set; } + public string DOTNET_TFM { get; set; } // Run @@ -265,35 +280,32 @@ namespace Xharness { LaunchTimeout = InCI ? 3 : 120; - var config = ParseConfigFiles (); + config = ParseConfigFiles (); var src_root = Path.GetDirectoryName (Path.GetFullPath (RootDirectory)); MONO_PATH = Path.GetFullPath (Path.Combine (src_root, "external", "mono")); TVOS_MONO_PATH = MONO_PATH; - INCLUDE_IOS = config.ContainsKey ("INCLUDE_IOS") && !string.IsNullOrEmpty (config ["INCLUDE_IOS"]); - INCLUDE_TVOS = config.ContainsKey ("INCLUDE_TVOS") && !string.IsNullOrEmpty (config ["INCLUDE_TVOS"]); - JENKINS_RESULTS_DIRECTORY = config ["JENKINS_RESULTS_DIRECTORY"]; - INCLUDE_WATCH = config.ContainsKey ("INCLUDE_WATCH") && !string.IsNullOrEmpty (config ["INCLUDE_WATCH"]); - INCLUDE_MAC = config.ContainsKey ("INCLUDE_MAC") && !string.IsNullOrEmpty (config ["INCLUDE_MAC"]); - INCLUDE_MACCATALYST = config.ContainsKey ("INCLUDE_MACCATALYST") && !string.IsNullOrEmpty (config ["INCLUDE_MACCATALYST"]); - MAC_DESTDIR = config ["MAC_DESTDIR"]; - - IOS_DESTDIR = config ["IOS_DESTDIR"]; - MONO_IOS_SDK_DESTDIR = config ["MONO_IOS_SDK_DESTDIR"]; - MONO_MAC_SDK_DESTDIR = config ["MONO_MAC_SDK_DESTDIR"]; - ENABLE_DOTNET = config.ContainsKey ("ENABLE_DOTNET") && !string.IsNullOrEmpty (config ["ENABLE_DOTNET"]); - SYSTEM_MONO = config ["SYSTEM_MONO"]; - DOTNET_DIR = config ["DOTNET_DIR"]; - INCLUDE_XAMARIN_LEGACY = config.ContainsKey ("INCLUDE_XAMARIN_LEGACY") && !string.IsNullOrEmpty (config ["INCLUDE_XAMARIN_LEGACY"]); - DotNetTfm = config ["DOTNET_TFM"]; + INCLUDE_IOS = IsVariableSet (nameof (INCLUDE_IOS)); + INCLUDE_TVOS = IsVariableSet (nameof (INCLUDE_TVOS)); + JENKINS_RESULTS_DIRECTORY = GetVariable (nameof (JENKINS_RESULTS_DIRECTORY)); + INCLUDE_WATCH = IsVariableSet (nameof (INCLUDE_WATCH)); + INCLUDE_MAC = IsVariableSet (nameof (INCLUDE_MAC)); + INCLUDE_MACCATALYST = IsVariableSet (nameof (INCLUDE_MACCATALYST)); + MAC_DESTDIR = GetVariable (nameof (MAC_DESTDIR)); + IOS_DESTDIR = GetVariable (nameof (IOS_DESTDIR)); + MONO_IOS_SDK_DESTDIR = GetVariable (nameof (MONO_IOS_SDK_DESTDIR)); + MONO_MAC_SDK_DESTDIR = GetVariable (nameof (MONO_MAC_SDK_DESTDIR)); + ENABLE_DOTNET = IsVariableSet (nameof (ENABLE_DOTNET)); + SYSTEM_MONO = GetVariable (nameof (SYSTEM_MONO)); + DOTNET_DIR = GetVariable (nameof (DOTNET_DIR)); + INCLUDE_XAMARIN_LEGACY = IsVariableSet (nameof (INCLUDE_XAMARIN_LEGACY)); + DOTNET_TFM = GetVariable (nameof (DOTNET_TFM)); if (string.IsNullOrEmpty (SdkRoot)) - SdkRoot = config ["XCODE_DEVELOPER_ROOT"] ?? configuration.SdkRoot; - - this.config = config; + SdkRoot = GetVariable ("XCODE_DEVELOPER_ROOT", configuration.SdkRoot); processManager = new MlaunchProcessManager (XcodeRoot, MlaunchPath); - AppBundleLocator = new AppBundleLocator (processManager, () => HarnessLog, XIBuildPath, "/usr/local/share/dotnet/dotnet", config ["DOTNET"]); + AppBundleLocator = new AppBundleLocator (processManager, () => HarnessLog, XIBuildPath, "/usr/local/share/dotnet/dotnet", GetVariable ("DOTNET")); TunnelBore = new TunnelBore (processManager); } diff --git a/tests/xharness/IHarness.cs b/tests/xharness/IHarness.cs index 634b1a709e..eb3cb111f4 100644 --- a/tests/xharness/IHarness.cs +++ b/tests/xharness/IHarness.cs @@ -47,6 +47,7 @@ namespace Xharness { bool INCLUDE_XAMARIN_LEGACY { get; } string SYSTEM_MONO { get; set; } string DOTNET_DIR { get; set; } + string DOTNET_TFM { get; } string XcodeRoot { get; } string LogDirectory { get; } double Timeout { get; } @@ -64,7 +65,6 @@ namespace Xharness { bool UseGroupedApps { get; } string VSDropsUri { get; } bool DisableWatchOSOnWrench { get; } - string DotNetTfm { get; } #endregion diff --git a/tests/xharness/Targets/Target.cs b/tests/xharness/Targets/Target.cs index 7f186847be..bf3bcb80c8 100644 --- a/tests/xharness/Targets/Target.cs +++ b/tests/xharness/Targets/Target.cs @@ -65,7 +65,7 @@ namespace Xharness.Targets { public const string FSharpGuid = "{F2A71F9B-5D33-465A-A702-920D77279786}"; public const string CSharpGuid = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"; - public string DotNetTfm => Harness.DotNetTfm; + public string DotNetTfm => Harness.DOTNET_TFM; public string LanguageGuid { get { return IsFSharp ? FSharpGuid : CSharpGuid; } }