-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathKnownExtensions.cake
More file actions
138 lines (115 loc) · 6.07 KB
/
KnownExtensions.cake
File metadata and controls
138 lines (115 loc) · 6.07 KB
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
130
131
132
133
134
135
136
137
using System.Reflection;
// Static class holding information about known extensions.
public static class KnownExtensions
{
// Static Variables representing well-known Extensions with the latest tested version
public static ExtensionSpecifier NUnitV2Driver = new ExtensionSpecifier(
"NUnit.Extension.NUnitV2Driver", "nunit-extension-nunit-v2-driver", "3.9.0");
public static ExtensionSpecifier NUnitProjectLoader = new ExtensionSpecifier(
"NUnit.Extension.NUnitProjectLoader", "nunit-extension-nunit-project-loader", "4.0.0-dev00016");
public static ExtensionSpecifier VSProjectLoader = new ExtensionSpecifier(
"NUnit.Extension.VSProjectLoader", "nunit-extension-vs-project-loader", "3.9.0");
public static ExtensionSpecifier NUnitV2ResultWriter = new ExtensionSpecifier(
"NUnit.Extension.NUnitV2ResultWriter", "nunit-extension-nunit-v2-result-writer", "4.0.0-beta.1");
public static ExtensionSpecifier Net462PluggableAgent = new ExtensionSpecifier(
"NUnit.Extension.Net462PluggableAgent", "nunit-extension-net462-pluggable-agent", "4.1.0-alpha.5");
public static ExtensionSpecifier Net80PluggableAgent = new ExtensionSpecifier(
"NUnit.Extension.Net80PluggableAgent", "nunit-extension-net80-pluggable-agent", "4.1.0-alpha.4");
public static ExtensionSpecifier Net90PluggableAgent = new ExtensionSpecifier(
"NUnit.Extension.Net90PluggableAgent", "nunit-extension-net90-pluggable-agent", "4.1.0-alpha.3");
// TODO: Decide if we want to support any of these older extensions
//public static ExtensionSpecifier Net20PluggableAgent = new ExtensionSpecifier(
// "NUnit.Extension.Net20PluggableAgent", "nunit-extension-net20-pluggable-agent", "2.1.1");
//public static ExtensionSpecifier NetCore21PluggableAgent = new ExtensionSpecifier(
// "NUnit.Extension.NetCore21PluggableAgent", "nunit-extension-netcore21-pluggable-agent", "2.1.1");
//public static ExtensionSpecifier NetCore31PluggableAgent = new ExtensionSpecifier(
// "NUnit.Extension.NetCore31PluggableAgent", "nunit-extension-netcore31-pluggable-agent", "2.1.0");
//public static ExtensionSpecifier Net50PluggableAgent = new ExtensionSpecifier(
// "NUnit.Extension.Net50PluggableAgent", "nunit-extension-net50-pluggable-agent", "2.1.0");
//public static ExtensionSpecifier Net60PluggableAgent = new ExtensionSpecifier(
// "TestCentric.Extension.Net60PluggableAgent", "testcentric-extension-net60-pluggable-agent", "2.5.3-dev00010");
//public static ExtensionSpecifier Net70PluggableAgent = new ExtensionSpecifier(
// "NUnit.Extension.Net70PluggableAgent", "nunit-extension-net70-pluggable-agent", "2.1.0");
private static FieldInfo[] ExtensionFields =>
typeof(KnownExtensions).GetFields(BindingFlags.Static | BindingFlags.Public).ToArray();
public static ExtensionSpecifier[] BundledAgents =>
[
Net462PluggableAgent,
Net80PluggableAgent,
Net90PluggableAgent
];
public static IEnumerable<PackageReference> BundledNuGetAgents =>
BundledAgents.Select(a => a.NuGetPackage);
public static IEnumerable<PackageReference> BundledChocolateyAgents =>
BundledAgents.Select(a => a.ChocoPackage);
public static IEnumerable<ExtensionSpecifier> AllExtensions =>
ExtensionFields.Select(f => (ExtensionSpecifier)f.GetValue("Value")).ToArray();
public static IEnumerable<ExtensionSpecifier> AllAgents =>
AllExtensions.Where(ex => ex.NuGetId.EndsWith("PluggableAgent"));
public static void RestoreBundledAgents()
{
var context = BuildSettings.Context;
context.CleanDirectory("bundled-agents");
var packageRefs = new StringBuilder();
foreach (ExtensionSpecifier agent in KnownExtensions.BundledAgents)
{
packageRefs.AppendLine($"<PackageReference Include=\"{agent.NuGetId}\" Version=\"{agent.Version}\" />");
packageRefs.AppendLine($"<PackageReference Include=\"{agent.ChocoId}\" Version=\"{agent.Version}\" />");
}
using (StreamWriter sw = SIO.File.CreateText(SIO.Path.Combine("bundled-agents", "BundledAgents.csproj")))
{
sw.WriteLine($"""
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<Description>Dummy project generated for restoring bundled agents</Description>
</PropertyGroup >
<ItemGroup>
{packageRefs}
</ItemGroup>
</Project>
""");
}
context.NuGetRestore("bundled-agents/BundledAgents.csproj");
}
}
TaskSetup(setupContext =>
{
if (CommandLineOptions.NoBuild && setupContext.Task.Name == "Package")
{
Banner.Display("Restoring Agents bundled with the GUI");
KnownExtensions.RestoreBundledAgents();
}
});
TaskTeardown(teardownContext =>
{
if (!CommandLineOptions.NoBuild && teardownContext.Task.Name == "Restore" && BuildSettings.TasksToExecute.Contains("Package"))
{
Banner.Display("Restoring Agents bundled with the GUI");
KnownExtensions.RestoreBundledAgents();
}
});
Task("RestoreBundledAgents")
.Description("Ensures the agents we bundle are in the cache")
.Does(() => KnownExtensions.RestoreBundledAgents());
Task("InstallBundledAgents")
.Description("Installs just the agents we bundle with the GUI runner.")
.Does(() =>
{
foreach (var agent in KnownExtensions.BundledNuGetAgents)
agent.Install(BuildSettings.ProjectDirectory + BIN_DIR);
});
Task("InstallAllAgents")
.Description("Installs all known agents.")
.Does(() =>
{
foreach (var agent in KnownExtensions.AllAgents)
agent.NuGetPackage.Install(BuildSettings.ProjectDirectory + BIN_DIR);
});
Task("InstallAllExtensions")
.Description("Installs all known extensions, both agents and others.")
.Does(() =>
{
foreach (var extension in KnownExtensions.AllExtensions)
extension.NuGetPackage.Install(BuildSettings.ProjectDirectory + BIN_DIR);
});