-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.cake
129 lines (111 loc) · 4.06 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
127
128
129
#tool "nuget:?package=ReportGenerator&version=4.3.3"
#tool "nuget:?package=GitVersion.CommandLine&version=5.1.1"
#addin "nuget:?package=Cake.Coverlet&version=2.3.4"
#load "build/BuildData.cake"
var target = Argument("target", "Build");
var configuration = Argument("configuration", "Release");
// SETUP
Setup<BuildData>((context) => {
return new BuildData(context);
});
// TASKS
Task("Clean")
.Does<BuildData>((data) => {
data.CoverageData.DeleteDirectories();
data.SolutionData.DeleteBuildDirectories();
data.TestData.DeleteDirectories();
data.PackageData.DeleteDirectories();
});
Task("Restore")
.IsDependentOn("Clean")
.IsDependentOn("GitHub:Output:Version")
.IsDependentOn("DotNet:Telemetry:Optout")
.Does<BuildData>((data) =>{
var settings = new DotNetCoreRestoreSettings {
WorkingDirectory = data.SolutionData.SolutionPath.GetDirectory()
};
DotNetCoreRestore(settings);
} );
Task("Build")
.IsDependentOn("Restore")
.Does<BuildData>((data) => {
DotNetCoreBuild(
data.SolutionData.SolutionPath.ToString(),
new DotNetCoreBuildSettings
{
Configuration = data.Configuration,
ArgumentCustomization =
args => args.Append($"/p:Version={data.VersionData.Version.NuGetVersionV2}")
});
});
Task("Test")
.IsDependentOn("Build")
.Does<BuildData>((data) => {
data.CoverageData.CreateDirectories();
var testSettings = new DotNetCoreTestSettings {
NoBuild = true,
Configuration = data.Configuration,
ResultsDirectory = data.TestData.TestResultsDirectory,
ArgumentCustomization = args => args
.Append($"/p:Exclude=\"{data.CoverageData.ExcludeFromCoverage}\"")
.Append($"--logger trx")
};
var coverletSettings = new CoverletSettings {
CollectCoverage = true,
CoverletOutputDirectory = data.CoverageData.CoverageDirectory,
CoverletOutputFormat = CoverletOutputFormat.opencover,
};
foreach(var project in data.SolutionData.GetTestProjects())
{
coverletSettings.CoverletOutputName = $"{project.Name}.opencover.xml";
DotNetCoreTest(project.Path.FullPath, testSettings, coverletSettings);
}
});
Task("Test:Coverage")
.IsDependentOn("Test")
.Does<BuildData>((data) => {
var reportSettings = new ReportGeneratorSettings {
ArgumentCustomization = args => args.Append($"-reportTypes:{data.CoverageData.ReportTypes}")
};
var reports = data.CoverageData.GetReportFiles();
ReportGenerator(reports, data.CoverageData.ReportsDirectory, reportSettings);
});
Task("NuGet:Package")
.IsDependentOn("Build")
.Does<BuildData>((data) => {
data.PackageData.CreateDirectories();
var packSettings = new DotNetCorePackSettings
{
Configuration = data.Configuration,
OutputDirectory = data.PackageData.PackagesDirectory,
NoBuild = true,
IncludeSymbols = true,
ArgumentCustomization =
args => args.Append($"/p:Version={data.VersionData.Version.NuGetVersionV2} /p:SymbolPackageFormat=snupkg")
};
foreach(var project in data.SolutionData.GetAppProjects())
{
Information("Packaging: {0}...", project.Name);
DotNetCorePack(project.Path.ToString(), packSettings);
}
});
Task("NuGet:Publish")
.IsDependentOn("NuGet:Package")
.Does<BuildData>((data) => {
var settings = new NuGetPushSettings {
ApiKey = data.PackageData.ApiKey,
Source = "https://api.nuget.org/v3/index.json",
SkipDuplicate = true
};
var packageFiles = data.PackageData.GetPackageFiles();
NuGetPush(packageFiles, settings);
});
Task("GitHub:Output:Version")
.Does<BuildData>(data => {
Information("::set-output name={0}::{1}", "version", data.VersionData.Version.MajorMinorPatch);
});
Task("DotNet:Telemetry:Optout")
.Does<BuildData>((data) => {
data.SetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "true");
});
RunTarget(target);