forked from reactiveui/ReactiveUI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.cake
126 lines (103 loc) · 5.19 KB
/
build.cake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// 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.AndroidX/ReactiveUI.AndroidX.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();