diff --git a/.gitignore b/.gitignore index 6ee6057d5f..2b2c9c3d0d 100644 --- a/.gitignore +++ b/.gitignore @@ -195,3 +195,4 @@ Logs/ ModuleCache.noindex/ Build/Intermediates.noindex/ info.plist +build-intermediate diff --git a/.gitmodules b/.gitmodules index 2d2a9ac497..22c56307b0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github"] path = src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github url = https://github.com/AvaloniaUI/Portable.Xaml.git +[submodule "nukebuild/Numerge"] + path = nukebuild/Numerge + url = https://github.com/kekekeks/Numerge.git diff --git a/Directory.Build.props b/Directory.Build.props index 50476c81f1..1f26df9bbc 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,5 @@ - $(MSBuildThisFileDirectory)artifacts/nuget + $(MSBuildThisFileDirectory)build-intermediate/nuget diff --git a/build/ReferenceCoreLibraries.props b/build/ReferenceCoreLibraries.props index bd9d6ad843..cffc2e0324 100644 --- a/build/ReferenceCoreLibraries.props +++ b/build/ReferenceCoreLibraries.props @@ -1,5 +1,4 @@ - diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs index 1014aa1b47..61944c4dbc 100644 --- a/nukebuild/Build.cs +++ b/nukebuild/Build.cs @@ -63,6 +63,7 @@ partial class Build : NukeBuild DeleteDirectories(Parameters.BuildDirs); EnsureCleanDirectories(Parameters.BuildDirs); EnsureCleanDirectory(Parameters.ArtifactsDir); + EnsureCleanDirectory(Parameters.NugetIntermediateRoot); EnsureCleanDirectory(Parameters.NugetRoot); EnsureCleanDirectory(Parameters.ZipRoot); EnsureCleanDirectory(Parameters.TestResultsRoot); @@ -181,7 +182,7 @@ partial class Build : NukeBuild GlobFiles(data.ZipSourceControlCatalogDesktopDir, "*.exe"))); }); - Target CreateNugetPackages => _ => _ + Target CreateIntermediateNugetPackages => _ => _ .DependsOn(Compile) .After(RunTests) .Executes(() => @@ -200,6 +201,17 @@ partial class Build : NukeBuild c.SetConfiguration(Parameters.Configuration) .AddProperty("PackageVersion", Parameters.Version)); }); + + Target CreateNugetPackages => _ => _ + .DependsOn(CreateIntermediateNugetPackages) + .Executes(() => + { + var config = Numerge.MergeConfiguration.LoadFile(RootDirectory / "nukebuild" / "numerge.config"); + EnsureCleanDirectory(Parameters.NugetRoot); + if(!Numerge.NugetPackageMerger.Merge(Parameters.NugetIntermediateRoot, Parameters.NugetRoot, config, + new NumergeNukeLogger())) + throw new Exception("Package merge failed"); + }); Target RunTests => _ => _ .DependsOn(RunCoreLibsTests) diff --git a/nukebuild/BuildParameters.cs b/nukebuild/BuildParameters.cs index 9029aef60d..5f8ec7267e 100644 --- a/nukebuild/BuildParameters.cs +++ b/nukebuild/BuildParameters.cs @@ -47,6 +47,7 @@ public partial class Build public bool PublishTestResults { get; } public string Version { get; } public AbsolutePath ArtifactsDir { get; } + public AbsolutePath NugetIntermediateRoot { get; } public AbsolutePath NugetRoot { get; } public AbsolutePath ZipRoot { get; } public AbsolutePath BinRoot { get; } @@ -117,6 +118,7 @@ public partial class Build // DIRECTORIES ArtifactsDir = RootDirectory / "artifacts"; NugetRoot = ArtifactsDir / "nuget"; + NugetIntermediateRoot = RootDirectory / "build-intermediate" / "nuget"; ZipRoot = ArtifactsDir / "zip"; BinRoot = ArtifactsDir / "bin"; TestResultsRoot = ArtifactsDir / "test-results"; @@ -130,9 +132,9 @@ public partial class Build ZipTargetControlCatalogDesktopDir = ZipRoot / ("ControlCatalog.Desktop-" + FileZipSuffix); } - private static string GetVersion() + string GetVersion() { - var xdoc = XDocument.Load("./build/SharedVersion.props"); + var xdoc = XDocument.Load(RootDirectory / "build/SharedVersion.props"); return xdoc.Descendants().First(x => x.Name.LocalName == "Version").Value; } } diff --git a/nukebuild/Numerge b/nukebuild/Numerge new file mode 160000 index 0000000000..0d0537750d --- /dev/null +++ b/nukebuild/Numerge @@ -0,0 +1 @@ +Subproject commit 0d0537750d96eeb90e18f2a4999defb3593a50e5 diff --git a/nukebuild/Shims.cs b/nukebuild/Shims.cs index 1ba72494d7..461d617643 100644 --- a/nukebuild/Shims.cs +++ b/nukebuild/Shims.cs @@ -5,6 +5,7 @@ using System.IO.Compression; using System.Linq; using Nuke.Common; using Nuke.Common.IO; +using Numerge; public partial class Build { @@ -76,4 +77,17 @@ public partial class Build } } } + + class NumergeNukeLogger : INumergeLogger + { + public void Log(NumergeLogLevel level, string message) + { + if(level == NumergeLogLevel.Error) + Logger.Error(message); + else if (level == NumergeLogLevel.Warning) + Logger.Warn(message); + else + Logger.Info(message); + } + } } diff --git a/nukebuild/_build.csproj b/nukebuild/_build.csproj index ed94116a93..e02acff007 100644 --- a/nukebuild/_build.csproj +++ b/nukebuild/_build.csproj @@ -30,6 +30,8 @@ + + diff --git a/nukebuild/numerge.config b/nukebuild/numerge.config new file mode 100644 index 0000000000..4ad7dc51f0 --- /dev/null +++ b/nukebuild/numerge.config @@ -0,0 +1,22 @@ +{ + "Packages": + [ + { + "Id": "Avalonia", + "MergeAll": true, + "Exclude": ["Avalonia.Remote.Protocol"], + "Merge": [ + { + "Id": "Avalonia.Build.Tasks", + "IgnoreMissingFrameworkBinaries": true, + "DoNotMergeDependencies": true + }, + { + "Id": "Avalonia.DesktopRuntime", + "IgnoreMissingFrameworkBinaries": true, + "IgnoreMissingFrameworkDependencies": true + } + ] + } + ] +} diff --git a/packages/Avalonia/Avalonia.csproj b/packages/Avalonia/Avalonia.csproj index 3033064594..72625172d4 100644 --- a/packages/Avalonia/Avalonia.csproj +++ b/packages/Avalonia/Avalonia.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net461;netcoreapp2.0 @@ -40,10 +40,6 @@ true build\ - - true - tools\ - diff --git a/packages/Avalonia/Avalonia.props b/packages/Avalonia/Avalonia.props index 30e3f93b5c..6f21971d3d 100644 --- a/packages/Avalonia/Avalonia.props +++ b/packages/Avalonia/Avalonia.props @@ -2,7 +2,7 @@ $(MSBuildThisFileDirectory)\..\tools\netcoreapp2.0\designer\Avalonia.Designer.HostApp.dll $(MSBuildThisFileDirectory)\..\tools\net461\designer\Avalonia.Designer.HostApp.exe - $(MSBuildThisFileDirectory)\..\tools\Avalonia.Build.Tasks.dll + $(MSBuildThisFileDirectory)\..\tools\netstandard2.0\Avalonia.Build.Tasks.dll false diff --git a/src/Avalonia.Animation/Avalonia.Animation.csproj b/src/Avalonia.Animation/Avalonia.Animation.csproj index 3b6d1c1b33..73c619942e 100644 --- a/src/Avalonia.Animation/Avalonia.Animation.csproj +++ b/src/Avalonia.Animation/Avalonia.Animation.csproj @@ -1,7 +1,6 @@  netstandard2.0 - false diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj index abc4ed80d8..cbcf7a7386 100644 --- a/src/Avalonia.Base/Avalonia.Base.csproj +++ b/src/Avalonia.Base/Avalonia.Base.csproj @@ -4,7 +4,6 @@ Avalonia.Base Avalonia True - false diff --git a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj index 6b697a9028..ce767aaa87 100644 --- a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj +++ b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj @@ -4,7 +4,6 @@ netstandard2.0 tools $(DefineConstants);BUILDTASK - false diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj index fddd4403e9..32331d29ab 100644 --- a/src/Avalonia.Controls/Avalonia.Controls.csproj +++ b/src/Avalonia.Controls/Avalonia.Controls.csproj @@ -1,7 +1,6 @@  netstandard2.0 - false diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj index e732a7eef0..2c5aaf1a70 100644 --- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj +++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj @@ -1,7 +1,6 @@  netstandard2.0 - false