Browse Source

Minor cleanups

pull/3596/head
Matthias Koch 7 years ago
parent
commit
367548c1be
  1. 118
      nukebuild/Build.cs

118
nukebuild/Build.cs

@ -13,6 +13,7 @@ using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet; using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.MSBuild; using Nuke.Common.Tools.MSBuild;
using Nuke.Common.Utilities; using Nuke.Common.Utilities;
using Nuke.Common.Utilities.Collections;
using static Nuke.Common.EnvironmentInfo; using static Nuke.Common.EnvironmentInfo;
using static Nuke.Common.IO.FileSystemTasks; using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.IO.PathConstruction; using static Nuke.Common.IO.PathConstruction;
@ -31,6 +32,8 @@ using static Nuke.Common.Tools.VSWhere.VSWhereTasks;
partial class Build : NukeBuild partial class Build : NukeBuild
{ {
[Solution("Avalonia.sln")] readonly Solution Solution;
static Lazy<string> MsBuildExe = new Lazy<string>(() => static Lazy<string> MsBuildExe = new Lazy<string>(() =>
{ {
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
@ -93,27 +96,20 @@ partial class Build : NukeBuild
string projectFile, string projectFile,
Configure<MSBuildSettings> configurator = null) Configure<MSBuildSettings> configurator = null)
{ {
return MSBuild(c => return MSBuild(c => c
{ .SetProjectFile(projectFile)
c = c.SetProjectFile(projectFile);
// This is required for VS2019 image on Azure Pipelines // This is required for VS2019 image on Azure Pipelines
if (Parameters.IsRunningOnWindows && Parameters.IsRunningOnAzure) .When(Parameters.IsRunningOnWindows &&
{ Parameters.IsRunningOnAzure, c => c
var javaSdk = Environment.GetEnvironmentVariable("JAVA_HOME_8_X64"); .AddProperty("JavaSdkDirectory", GetVariable<string>("JAVA_HOME_8_X64")))
if (javaSdk != null) .AddProperty("PackageVersion", Parameters.Version)
c = c.AddProperty("JavaSdkDirectory", javaSdk); .AddProperty("iOSRoslynPathHackRequired", true)
} .SetToolPath(MsBuildExe.Value)
.SetConfiguration(Parameters.Configuration)
c = c.AddProperty("PackageVersion", Parameters.Version) .SetVerbosity(MSBuildVerbosity.Minimal)
.AddProperty("iOSRoslynPathHackRequired", "true") .Apply(configurator));
.SetToolPath(MsBuildExe.Value)
.SetConfiguration(Parameters.Configuration)
.SetVerbosity(MSBuildVerbosity.Minimal);
c = configurator?.Invoke(c) ?? c;
return c;
});
} }
Target Clean => _ => _.Executes(() => Target Clean => _ => _.Executes(() =>
{ {
Parameters.BuildDirs.ForEach(DeleteDirectory); Parameters.BuildDirs.ForEach(DeleteDirectory);
@ -143,23 +139,12 @@ partial class Build : NukeBuild
); );
}); });
void RunCoreTest(string project) void RunCoreTest(string projectName)
{ {
if(!project.EndsWith(".csproj")) Information($"Running tests from {projectName}");
project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj"); var project = Solution.GetProject(projectName).NotNull("project != null");
Information("Running tests from " + project);
XDocument xdoc; foreach (var fw in project.GetTargetFrameworks())
using (var s = File.OpenRead(project))
xdoc = XDocument.Load(s);
List<string> frameworks = null;
var targets = xdoc.Root.Descendants("TargetFrameworks").FirstOrDefault();
if (targets != null)
frameworks = targets.Value.Split(';').Where(f => !string.IsNullOrWhiteSpace(f)).ToList();
else
frameworks = new List<string> {xdoc.Root.Descendants("TargetFramework").First().Value};
foreach(var fw in frameworks)
{ {
if (fw.StartsWith("net4") if (fw.StartsWith("net4")
&& RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
@ -170,19 +155,16 @@ partial class Build : NukeBuild
} }
Information("Running for " + fw); Information("Running for " + fw);
DotNetTest(c =>
{ DotNetTest(c => c
c = c .SetProjectFile(project)
.SetProjectFile(project) .SetConfiguration(Parameters.Configuration)
.SetConfiguration(Parameters.Configuration) .SetFramework(fw)
.SetFramework(fw) .EnableNoBuild()
.EnableNoBuild() .EnableNoRestore()
.EnableNoRestore(); .When(Parameters.PublishTestResults, c => c
// NOTE: I can see that we could maybe add another extension method "Switch" or "If" to make this more convenient .SetLogger("trx")
if (Parameters.PublishTestResults) .SetResultsDirectory(Parameters.TestResultsRoot)));
c = c.SetLogger("trx").SetResultsDirectory(Parameters.TestResultsRoot);
return c;
});
} }
} }
@ -191,19 +173,19 @@ partial class Build : NukeBuild
.DependsOn(Compile) .DependsOn(Compile)
.Executes(() => .Executes(() =>
{ {
RunCoreTest("./tests/Avalonia.Animation.UnitTests"); RunCoreTest("Avalonia.Animation.UnitTests");
RunCoreTest("./tests/Avalonia.Base.UnitTests"); RunCoreTest("Avalonia.Base.UnitTests");
RunCoreTest("./tests/Avalonia.Controls.UnitTests"); RunCoreTest("Avalonia.Controls.UnitTests");
RunCoreTest("./tests/Avalonia.Controls.DataGrid.UnitTests"); RunCoreTest("Avalonia.Controls.DataGrid.UnitTests");
RunCoreTest("./tests/Avalonia.Input.UnitTests"); RunCoreTest("Avalonia.Input.UnitTests");
RunCoreTest("./tests/Avalonia.Interactivity.UnitTests"); RunCoreTest("Avalonia.Interactivity.UnitTests");
RunCoreTest("./tests/Avalonia.Layout.UnitTests"); RunCoreTest("Avalonia.Layout.UnitTests");
RunCoreTest("./tests/Avalonia.Markup.UnitTests"); RunCoreTest("Avalonia.Markup.UnitTests");
RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests"); RunCoreTest("Avalonia.Markup.Xaml.UnitTests");
RunCoreTest("./tests/Avalonia.Styling.UnitTests"); RunCoreTest("Avalonia.Styling.UnitTests");
RunCoreTest("./tests/Avalonia.Visuals.UnitTests"); RunCoreTest("Avalonia.Visuals.UnitTests");
RunCoreTest("./tests/Avalonia.Skia.UnitTests"); RunCoreTest("Avalonia.Skia.UnitTests");
RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests"); RunCoreTest("Avalonia.ReactiveUI.UnitTests");
}); });
Target RunRenderTests => _ => _ Target RunRenderTests => _ => _
@ -211,9 +193,9 @@ partial class Build : NukeBuild
.DependsOn(Compile) .DependsOn(Compile)
.Executes(() => .Executes(() =>
{ {
RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj"); RunCoreTest("Avalonia.Skia.RenderTests");
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj"); RunCoreTest("Avalonia.Direct2D1.RenderTests");
}); });
Target RunDesignerTests => _ => _ Target RunDesignerTests => _ => _
@ -221,7 +203,7 @@ partial class Build : NukeBuild
.DependsOn(Compile) .DependsOn(Compile)
.Executes(() => .Executes(() =>
{ {
RunCoreTest("./tests/Avalonia.DesignerSupport.Tests"); RunCoreTest("Avalonia.DesignerSupport.Tests");
}); });
[PackageExecutable("JetBrains.dotMemoryUnit", "dotMemoryUnit.exe")] readonly Tool DotMemoryUnit; [PackageExecutable("JetBrains.dotMemoryUnit", "dotMemoryUnit.exe")] readonly Tool DotMemoryUnit;
@ -307,3 +289,11 @@ partial class Build : NukeBuild
: Execute<Build>(x => x.RunTests); : Execute<Build>(x => x.RunTests);
} }
public static class ToolSettingsExtensions
{
public static T Apply<T>(this T settings, Configure<T> configurator)
{
return configurator != null ? configurator(settings) : settings;
}
}

Loading…
Cancel
Save