126 строки
5.1 KiB
C#
126 строки
5.1 KiB
C#
// Licensed to the .NET Foundation under one or more agreements.
|
|
// The .NET Foundation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
#load nuget:https://pkgs.dev.azure.com/dotnet/ReactiveUI/_packaging/ReactiveUI/nuget/v3/index.json?package=ReactiveUI.Cake.Recipe&prerelease
|
|
|
|
const string project = "ReactiveUI";
|
|
|
|
private const string PharmacistTool = "#tool dotnet:?package=Pharmacist&prerelease";
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// PROJECTS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
// Whitelisted Packages
|
|
var packageWhitelist = new List<FilePath>
|
|
{
|
|
MakeAbsolute(File("./src/ReactiveUI/ReactiveUI.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Testing/ReactiveUI.Testing.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Events/ReactiveUI.Events.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Events.XamEssentials/ReactiveUI.Events.XamEssentials.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Events.XamForms/ReactiveUI.Events.XamForms.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Fody/ReactiveUI.Fody.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.AndroidSupport/ReactiveUI.AndroidSupport.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.XamForms/ReactiveUI.XamForms.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Uno/ReactiveUI.Uno.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Blazor/ReactiveUI.Blazor.csproj")),
|
|
};
|
|
|
|
if (IsRunningOnWindows())
|
|
{
|
|
packageWhitelist.AddRange(new []
|
|
{
|
|
MakeAbsolute(File("./src/ReactiveUI.Blend/ReactiveUI.Blend.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.WPF/ReactiveUI.WPF.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Winforms/ReactiveUI.Winforms.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Events.WPF/ReactiveUI.Events.WPF.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Events.Winforms/ReactiveUI.Events.Winforms.csproj")),
|
|
// TODO: seems the leak tests never worked as part of the CI, fix. For the moment just make sure it compiles.
|
|
MakeAbsolute(File("./src/ReactiveUI.LeakTests/ReactiveUI.LeakTests.csproj"))
|
|
});
|
|
}
|
|
|
|
var packageTestWhitelist = new List<FilePath>
|
|
{
|
|
MakeAbsolute(File("./src/ReactiveUI.Tests/ReactiveUI.Tests.csproj")),
|
|
MakeAbsolute(File("./src/ReactiveUI.Splat.Tests/ReactiveUI.Splat.Tests.csproj"))
|
|
};
|
|
|
|
if (IsRunningOnWindows())
|
|
{
|
|
packageTestWhitelist.AddRange(new[]
|
|
{
|
|
MakeAbsolute(File("./src/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj"))
|
|
});
|
|
}
|
|
|
|
var eventGenerators = new List<(string[] targetNames, DirectoryPath destination)>
|
|
{
|
|
(new[] { "android", "ios", "mac", "tvos" }, MakeAbsolute(Directory("src/ReactiveUI.Events/"))),
|
|
(new[] { "wpf" }, MakeAbsolute(Directory("src/ReactiveUI.Events.WPF/"))),
|
|
(new[] { "winforms" }, MakeAbsolute(Directory("src/ReactiveUI.Events.Winforms/"))),
|
|
};
|
|
|
|
if (IsRunningOnWindows())
|
|
{
|
|
eventGenerators.AddRange(new []
|
|
{
|
|
(new[] { "uwp" }, MakeAbsolute(Directory("src/ReactiveUI.Events/"))),
|
|
});
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// SETUP
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Environment.SetVariableNames();
|
|
|
|
BuildParameters.SetParameters(context: Context,
|
|
buildSystem: BuildSystem,
|
|
title: project,
|
|
whitelistPackages: packageWhitelist,
|
|
whitelistTestPackages: packageTestWhitelist,
|
|
artifactsDirectory: "./artifacts",
|
|
sourceDirectory: "./src");
|
|
|
|
ToolSettings.SetToolSettings(context: Context);
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// TASKS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Task("GenerateEvents")
|
|
.Does(() => RequireGlobalTool(PharmacistTool, () =>
|
|
{
|
|
var eventsArtifactDirectory = BuildParameters.ArtifactsDirectory.Combine("Events");
|
|
EnsureDirectoryExists(eventsArtifactDirectory);
|
|
|
|
foreach (var eventGenerator in eventGenerators)
|
|
{
|
|
var (platforms, directory) = eventGenerator;
|
|
|
|
Information("Generating events for '{0}'", string.Join(", ", platforms));
|
|
StartProcess(Context.Tools.Resolve("Pharmacist*").ToString(), new ProcessSettings {
|
|
Arguments = new ProcessArgumentBuilder()
|
|
.Append("generate-platform")
|
|
.AppendSwitch("-p", string.Join(",", platforms))
|
|
.AppendSwitch("-o", directory.ToString())
|
|
.AppendSwitch("--output-prefix", "Events_")
|
|
});
|
|
|
|
Information("The events have been written to '{0}'", directory);
|
|
}
|
|
|
|
CopyFiles(GetFiles("./src/ReactiveUI.**/Events_*.cs"), eventsArtifactDirectory);
|
|
}));
|
|
|
|
BuildParameters.Tasks.BuildTask.IsDependentOn("GenerateEvents");
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// EXECUTION
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Build.Run();
|