|
@@ -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;
|
|
@@ -26,11 +27,13 @@ using static Nuke.Common.Tools.VSWhere.VSWhereTasks;
|
|
|
running and debugging a particular target (optionally without deps) would be way easier
|
|
running and debugging a particular target (optionally without deps) would be way easier
|
|
|
ReSharper/Rider - https://plugins.jetbrains.com/plugin/10803-nuke-support
|
|
ReSharper/Rider - https://plugins.jetbrains.com/plugin/10803-nuke-support
|
|
|
VSCode - https://marketplace.visualstudio.com/items?itemName=nuke.support
|
|
VSCode - https://marketplace.visualstudio.com/items?itemName=nuke.support
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
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))
|
|
@@ -54,7 +57,7 @@ partial class Build : NukeBuild
|
|
|
protected override void OnBuildInitialized()
|
|
protected override void OnBuildInitialized()
|
|
|
{
|
|
{
|
|
|
Parameters = new BuildParameters(this);
|
|
Parameters = new BuildParameters(this);
|
|
|
- Information("Building version {0} of Avalonia ({1}) using version {2} of Nuke.",
|
|
|
|
|
|
|
+ Information("Building version {0} of Avalonia ({1}) using version {2} of Nuke.",
|
|
|
Parameters.Version,
|
|
Parameters.Version,
|
|
|
Parameters.Configuration,
|
|
Parameters.Configuration,
|
|
|
typeof(NukeBuild).Assembly.GetName().Version.ToString());
|
|
typeof(NukeBuild).Assembly.GetName().Version.ToString());
|
|
@@ -93,29 +96,24 @@ partial class Build : NukeBuild
|
|
|
string projectFile,
|
|
string projectFile,
|
|
|
Configure<MSBuildSettings> configurator = null)
|
|
Configure<MSBuildSettings> configurator = null)
|
|
|
{
|
|
{
|
|
|
- return MSBuild(projectFile, c =>
|
|
|
|
|
- {
|
|
|
|
|
|
|
+ return MSBuild(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)
|
|
|
|
|
- {
|
|
|
|
|
- var javaSdk = Environment.GetEnvironmentVariable("JAVA_HOME_8_X64");
|
|
|
|
|
- if (javaSdk != null)
|
|
|
|
|
- c = c.AddProperty("JavaSdkDirectory", javaSdk);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- c = c.AddProperty("PackageVersion", Parameters.Version)
|
|
|
|
|
- .AddProperty("iOSRoslynPathHackRequired", "true")
|
|
|
|
|
- .SetToolPath(MsBuildExe.Value)
|
|
|
|
|
- .SetConfiguration(Parameters.Configuration)
|
|
|
|
|
- .SetVerbosity(MSBuildVerbosity.Minimal);
|
|
|
|
|
- c = configurator?.Invoke(c) ?? c;
|
|
|
|
|
- return c;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ .When(Parameters.IsRunningOnWindows &&
|
|
|
|
|
+ Parameters.IsRunningOnAzure, c => c
|
|
|
|
|
+ .AddProperty("JavaSdkDirectory", GetVariable<string>("JAVA_HOME_8_X64")))
|
|
|
|
|
+ .AddProperty("PackageVersion", Parameters.Version)
|
|
|
|
|
+ .AddProperty("iOSRoslynPathHackRequired", true)
|
|
|
|
|
+ .SetToolPath(MsBuildExe.Value)
|
|
|
|
|
+ .SetConfiguration(Parameters.Configuration)
|
|
|
|
|
+ .SetVerbosity(MSBuildVerbosity.Minimal)
|
|
|
|
|
+ .Apply(configurator));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
Target Clean => _ => _.Executes(() =>
|
|
Target Clean => _ => _.Executes(() =>
|
|
|
{
|
|
{
|
|
|
- DeleteDirectories(Parameters.BuildDirs);
|
|
|
|
|
- EnsureCleanDirectories(Parameters.BuildDirs);
|
|
|
|
|
|
|
+ Parameters.BuildDirs.ForEach(DeleteDirectory);
|
|
|
|
|
+ Parameters.BuildDirs.ForEach(EnsureCleanDirectory);
|
|
|
EnsureCleanDirectory(Parameters.ArtifactsDir);
|
|
EnsureCleanDirectory(Parameters.ArtifactsDir);
|
|
|
EnsureCleanDirectory(Parameters.NugetIntermediateRoot);
|
|
EnsureCleanDirectory(Parameters.NugetIntermediateRoot);
|
|
|
EnsureCleanDirectory(Parameters.NugetRoot);
|
|
EnsureCleanDirectory(Parameters.NugetRoot);
|
|
@@ -134,97 +132,84 @@ partial class Build : NukeBuild
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
else
|
|
else
|
|
|
- DotNetBuild(Parameters.MSBuildSolution, c => c
|
|
|
|
|
|
|
+ DotNetBuild(c => c
|
|
|
|
|
+ .SetProjectFile(Parameters.MSBuildSolution)
|
|
|
.AddProperty("PackageVersion", Parameters.Version)
|
|
.AddProperty("PackageVersion", Parameters.Version)
|
|
|
.SetConfiguration(Parameters.Configuration)
|
|
.SetConfiguration(Parameters.Configuration)
|
|
|
);
|
|
);
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- void RunCoreTest(string project)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ void RunCoreTest(string projectName)
|
|
|
{
|
|
{
|
|
|
- if(!project.EndsWith(".csproj"))
|
|
|
|
|
- project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj");
|
|
|
|
|
- Information("Running tests from " + project);
|
|
|
|
|
- XDocument xdoc;
|
|
|
|
|
- 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)
|
|
|
|
|
|
|
+ Information($"Running tests from {projectName}");
|
|
|
|
|
+ var project = Solution.GetProject(projectName).NotNull("project != null");
|
|
|
|
|
+
|
|
|
|
|
+ foreach (var fw in project.GetTargetFrameworks())
|
|
|
{
|
|
{
|
|
|
if (fw.StartsWith("net4")
|
|
if (fw.StartsWith("net4")
|
|
|
- && RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
|
|
|
|
|
|
|
+ && RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
|
|
|
&& Environment.GetEnvironmentVariable("FORCE_LINUX_TESTS") != "1")
|
|
&& Environment.GetEnvironmentVariable("FORCE_LINUX_TESTS") != "1")
|
|
|
{
|
|
{
|
|
|
- Information($"Skipping {fw} tests on Linux - https://github.com/mono/mono/issues/13969");
|
|
|
|
|
|
|
+ Information($"Skipping {projectName} ({fw}) tests on Linux - https://github.com/mono/mono/issues/13969");
|
|
|
continue;
|
|
continue;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- Information("Running for " + fw);
|
|
|
|
|
- DotNetTest(c =>
|
|
|
|
|
- {
|
|
|
|
|
- c = c
|
|
|
|
|
- .SetProjectFile(project)
|
|
|
|
|
- .SetConfiguration(Parameters.Configuration)
|
|
|
|
|
- .SetFramework(fw)
|
|
|
|
|
- .EnableNoBuild()
|
|
|
|
|
- .EnableNoRestore();
|
|
|
|
|
- // NOTE: I can see that we could maybe add another extension method "Switch" or "If" to make this more convenient
|
|
|
|
|
- if (Parameters.PublishTestResults)
|
|
|
|
|
- c = c.SetLogger("trx").SetResultsDirectory(Parameters.TestResultsRoot);
|
|
|
|
|
- return c;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ Information($"Running for {projectName} ({fw}) ...");
|
|
|
|
|
+
|
|
|
|
|
+ DotNetTest(c => c
|
|
|
|
|
+ .SetProjectFile(project)
|
|
|
|
|
+ .SetConfiguration(Parameters.Configuration)
|
|
|
|
|
+ .SetFramework(fw)
|
|
|
|
|
+ .EnableNoBuild()
|
|
|
|
|
+ .EnableNoRestore()
|
|
|
|
|
+ .When(Parameters.PublishTestResults, c => c
|
|
|
|
|
+ .SetLogger("trx")
|
|
|
|
|
+ .SetResultsDirectory(Parameters.TestResultsRoot)));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
Target RunCoreLibsTests => _ => _
|
|
Target RunCoreLibsTests => _ => _
|
|
|
- .OnlyWhen(() => !Parameters.SkipTests)
|
|
|
|
|
|
|
+ .OnlyWhenStatic(() => !Parameters.SkipTests)
|
|
|
.DependsOn(Compile)
|
|
.DependsOn(Compile)
|
|
|
.Executes(() =>
|
|
.Executes(() =>
|
|
|
{
|
|
{
|
|
|
- RunCoreTest("./tests/Avalonia.Animation.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Base.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Controls.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Controls.DataGrid.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Input.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Interactivity.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Layout.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Markup.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Styling.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Visuals.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.Skia.UnitTests");
|
|
|
|
|
- RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests");
|
|
|
|
|
|
|
+ RunCoreTest("Avalonia.Animation.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Base.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Controls.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Controls.DataGrid.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Input.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Interactivity.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Layout.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Markup.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Markup.Xaml.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Styling.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Visuals.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.Skia.UnitTests");
|
|
|
|
|
+ RunCoreTest("Avalonia.ReactiveUI.UnitTests");
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
Target RunRenderTests => _ => _
|
|
Target RunRenderTests => _ => _
|
|
|
- .OnlyWhen(() => !Parameters.SkipTests)
|
|
|
|
|
|
|
+ .OnlyWhenStatic(() => !Parameters.SkipTests)
|
|
|
.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 => _ => _
|
|
|
- .OnlyWhen(() => !Parameters.SkipTests && Parameters.IsRunningOnWindows)
|
|
|
|
|
|
|
+ .OnlyWhenStatic(() => !Parameters.SkipTests && Parameters.IsRunningOnWindows)
|
|
|
.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;
|
|
|
|
|
|
|
|
Target RunLeakTests => _ => _
|
|
Target RunLeakTests => _ => _
|
|
|
- .OnlyWhen(() => !Parameters.SkipTests && Parameters.IsRunningOnWindows)
|
|
|
|
|
|
|
+ .OnlyWhenStatic(() => !Parameters.SkipTests && Parameters.IsRunningOnWindows)
|
|
|
.DependsOn(Compile)
|
|
.DependsOn(Compile)
|
|
|
.Executes(() =>
|
|
.Executes(() =>
|
|
|
{
|
|
{
|
|
@@ -235,7 +220,7 @@ partial class Build : NukeBuild
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
Target ZipFiles => _ => _
|
|
Target ZipFiles => _ => _
|
|
|
- .After(CreateNugetPackages, Compile, RunCoreLibsTests, Package)
|
|
|
|
|
|
|
+ .After(CreateNugetPackages, Compile, RunCoreLibsTests, Package)
|
|
|
.Executes(() =>
|
|
.Executes(() =>
|
|
|
{
|
|
{
|
|
|
var data = Parameters;
|
|
var data = Parameters;
|
|
@@ -259,9 +244,10 @@ partial class Build : NukeBuild
|
|
|
MsBuildCommon(Parameters.MSBuildSolution, c => c
|
|
MsBuildCommon(Parameters.MSBuildSolution, c => c
|
|
|
.AddTargets("Pack"));
|
|
.AddTargets("Pack"));
|
|
|
else
|
|
else
|
|
|
- DotNetPack(Parameters.MSBuildSolution, c =>
|
|
|
|
|
- c.SetConfiguration(Parameters.Configuration)
|
|
|
|
|
- .AddProperty("PackageVersion", Parameters.Version));
|
|
|
|
|
|
|
+ DotNetPack(c => c
|
|
|
|
|
+ .SetProject(Parameters.MSBuildSolution)
|
|
|
|
|
+ .SetConfiguration(Parameters.Configuration)
|
|
|
|
|
+ .AddProperty("PackageVersion", Parameters.Version));
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
Target CreateNugetPackages => _ => _
|
|
Target CreateNugetPackages => _ => _
|
|
@@ -274,32 +260,40 @@ partial class Build : NukeBuild
|
|
|
new NumergeNukeLogger()))
|
|
new NumergeNukeLogger()))
|
|
|
throw new Exception("Package merge failed");
|
|
throw new Exception("Package merge failed");
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Target RunTests => _ => _
|
|
Target RunTests => _ => _
|
|
|
.DependsOn(RunCoreLibsTests)
|
|
.DependsOn(RunCoreLibsTests)
|
|
|
.DependsOn(RunRenderTests)
|
|
.DependsOn(RunRenderTests)
|
|
|
.DependsOn(RunDesignerTests)
|
|
.DependsOn(RunDesignerTests)
|
|
|
.DependsOn(RunLeakTests);
|
|
.DependsOn(RunLeakTests);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Target Package => _ => _
|
|
Target Package => _ => _
|
|
|
.DependsOn(RunTests)
|
|
.DependsOn(RunTests)
|
|
|
.DependsOn(CreateNugetPackages);
|
|
.DependsOn(CreateNugetPackages);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Target CiAzureLinux => _ => _
|
|
Target CiAzureLinux => _ => _
|
|
|
.DependsOn(RunTests);
|
|
.DependsOn(RunTests);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Target CiAzureOSX => _ => _
|
|
Target CiAzureOSX => _ => _
|
|
|
.DependsOn(Package)
|
|
.DependsOn(Package)
|
|
|
.DependsOn(ZipFiles);
|
|
.DependsOn(ZipFiles);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Target CiAzureWindows => _ => _
|
|
Target CiAzureWindows => _ => _
|
|
|
.DependsOn(Package)
|
|
.DependsOn(Package)
|
|
|
.DependsOn(ZipFiles);
|
|
.DependsOn(ZipFiles);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
public static int Main() =>
|
|
public static int Main() =>
|
|
|
RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
|
|
RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
|
|
|
? Execute<Build>(x => x.Package)
|
|
? Execute<Build>(x => x.Package)
|
|
|
: 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;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|