From 2eb71eba4234430265ebcdeefd82ef4774067d99 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Tue, 25 Aug 2020 18:07:21 +0200 Subject: [PATCH 1/3] [xharness] Enable the .NET tests when a file containing 'dotnet' is modified. This also required adding support for using regex as file names when selecting which tests to run. --- tests/xharness/Jenkins/TestSelector.cs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/tests/xharness/Jenkins/TestSelector.cs b/tests/xharness/Jenkins/TestSelector.cs index 075e6f9ffabb..6e81926b92c3 100644 --- a/tests/xharness/Jenkins/TestSelector.cs +++ b/tests/xharness/Jenkins/TestSelector.cs @@ -5,6 +5,7 @@ using System.Linq; using Microsoft.DotNet.XHarness.iOS.Shared.Execution; using System.Collections.Generic; +using System.Text.RegularExpressions; using Microsoft.DotNet.XHarness.iOS.Shared.Logging; @@ -80,7 +81,7 @@ class TestSelector { static readonly string [] dotnetPrefixes = { "dotnet", "msbuild", - "tests/dotnet", + ".*dotnet.*", }; #endregion @@ -101,13 +102,30 @@ void DisableKnownFailingDeviceTests () void SetEnabled (IEnumerable files, string [] prefixes, string testname, ref bool value) { MainLog.WriteLine ($"Checking if test {testname} should be enabled according to the modified files."); + + // Compute any regexes we might need out of the loop. + var regexes = new Regex [prefixes.Length]; + for (var i = 0; i < prefixes.Length; i++) { + // If the prefix contains a star, treat it is as a regex. + if (prefixes [i].IndexOf ('*') == -1) + continue; + + var regex = new Regex (prefixes [i]); + regexes [i] = regex; + } + foreach (var file in files) { MainLog.WriteLine ($"Checking for file {file}"); - foreach (var prefix in prefixes) { + for (var i = 0; i < prefixes.Length; i++) { + var prefix = prefixes [i]; if (file.StartsWith (prefix, StringComparison.Ordinal)) { value = true; MainLog.WriteLine ("Enabled '{0}' tests because the modified file '{1}' matches prefix '{2}'", testname, file, prefix); return; + } else if (regexes [i]?.IsMatch (file) == true) { + value = true; + MainLog.WriteLine ("Enabled '{0}' tests because the modified file '{1}' matches regex '{2}'", testname, file, prefix); + return; } } } From 61d584edccc927384232f4c87c9b58423e7699b6 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Thu, 27 Aug 2020 09:12:15 +0200 Subject: [PATCH 2/3] Remove redundant dotnet prefix. --- tests/xharness/Jenkins/TestSelector.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/xharness/Jenkins/TestSelector.cs b/tests/xharness/Jenkins/TestSelector.cs index 6e81926b92c3..30a67ca1bef5 100644 --- a/tests/xharness/Jenkins/TestSelector.cs +++ b/tests/xharness/Jenkins/TestSelector.cs @@ -79,7 +79,6 @@ class TestSelector { "Make.config", }; static readonly string [] dotnetPrefixes = { - "dotnet", "msbuild", ".*dotnet.*", }; From e02a2457766df86db917310152b083a47a12874f Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Thu, 27 Aug 2020 14:27:23 +0200 Subject: [PATCH 3/3] [xharness] Rename variables to match usage. --- tests/xharness/Jenkins/TestSelector.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/xharness/Jenkins/TestSelector.cs b/tests/xharness/Jenkins/TestSelector.cs index 30a67ca1bef5..5bfeec354985 100644 --- a/tests/xharness/Jenkins/TestSelector.cs +++ b/tests/xharness/Jenkins/TestSelector.cs @@ -78,7 +78,7 @@ class TestSelector { "src", "Make.config", }; - static readonly string [] dotnetPrefixes = { + static readonly string [] dotnetFilenames = { "msbuild", ".*dotnet.*", }; @@ -98,25 +98,26 @@ void DisableKnownFailingDeviceTests () jenkins.ForceExtensionBuildOnly = true; } - void SetEnabled (IEnumerable files, string [] prefixes, string testname, ref bool value) + // 'filenames' is a list of filename prefixes, unless the name has a star character, in which case it's interpreted as a regex expression. + void SetEnabled (IEnumerable files, string [] filenames, string testname, ref bool value) { MainLog.WriteLine ($"Checking if test {testname} should be enabled according to the modified files."); // Compute any regexes we might need out of the loop. - var regexes = new Regex [prefixes.Length]; - for (var i = 0; i < prefixes.Length; i++) { + var regexes = new Regex [filenames.Length]; + for (var i = 0; i < filenames.Length; i++) { // If the prefix contains a star, treat it is as a regex. - if (prefixes [i].IndexOf ('*') == -1) + if (filenames [i].IndexOf ('*') == -1) continue; - var regex = new Regex (prefixes [i]); + var regex = new Regex (filenames [i]); regexes [i] = regex; } foreach (var file in files) { MainLog.WriteLine ($"Checking for file {file}"); - for (var i = 0; i < prefixes.Length; i++) { - var prefix = prefixes [i]; + for (var i = 0; i < filenames.Length; i++) { + var prefix = filenames [i]; if (file.StartsWith (prefix, StringComparison.Ordinal)) { value = true; MainLog.WriteLine ("Enabled '{0}' tests because the modified file '{1}' matches prefix '{2}'", testname, file, prefix); @@ -174,7 +175,7 @@ void SelectTestsByModifiedFiles (int pullRequest) SetEnabled (files, macBindingProject, "mac-binding-project", ref jenkins.IncludeMacBindingProject); SetEnabled (files, xtroPrefixes, "xtro", ref jenkins.IncludeXtro); SetEnabled (files, cecilPrefixes, "cecil", ref jenkins.IncludeCecil); - SetEnabled (files, dotnetPrefixes, "dotnet", ref jenkins.IncludeDotNet); + SetEnabled (files, dotnetFilenames, "dotnet", ref jenkins.IncludeDotNet); } void SelectTestsByLabel (int pullRequest)