|
|
|
@ -34,20 +34,31 @@ using NuGet; |
|
|
|
// PARAMETERS |
|
|
|
////////////////////////////////////////////////////////////////////// |
|
|
|
|
|
|
|
Parameters parameters = new Parameters(Context); |
|
|
|
Packages packages = new Packages(Context, parameters); |
|
|
|
class AvaloniaBuildData |
|
|
|
{ |
|
|
|
public AvaloniaBuildData(Parameters parameters, Packages packages) |
|
|
|
{ |
|
|
|
Parameters = parameters; |
|
|
|
Packages = packages; |
|
|
|
} |
|
|
|
|
|
|
|
public Parameters Parameters { get; } |
|
|
|
public Packages Packages { get; } |
|
|
|
} |
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
// SETUP |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
|
|
|
|
Setup(context => |
|
|
|
Setup<AvaloniaBuildData>(context => |
|
|
|
{ |
|
|
|
Information("Building version {0} of Avalonia ({1}, {2}, {3}) using version {4} of Cake.", |
|
|
|
var parameters = new Parameters(context); |
|
|
|
var buildContext = new AvaloniaBuildData(parameters, new Packages(context, parameters)); |
|
|
|
|
|
|
|
Information("Building version {0} of Avalonia ({1}, {2}) using version {3} of Cake.", |
|
|
|
parameters.Version, |
|
|
|
parameters.Platform, |
|
|
|
parameters.Configuration, |
|
|
|
parameters.Target, |
|
|
|
typeof(ICakeContext).Assembly.GetName().Version.ToString()); |
|
|
|
|
|
|
|
if (parameters.IsRunningOnAppVeyor) |
|
|
|
@ -55,8 +66,7 @@ Setup(context => |
|
|
|
Information("Repository Name: " + BuildSystem.AppVeyor.Environment.Repository.Name); |
|
|
|
Information("Repository Branch: " + BuildSystem.AppVeyor.Environment.Repository.Branch); |
|
|
|
} |
|
|
|
|
|
|
|
Information("Target: " + parameters.Target); |
|
|
|
Information("Target:" + context.TargetTask.Name); |
|
|
|
Information("Platform: " + parameters.Platform); |
|
|
|
Information("Configuration: " + parameters.Configuration); |
|
|
|
Information("IsLocalBuild: " + parameters.IsLocalBuild); |
|
|
|
@ -70,13 +80,15 @@ Setup(context => |
|
|
|
Information("IsReleasable: " + parameters.IsReleasable); |
|
|
|
Information("IsMyGetRelease: " + parameters.IsMyGetRelease); |
|
|
|
Information("IsNuGetRelease: " + parameters.IsNuGetRelease); |
|
|
|
|
|
|
|
return buildContext; |
|
|
|
}); |
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
// TEARDOWN |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
|
|
|
|
Teardown(context => |
|
|
|
Teardown<AvaloniaBuildData>((context, buildContext) => |
|
|
|
{ |
|
|
|
Information("Finished running tasks."); |
|
|
|
}); |
|
|
|
@ -86,19 +98,19 @@ Teardown(context => |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
|
|
|
|
Task("Clean") |
|
|
|
.Does(() => |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
CleanDirectories(parameters.BuildDirs); |
|
|
|
CleanDirectory(parameters.ArtifactsDir); |
|
|
|
CleanDirectory(parameters.NugetRoot); |
|
|
|
CleanDirectory(parameters.ZipRoot); |
|
|
|
CleanDirectory(parameters.BinRoot); |
|
|
|
CleanDirectories(data.Parameters.BuildDirs); |
|
|
|
CleanDirectory(data.Parameters.ArtifactsDir); |
|
|
|
CleanDirectory(data.Parameters.NugetRoot); |
|
|
|
CleanDirectory(data.Parameters.ZipRoot); |
|
|
|
CleanDirectory(data.Parameters.BinRoot); |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Restore-NuGet-Packages") |
|
|
|
.IsDependentOn("Clean") |
|
|
|
.WithCriteria(parameters.IsRunningOnWindows) |
|
|
|
.Does(() => |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows) |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
var maxRetryCount = 5; |
|
|
|
var toolTimeout = 2d; |
|
|
|
@ -115,13 +127,13 @@ Task("Restore-NuGet-Packages") |
|
|
|
toolTimeout+=0.5; |
|
|
|
}}) |
|
|
|
.Execute(()=> { |
|
|
|
NuGetRestore(parameters.MSBuildSolution, new NuGetRestoreSettings { |
|
|
|
NuGetRestore(data.Parameters.MSBuildSolution, new NuGetRestoreSettings { |
|
|
|
ToolTimeout = TimeSpan.FromMinutes(toolTimeout) |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
void DotNetCoreBuild() |
|
|
|
void DotNetCoreBuild(Parameters parameters) |
|
|
|
{ |
|
|
|
var settings = new DotNetCoreBuildSettings |
|
|
|
{ |
|
|
|
@ -137,14 +149,14 @@ void DotNetCoreBuild() |
|
|
|
|
|
|
|
Task("Build") |
|
|
|
.IsDependentOn("Restore-NuGet-Packages") |
|
|
|
.Does(() => |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
if(parameters.IsRunningOnWindows) |
|
|
|
if(data.Parameters.IsRunningOnWindows) |
|
|
|
{ |
|
|
|
MSBuild(parameters.MSBuildSolution, settings => { |
|
|
|
settings.SetConfiguration(parameters.Configuration); |
|
|
|
MSBuild(data.Parameters.MSBuildSolution, settings => { |
|
|
|
settings.SetConfiguration(data.Parameters.Configuration); |
|
|
|
settings.SetVerbosity(Verbosity.Minimal); |
|
|
|
settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); |
|
|
|
settings.WithProperty("Platform", "\"" + data.Parameters.Platform + "\""); |
|
|
|
settings.WithProperty("UseRoslynPathHack", "true"); |
|
|
|
settings.UseToolVersion(MSBuildToolVersion.VS2017); |
|
|
|
settings.WithProperty("Windows", "True"); |
|
|
|
@ -154,7 +166,7 @@ Task("Build") |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
DotNetCoreBuild(); |
|
|
|
DotNetCoreBuild(data.Parameters); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
@ -185,66 +197,66 @@ Task("Run-Unit-Tests") |
|
|
|
.IsDependentOn("Build") |
|
|
|
.IsDependentOn("Run-Designer-Tests") |
|
|
|
.IsDependentOn("Run-Render-Tests") |
|
|
|
.WithCriteria(() => !parameters.SkipTests) |
|
|
|
.Does(() => { |
|
|
|
RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Controls.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Input.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Markup.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Styling.UnitTests", parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Visuals.UnitTests", parameters, false); |
|
|
|
if (parameters.IsRunningOnWindows) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests) |
|
|
|
.Does<AvaloniaBuildData>(data => { |
|
|
|
RunCoreTest("./tests/Avalonia.Base.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Controls.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Input.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Layout.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Markup.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Styling.UnitTests", data.Parameters, false); |
|
|
|
RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data.Parameters, false); |
|
|
|
if (data.Parameters.IsRunningOnWindows) |
|
|
|
{ |
|
|
|
RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", parameters, true); |
|
|
|
RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data.Parameters, true); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Run-Designer-Tests") |
|
|
|
.IsDependentOn("Build") |
|
|
|
.WithCriteria(() => !parameters.SkipTests) |
|
|
|
.Does(() => { |
|
|
|
RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", parameters, false); |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests) |
|
|
|
.Does<AvaloniaBuildData>(data => { |
|
|
|
RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data.Parameters, false); |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Run-Render-Tests") |
|
|
|
.IsDependentOn("Build") |
|
|
|
.WithCriteria(() => !parameters.SkipTests && parameters.IsRunningOnWindows) |
|
|
|
.Does(() => { |
|
|
|
RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", parameters, true); |
|
|
|
RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", parameters, true); |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests && data.Parameters.IsRunningOnWindows) |
|
|
|
.Does<AvaloniaBuildData>(data => { |
|
|
|
RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data.Parameters, true); |
|
|
|
RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data.Parameters, true); |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Copy-Files") |
|
|
|
.IsDependentOn("Run-Unit-Tests") |
|
|
|
.Does(() => |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
CopyFiles(packages.BinFiles, parameters.BinRoot); |
|
|
|
CopyFiles(data.Packages.BinFiles, data.Parameters.BinRoot); |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Zip-Files") |
|
|
|
.IsDependentOn("Copy-Files") |
|
|
|
.Does(() => |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
Zip(parameters.BinRoot, parameters.ZipCoreArtifacts); |
|
|
|
|
|
|
|
Zip(parameters.ZipSourceControlCatalogDesktopDirs, |
|
|
|
parameters.ZipTargetControlCatalogDesktopDirs, |
|
|
|
GetFiles(parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") + |
|
|
|
GetFiles(parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") + |
|
|
|
GetFiles(parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") + |
|
|
|
GetFiles(parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") + |
|
|
|
GetFiles(parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe")); |
|
|
|
Zip(data.Parameters.BinRoot, data.Parameters.ZipCoreArtifacts); |
|
|
|
|
|
|
|
Zip(data.Parameters.ZipSourceControlCatalogDesktopDirs, |
|
|
|
data.Parameters.ZipTargetControlCatalogDesktopDirs, |
|
|
|
GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") + |
|
|
|
GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") + |
|
|
|
GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") + |
|
|
|
GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") + |
|
|
|
GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe")); |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Create-NuGet-Packages") |
|
|
|
.IsDependentOn("Run-Unit-Tests") |
|
|
|
.IsDependentOn("Inspect") |
|
|
|
.Does(() => |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
foreach(var nuspec in packages.NuspecNuGetSettings) |
|
|
|
foreach(var nuspec in data.Packages.NuspecNuGetSettings) |
|
|
|
{ |
|
|
|
NuGetPack(nuspec); |
|
|
|
} |
|
|
|
@ -252,12 +264,12 @@ Task("Create-NuGet-Packages") |
|
|
|
|
|
|
|
Task("Publish-MyGet") |
|
|
|
.IsDependentOn("Create-NuGet-Packages") |
|
|
|
.WithCriteria(() => !parameters.IsLocalBuild) |
|
|
|
.WithCriteria(() => !parameters.IsPullRequest) |
|
|
|
.WithCriteria(() => parameters.IsMainRepo) |
|
|
|
.WithCriteria(() => parameters.IsMasterBranch) |
|
|
|
.WithCriteria(() => parameters.IsMyGetRelease) |
|
|
|
.Does(() => |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsLocalBuild) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPullRequest) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsMainRepo) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsMasterBranch) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsMyGetRelease) |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
var apiKey = EnvironmentVariable("MYGET_API_KEY"); |
|
|
|
if(string.IsNullOrEmpty(apiKey)) |
|
|
|
@ -271,7 +283,7 @@ Task("Publish-MyGet") |
|
|
|
throw new InvalidOperationException("Could not resolve MyGet API url."); |
|
|
|
} |
|
|
|
|
|
|
|
foreach(var nupkg in packages.NugetPackages) |
|
|
|
foreach(var nupkg in data.Packages.NugetPackages) |
|
|
|
{ |
|
|
|
NuGetPush(nupkg, new NuGetPushSettings { |
|
|
|
Source = apiUrl, |
|
|
|
@ -286,11 +298,11 @@ Task("Publish-MyGet") |
|
|
|
|
|
|
|
Task("Publish-NuGet") |
|
|
|
.IsDependentOn("Create-NuGet-Packages") |
|
|
|
.WithCriteria(() => !parameters.IsLocalBuild) |
|
|
|
.WithCriteria(() => !parameters.IsPullRequest) |
|
|
|
.WithCriteria(() => parameters.IsMainRepo) |
|
|
|
.WithCriteria(() => parameters.IsNuGetRelease) |
|
|
|
.Does(() => |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsLocalBuild) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPullRequest) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsMainRepo) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsNuGetRelease) |
|
|
|
.Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
var apiKey = EnvironmentVariable("NUGET_API_KEY"); |
|
|
|
if(string.IsNullOrEmpty(apiKey)) |
|
|
|
@ -304,7 +316,7 @@ Task("Publish-NuGet") |
|
|
|
throw new InvalidOperationException("Could not resolve NuGet API url."); |
|
|
|
} |
|
|
|
|
|
|
|
foreach(var nupkg in packages.NugetPackages) |
|
|
|
foreach(var nupkg in data.Packages.NugetPackages) |
|
|
|
{ |
|
|
|
NuGetPush(nupkg, new NuGetPushSettings { |
|
|
|
ApiKey = apiKey, |
|
|
|
@ -318,7 +330,7 @@ Task("Publish-NuGet") |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Run-Leak-Tests") |
|
|
|
.WithCriteria(parameters.IsRunningOnWindows) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows) |
|
|
|
.IsDependentOn("Build") |
|
|
|
.Does(() => |
|
|
|
{ |
|
|
|
@ -358,7 +370,7 @@ Task("Run-Leak-Tests") |
|
|
|
}); |
|
|
|
|
|
|
|
Task("Inspect") |
|
|
|
.WithCriteria(parameters.IsRunningOnWindows) |
|
|
|
.WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows) |
|
|
|
.IsDependentOn("Restore-NuGet-Packages") |
|
|
|
.Does(() => |
|
|
|
{ |
|
|
|
@ -396,9 +408,9 @@ Task("Inspect") |
|
|
|
Task("Package") |
|
|
|
.IsDependentOn("Create-NuGet-Packages"); |
|
|
|
|
|
|
|
Task("Default").Does(() => |
|
|
|
Task("Default").Does<AvaloniaBuildData>(data => |
|
|
|
{ |
|
|
|
if(parameters.IsRunningOnWindows) |
|
|
|
if(data.Parameters.IsRunningOnWindows) |
|
|
|
RunTarget("Package"); |
|
|
|
else |
|
|
|
RunTarget("Run-Unit-Tests"); |
|
|
|
@ -415,4 +427,4 @@ Task("Travis") |
|
|
|
// EXECUTE |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
|
|
|
|
RunTarget(parameters.Target); |
|
|
|
RunTarget(Context.Argument("target", "Default")); |
|
|
|
|