From a8d6c1b05f92426205bf701ceb3f0a0614420100 Mon Sep 17 00:00:00 2001 From: Charlie Poole Date: Tue, 10 Jan 2023 13:58:35 -0800 Subject: [PATCH 1/3] Revise build scripts --- NUnitConsole.sln | 4 +- build.cake | 341 +++--- cake/build-settings.cake | 341 +++++- cake/constants.cake | 120 +-- cake/package-checks.cake | 6 +- cake/package-definitions.cake | 990 +++++++++--------- cake/package-tests.cake | 153 --- cake/utilities.cake | 99 +- msi/resources/nunit.bundle.addins | 1 - nuget/engine/nunit.engine.nuspec | 66 +- nuget/runners/DotnetToolSettings.xml | 2 +- ...unit.console-runner-with-extensions.nuspec | 6 +- .../nunit4-console/ConsoleOptions.cs | 2 +- .../nunit4-console/ConsoleRunner.cs | 2 +- src/NUnitConsole/nunit4-console/Program.cs | 2 +- .../nunit4-netcore-console/ConsoleOptions.cs | 2 +- .../nunit4-netcore-console/ConsoleRunner.cs | 2 +- .../nunit4-netcore-console.csproj | 25 + .../nunit-agent-net20-x86.csproj | 16 + .../nunit-agent-net20.csproj | 16 + .../nunit-agent-net462-x86.csproj | 18 +- .../nunit-agent-net462.csproj | 16 + .../nunit-agent-net50.csproj | 16 + .../nunit-agent-net60.csproj | 16 + .../nunit-agent-net70.csproj | 16 + .../nunit-agent-netcore31.csproj | 16 + .../RunnerInDirectoryWithoutFramework.cs | 4 +- zip/nunit.bundle.addins | 1 - 28 files changed, 1289 insertions(+), 1010 deletions(-) diff --git a/NUnitConsole.sln b/NUnitConsole.sln index 33bc432f0..f6bd36ceb 100644 --- a/NUnitConsole.sln +++ b/NUnitConsole.sln @@ -58,6 +58,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "engine", "engine", "{43A219 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runners", "runners", "{F3E87D0F-6F06-4C0B-AE06-42C0834C3C6E}" ProjectSection(SolutionItems) = preProject + nuget\runners\DotnetToolSettings.xml = nuget\runners\DotnetToolSettings.xml nuget\runners\nunit.console-runner-with-extensions.nuspec = nuget\runners\nunit.console-runner-with-extensions.nuspec nuget\runners\nunit.console-runner.netcore.nuspec = nuget\runners\nunit.console-runner.netcore.nuspec nuget\runners\nunit.console-runner.nuspec = nuget\runners\nunit.console-runner.nuspec @@ -94,12 +95,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "deprecated", "deprecated", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cake", "cake", "{9BCA00E2-D072-424B-A6DF-5BECF719C1FB}" ProjectSection(SolutionItems) = preProject + cake\build-settings.cake = cake\build-settings.cake cake\constants.cake = cake\constants.cake cake\header-check.cake = cake\header-check.cake cake\package-checks.cake = cake\package-checks.cake cake\package-definitions.cake = cake\package-definitions.cake - cake\package-tester.cake = cake\package-tester.cake cake\package-tests.cake = cake\package-tests.cake + cake\packages.cake = cake\packages.cake cake\test-results.cake = cake\test-results.cake cake\utilities.cake = cake\utilities.cake cake\versioning.cake = cake\versioning.cake diff --git a/build.cake b/build.cake index e84efee01..5746b518d 100644 --- a/build.cake +++ b/build.cake @@ -1,13 +1,11 @@ static string Target; Target = GetArgument("target|t", "Default"); -static string Configuration; Configuration = GetArgument("configuration|c", "Release"); -static bool NoPush; NoPush = HasArgument("nopush"); #load cake/constants.cake +#load cake/build-settings.cake #load cake/header-check.cake #load cake/package-checks.cake #load cake/test-results.cake #load cake/package-tests.cake -#load cake/package-tester.cake #load cake/versioning.cake #load cake/utilities.cake #load cake/package-definitions.cake @@ -31,17 +29,15 @@ var installedNetCoreRuntimes = GetInstalledNetCoreRuntimes(); ////////////////////////////////////////////////////////////////////// Setup(context => { - Information("Creating BuildVersion"); - _buildVersion = new BuildVersion(context); + var settings = new BuildSettings(context); - Information("Building {0} version {1} of NUnit Console/Engine.", Configuration, ProductVersion); - Information("PreReleaseLabel is " + PreReleaseLabel); - - Information("Initializing PackageDefinitions"); - InitializePackageDefinitions(context); + Information($"Building {settings.Configuration} version {settings.ProductVersion} of NUnit Console/Engine."); + Information($"PreReleaseLabel is {settings.PreReleaseLabel}"); if (BuildSystem.IsRunningOnAppVeyor) AppVeyor.UpdateBuildVersion(ProductVersion + "-" + AppVeyor.Environment.Build.Number); + + return settings; }); Teardown(context => @@ -50,16 +46,24 @@ Teardown(context => DisplayUnreportedErrors(); }); +////////////////////////////////////////////////////////////////////// +// DISPLAY THE BUILD SETTINGS +////////////////////////////////////////////////////////////////////// + +Task("DisplaySettings") + .Description("Dispay BuildSettings") + .Does(settings => settings.Display()); + ////////////////////////////////////////////////////////////////////// // CLEANING ////////////////////////////////////////////////////////////////////// Task("Clean") .Description("Cleans directories.") - .Does(() => + .Does(settings => { - Information($"Cleaning bin/{Configuration} directories"); - foreach (var dir in GetDirectories($"src/**/bin/{Configuration}")) + Information($"Cleaning bin/{settings.Configuration} directories"); + foreach (var dir in GetDirectories($"src/**/bin/{settings.Configuration}")) CleanDirectory(dir); Information("Cleaning Extensions Directory"); @@ -94,59 +98,53 @@ Task("Build") .Description("Builds the engine and console") .IsDependentOn("CheckHeaders") .IsDependentOn("Clean") - .Does(() => + .Does(settings => { if (IsRunningOnWindows()) - BuildSolution(); + BuildSolution(settings); else - BuildEachProjectSeparately(); + BuildEachProjectSeparately(settings); }); -public void BuildSolution() +public void BuildSolution(BuildSettings settings) { - MSBuild(SOLUTION_FILE, CreateMSBuildSettings("Build").WithRestore()); - - DisplayBanner("Copying agents to console runner directory"); - CopyAgentsToDirectory(NETFX_CONSOLE_DIR); - - DisplayBanner("Copying agents to engine directory"); - CopyAgentsToDirectory(ENGINE_PROJECT_BIN_DIR); + MSBuild(SOLUTION_FILE, CreateMSBuildSettings("Build", settings).WithRestore()); } -private void BuildEachProjectSeparately() +private void BuildEachProjectSeparately(BuildSettings settings) { DotNetRestore(SOLUTION_FILE); - BuildProject(ENGINE_PROJECT); - BuildProject(NETFX_CONSOLE_PROJECT); - //BuildProject(NETCORE_CONSOLE_PROJECT); - BuildProject(NET20_AGENT_PROJECT); - BuildProject(NET20_AGENT_X86_PROJECT); - BuildProject(NET462_AGENT_PROJECT); - BuildProject(NET462_AGENT_X86_PROJECT); - BuildProject(NET50_AGENT_PROJECT); - BuildProject(NET60_AGENT_PROJECT); - BuildProject(NETCORE31_AGENT_PROJECT); - - BuildProject(ENGINE_TESTS_PROJECT, NETFX_ENGINE_TARGET, "netcoreapp2.1"); - BuildProject(ENGINE_CORE_TESTS_PROJECT, "net462", "netcoreapp2.1", "netcoreapp3.1", "net5.0", "net6.0"); - BuildProject(CONSOLE_TESTS_PROJECT, NETFX_CONSOLE_TARGET, "net6.0"); - - BuildProject(MOCK_ASSEMBLY_X86_PROJECT, "net35", "net462", "netcoreapp2.1", "netcoreapp3.1"); - BuildProject(NOTEST_PROJECT, "net35", "netcoreapp2.1", "netcoreapp3.1"); - - + BuildProject(ENGINE_PROJECT, settings); + BuildProject(NETFX_CONSOLE_PROJECT, settings); + //BuildProject(NETCORE_CONSOLE_PROJECT, settings); + BuildProject(NET20_AGENT_PROJECT, settings); + BuildProject(NET20_AGENT_X86_PROJECT, settings); + BuildProject(NET462_AGENT_PROJECT, settings); + BuildProject(NET462_AGENT_X86_PROJECT, settings); + BuildProject(NET50_AGENT_PROJECT, settings); + BuildProject(NET60_AGENT_PROJECT, settings); + BuildProject(NETCORE31_AGENT_PROJECT, settings); + + BuildProject(ENGINE_TESTS_PROJECT, settings, "net462", "netcoreapp2.1", "netcoreapp3.1"); + BuildProject(ENGINE_CORE_TESTS_PROJECT, settings, "net462", "netcoreapp2.1", "netcoreapp3.1", "net5.0", "net6.0"); + BuildProject(CONSOLE_TESTS_PROJECT, settings, NETFX_CONSOLE_TARGET, "net6.0"); + + BuildProject(MOCK_ASSEMBLY_X86_PROJECT, settings, "net35", "net462", "netcoreapp2.1", "netcoreapp3.1"); + BuildProject(NOTEST_PROJECT, settings, "net35", "netcoreapp2.1", "netcoreapp3.1"); + BuildProject(WINDOWS_FORMS_TEST_PROJECT, settings); + BuildProject(ASP_NET_CORE_TEST_PROJECT, settings); } // NOTE: If we use DotNet to build on Linux, then our net35 projects fail. // If we use MSBuild, then the net5.0 projects fail. So we build each project // differently depending on whether it has net35 as one of its targets. -private void BuildProject(string project, params string[] targetFrameworks) +private void BuildProject(string project, BuildSettings settings, params string[] targetFrameworks) { if (targetFrameworks.Length == 0) { DisplayBanner($"Building {System.IO.Path.GetFileName(project)}"); - DotNetMSBuild(project, CreateDotNetMSBuildSettings("Build")); + DotNetMSBuild(project, CreateDotNetMSBuildSettings("Build", settings)); } else { @@ -154,9 +152,9 @@ private void BuildProject(string project, params string[] targetFrameworks) { DisplayBanner($"Building {System.IO.Path.GetFileName(project)} for {framework}"); if (framework == "net35") - MSBuild(project, CreateMSBuildSettings("Build").WithProperty("TargetFramework", framework)); + MSBuild(project, CreateMSBuildSettings("Build", settings).WithProperty("TargetFramework", framework)); else - DotNetMSBuild(project, CreateDotNetMSBuildSettings("Build").WithProperty("TargetFramework", framework)); + DotNetMSBuild(project, CreateDotNetMSBuildSettings("Build", settings).WithProperty("TargetFramework", framework)); } } } @@ -168,15 +166,15 @@ private void BuildProject(string project, params string[] targetFrameworks) Task("BuildCppTestFiles") .Description("Builds the C++ mock test assemblies") .WithCriteria(IsRunningOnWindows) - .Does(() => + .Does(settings => { MSBuild( - SOURCE_DIR + "NUnitEngine/mock-cpp-clr/mock-cpp-clr-x86.vcxproj", - CreateMSBuildSettings("Build").WithProperty("Platform", "x86")); + PROJECT_DIR + "src/NUnitEngine/mock-cpp-clr/mock-cpp-clr-x86.vcxproj", + CreateMSBuildSettings("Build", settings).WithProperty("Platform", "x86")); MSBuild( - SOURCE_DIR + "NUnitEngine/mock-cpp-clr/mock-cpp-clr-x64.vcxproj", - CreateMSBuildSettings("Build").WithProperty("Platform", "x64")); + PROJECT_DIR + "src/NUnitEngine/mock-cpp-clr/mock-cpp-clr-x64.vcxproj", + CreateMSBuildSettings("Build", settings).WithProperty("Platform", "x64")); }); ////////////////////////////////////////////////////////////////////// @@ -198,9 +196,9 @@ Task("TestNet20EngineCore") .Description("Tests the engine core assembly") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunNUnitLiteTests(ENGINE_CORE_TESTS_PROJECT, "net35"); + RunNUnitLiteTests(ENGINE_CORE_TESTS_PROJECT, settings.Configuration, "net35"); }); ////////////////////////////////////////////////////////////////////// @@ -211,9 +209,9 @@ Task("TestNetStandard20EngineCore") .Description("Tests the .NET Standard Engine core assembly") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunDotnetNUnitLiteTests(ENGINE_CORE_TESTS_PROJECT, "netcoreapp2.1"); + RunDotnetNUnitLiteTests(ENGINE_CORE_TESTS_PROJECT, settings.Configuration, "netcoreapp2.1"); }); ////////////////////////////////////////////////////////////////////// @@ -224,9 +222,9 @@ Task("TestNetCore31EngineCore") .Description("Tests the .NET Core 3.1 Engine core assembly") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunDotnetNUnitLiteTests(ENGINE_CORE_TESTS_PROJECT, "netcoreapp3.1"); + RunDotnetNUnitLiteTests(ENGINE_CORE_TESTS_PROJECT, settings.Configuration, "netcoreapp3.1"); }); ////////////////////////////////////////////////////////////////////// @@ -237,9 +235,9 @@ Task("TestNetFxEngine") .Description("Tests the NETFX 4.6.2 engine") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunNUnitLiteTests(ENGINE_TESTS_PROJECT, NETFX_ENGINE_TARGET); + RunNUnitLiteTests(ENGINE_TESTS_PROJECT, settings.Configuration, "net462"); }); ////////////////////////////////////////////////////////////////////// @@ -250,9 +248,9 @@ Task("TestNetStandard20Engine") .Description("Tests the .NET Standard Engine") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunDotnetNUnitLiteTests(ENGINE_TESTS_PROJECT, "netcoreapp2.1"); + RunDotnetNUnitLiteTests(ENGINE_TESTS_PROJECT, settings.Configuration, "netcoreapp2.1"); }); ////////////////////////////////////////////////////////////////////// @@ -263,9 +261,9 @@ Task("TestNetCore31Engine") .Description("Tests the .NET Core 3.1 Engine") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunDotnetNUnitLiteTests(ENGINE_TESTS_PROJECT, "netcoreapp3.1"); + RunDotnetNUnitLiteTests(ENGINE_TESTS_PROJECT, settings.Configuration, "netcoreapp3.1"); }); ////////////////////////////////////////////////////////////////////// @@ -276,9 +274,9 @@ Task("TestNetFxConsole") .Description("Tests the .NET Framework console runner") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunNetFxConsole(CONSOLE_TESTS_PROJECT, NETFX_CONSOLE_TARGET); + RunNetFxConsole(CONSOLE_TESTS_PROJECT, settings.Configuration, NETFX_CONSOLE_TARGET); }); ////////////////////////////////////////////////////////////////////// @@ -289,9 +287,9 @@ Task("TestNetCoreConsole") .Description("Tests the .NET Core console runner") .IsDependentOn("Build") .OnError(exception => { UnreportedErrors.Add(exception.Message); }) - .Does(() => + .Does(settings => { - RunNetCoreConsole(CONSOLE_TESTS_PROJECT, NETCORE_CONSOLE_TARGET); + RunNetCoreConsole(CONSOLE_TESTS_PROJECT, settings.Configuration, NETCORE_CONSOLE_TARGET); }); ////////////////////////////////////////////////////////////////////// @@ -325,16 +323,18 @@ Task("FetchBundledExtensions") Task("CreateZipImage") .IsDependentOn("FetchBundledExtensions") - .Does(() => + .Does(settings => { - CleanDirectory(ZIP_IMG_DIR); + var zipImageDirectory = PACKAGE_DIR + "zip-image/"; + + CleanDirectory(zipImageDirectory); CopyFiles( new FilePath[] { "LICENSE.txt", "NOTICES.txt", "CHANGES.txt", "nunit.ico" }, - ZIP_IMG_DIR); - CopyDirectory(NETFX_CONSOLE_DIR, ZIP_IMG_DIR + "bin/"); - CopyFileToDirectory(ZIP_DIR + "nunit.bundle.addins", ZIP_IMG_DIR + "bin/"); + zipImageDirectory); + CopyDirectory(settings.NetFxConsoleBinDir, zipImageDirectory + "bin/"); + CopyFileToDirectory(PROJECT_DIR + "zip/nunit.bundle.addins", zipImageDirectory + "bin/"); - var addinsDir = ZIP_IMG_DIR + "bin/addins/"; + var addinsDir = zipImageDirectory + "bin/addins/"; CleanDirectory(addinsDir); foreach (var packageDir in System.IO.Directory.GetDirectories(EXTENSIONS_DIR)) @@ -342,98 +342,82 @@ Task("CreateZipImage") }); ////////////////////////////////////////////////////////////////////// -// VERIFY PACKAGES +// BUILD AND TEST ALL PACKAGES USING PREVIOUSLY BUILT BINARIES ////////////////////////////////////////////////////////////////////// -Task("BuildPackages") - .IsDependentOn("CreateZipImage") - .Does(() => - { - EnsureDirectoryExists(PACKAGE_DIR); - - foreach (var package in AllPackages) - { - DisplayBanner($"Building package {package.PackageName}"); - - package.BuildPackage(); - } - }); +Task("PackageExistingBuild") + .Description("Builds and tests all packages, using previously build binaries") + .IsDependentOn("PackageConsole") + .IsDependentOn("PackageConsoleRunner") + .IsDependentOn("PackageDotNetConsoleRunner") + .IsDependentOn("PackageChocolateyConsoleRunner") + .IsDependentOn("PackageMsi") + .IsDependentOn("PackageZip") + .IsDependentOn("PackageEngine") + .IsDependentOn("PackageEngineApi"); ////////////////////////////////////////////////////////////////////// -// VERIFY PACKAGES +// BUILD AND TEST INDIVIDUAL PACKAGES ////////////////////////////////////////////////////////////////////// -Task("VerifyPackages") - .Description("Check content of all the packages we build") - .Does(() => +Task("PackageConsole") + .Description("Build and Test NUnit.Console NuGet Package") + .Does(settings => { - int failures = 0; - - foreach (var package in AllPackages) - { - if (!CheckPackage($"{PACKAGE_DIR}{package.PackageName}", package.PackageChecks)) - ++failures; - - if (package.HasSymbols && !CheckPackage($"{PACKAGE_DIR}{package.SymbolPackageName}", package.SymbolChecks)) - ++failures; - } - - if (failures == 0) - Information("\nAll packages passed verification."); - else - throw new System.Exception($"{failures} packages failed verification."); + settings.ConsoleNuGetPackage.BuildVerifyAndTest(); }); -////////////////////////////////////////////////////////////////////// -// TEST PACKAGES -////////////////////////////////////////////////////////////////////// - -Task("TestPackages") - .Does(() => +Task("PackageConsoleRunner") + .Description("Build and Test NUnit.ConsoleRunner NuGet Package") + .Does(settings => { - TestPackages(); + settings.ConsoleRunnerNuGetPackage.BuildVerifyAndTest(); }); - -Task("TestNuGetNetFXPackage") - .Does(() => + +Task("PackageDotNetConsoleRunner") + .Description("Build and Test NUnit.ConsoleRunner NuGet Package") + .Does(settings => { - TestPackages(packageType: PackageType.NuGet, packageId: "NUnit.ConsoleRunner"); + settings.DotNetConsoleRunnerNuGetPackage.BuildVerifyAndTest(); }); -Task("TestNuGetNetCorePackage") - .Does(() => +Task("PackageChocolateyConsoleRunner") + .Description("Build Verify and Test the Chocolatey nunit-console-runner package") + .Does(settings => { - TestPackages(packageType: PackageType.NuGet, packageId: "NUnit.ConsoleRunner.NetCore"); + settings.ConsoleRunnerChocolateyPackage.BuildVerifyAndTest(); }); -Task("TestChocolateyPackage") - .Does(() => +Task("PackageMsi") + .Description("Build, Verify and Test the MSI package") + .IsDependentOn("FetchBundledExtensions") + .Does(settings => { - TestPackages(packageType: PackageType.Chocolatey); + settings.ConsoleMsiPackage.BuildVerifyAndTest(); }); -Task("TestMsiPackage") - .Does(() => +Task("PackageZip") + .Description("Build, Verify and Test the Zip package") + .IsDependentOn("FetchBundledExtensions") + .IsDependentOn("CreateZipImage") + .Does(settings => { - TestPackages(packageType: PackageType.Msi); + settings.ConsoleZipPackage.BuildVerifyAndTest(); }); -Task("TestZipPackage") - .Does(() => +Task("PackageEngine") + .Description("Build and Verify the NUnit.Engine package") + .Does(settings => { - TestPackages(packageType: PackageType.Zip); + settings.EngineNuGetPackage.BuildVerifyAndTest(); }); -private void TestPackages(PackageType? packageType=null, string packageId=null) -{ - foreach (var package in AllPackages) - { - if (package.PackageTests != null) - if (packageType == null || package.PackageType == packageType) - if (packageId == null || package.PackageId == packageId) - new PackageTester(Context, package).RunTests(); - } -} +Task("PackageEngineApi") + .Description("Build and Verify the NUnit.Engine.Api package") + .Does(settings => + { + settings.EngineApiNuGetPackage.BuildVerifyAndTest(); + }); ////////////////////////////////////////////////////////////////////// // INSTALL SIGNING TOOL @@ -523,26 +507,21 @@ Task("PublishPackages") // which depends on it, or directly when recovering from errors. Task("PublishToMyGet") .Description("Publish packages to MyGet") - .Does(() => + .Does(settings => { - if (!ShouldPublishToMyGet) + if (!settings.ShouldPublishToMyGet) Information("Nothing to publish to MyGet from this run."); + else if (settings.NoPush) + Information("NoPush option suppressing publication to MyGet"); else { - var apiKey = EnvironmentVariable(MYGET_API_KEY); - - foreach (var package in AllPackages) + foreach (var package in settings.AllPackages) try { - switch (package.PackageType) - { - case PackageType.NuGet: - PushNuGetPackage(PACKAGE_DIR + package.PackageName, apiKey, MYGET_PUSH_URL); - break; - case PackageType.Chocolatey: - PushChocolateyPackage(PACKAGE_DIR + package.PackageName, apiKey, MYGET_PUSH_URL); - break; - } + if (package is NuGetPackageDefinition) + PushNuGetPackage(PACKAGE_DIR + package.PackageFileName, settings.MyGetApiKey, MYGET_PUSH_URL); + else if (package is ChocolateyPackageDefinition) + PushChocolateyPackage(PACKAGE_DIR + package.PackageFileName, settings.MyGetApiKey, MYGET_PUSH_URL); } catch(Exception) { @@ -555,19 +534,19 @@ Task("PublishToMyGet") // which depends on it, or directly when recovering from errors. Task("PublishToNuGet") .Description("Publish packages to NuGet") - .Does(() => + .Does(settings => { - if (!ShouldPublishToNuGet) + if (!settings.ShouldPublishToNuGet) Information("Nothing to publish to NuGet from this run."); + else if (settings.NoPush) + Information("NoPush option suppressing publication to NuGet"); else { - var apiKey = EnvironmentVariable(NUGET_API_KEY); - - foreach (var package in AllPackages) - if (package.PackageType == PackageType.NuGet) + foreach (var package in settings.AllPackages) + if (package is NuGetPackageDefinition) try { - PushNuGetPackage(PACKAGE_DIR + package.PackageName, apiKey, NUGET_PUSH_URL); + PushNuGetPackage(PACKAGE_DIR + package.PackageFileName, settings.NuGetApiKey, NUGET_PUSH_URL); } catch (Exception) { @@ -580,19 +559,19 @@ Task("PublishToNuGet") // which depends on it, or directly when recovering from errors. Task("PublishToChocolatey") .Description("Publish packages to Chocolatey") - .Does(() => + .Does(settings => { - if (!ShouldPublishToChocolatey) + if (!settings.ShouldPublishToChocolatey) Information("Nothing to publish to Chocolatey from this run."); + else if (settings.NoPush) + Information("NoPush option suppressing publication to Chocolatey"); else { - var apiKey = EnvironmentVariable(CHOCO_API_KEY); - - foreach (var package in AllPackages) - if (package.PackageType == PackageType.Chocolatey) + foreach (var package in settings.AllPackages) + if (package is ChocolateyPackageDefinition) try { - PushChocolateyPackage(PACKAGE_DIR + package.PackageName, apiKey, CHOCO_PUSH_URL); + PushChocolateyPackage(PACKAGE_DIR + package.PackageFileName, settings.ChocolateyApiKey, CHOCO_PUSH_URL); } catch (Exception) { @@ -617,7 +596,7 @@ Task("ListInstalledNetCoreRuntimes") ////////////////////////////////////////////////////////////////////// Task("CreateDraftRelease") - .Does(() => + .Does(settings => { bool isDirectTarget = Target == "CreateDraftRelease"; @@ -633,7 +612,7 @@ Task("CreateDraftRelease") Information($"Creating draft release for {releaseName}"); - if (!NoPush) + if (!settings.NoPush) try { GitReleaseManagerCreate(EnvironmentVariable(GITHUB_ACCESS_TOKEN), GITHUB_OWNER, GITHUB_REPO, new GitReleaseManagerCreateSettings() @@ -661,7 +640,7 @@ Task("CreateDraftRelease") ////////////////////////////////////////////////////////////////////// Task("CreateProductionRelease") - .Does(() => + .Does(settings => { if (IsProductionRelease) { @@ -669,13 +648,13 @@ Task("CreateProductionRelease") string tagName = ProductVersion; var assetList = new List(); - foreach (var package in AllPackages) - assetList.Add(PACKAGE_DIR + package.PackageName); + foreach (var package in settings.AllPackages) + assetList.Add(PACKAGE_DIR + package.PackageFileName); string assets = $"\"{string.Join(',', assetList.ToArray())}\""; Information($"Publishing release {tagName} to GitHub"); - if (NoPush) + if (settings.NoPush) { Information($"Assets:"); foreach (var asset in assetList) @@ -724,21 +703,13 @@ Task("Test") Task("Package") .Description("Builds and tests all packages") .IsDependentOn("Build") - .IsDependentOn("BuildPackages") - .IsDependentOn("VerifyPackages") - .IsDependentOn("TestPackages"); - -Task("PackageExistingBuild") - .Description("Builds and tests all packages, using previously build binaries") - .IsDependentOn("BuildPackages") - .IsDependentOn("VerifyPackages") - .IsDependentOn("TestPackages"); + .IsDependentOn("PackageExistingBuild"); Task("BuildTestAndPackage") .Description("Builds, tests and packages") .IsDependentOn("Build") .IsDependentOn("Test") - .IsDependentOn("Package"); + .IsDependentOn("PackageExistingBuild"); Task("Appveyor") .Description("Target we run in our AppVeyor CI") diff --git a/cake/build-settings.cake b/cake/build-settings.cake index 6aaf67882..a16e406ab 100644 --- a/cake/build-settings.cake +++ b/cake/build-settings.cake @@ -1,23 +1,344 @@ -#load ./ci.cake -#load ./packaging.cake -#load ./package-checks.cake -#load ./test-results.cake -#load ./package-tests.cake -#load ./package-tester.cake -#load ./header-check.cake -#load ./local-tasks.cake - public class BuildSettings { + private ISetupContext _context; + private BuildSystem _buildSystem; + public BuildSettings(ISetupContext context) { if (context == null) throw new System.ArgumentNullException(nameof(context)); + _context = context; + _buildSystem = context.BuildSystem(); + Target = context.TargetTask.Name; + TasksToExecute = context.TasksToExecute.Select(t => t.Name); + Configuration = context.Argument("configuration", "Release"); + NoPush = context.HasArgument("nopush"); + + BuildVersion = new BuildVersion(context); + + MyGetApiKey = GetApiKey(MYGET_API_KEY, FALLBACK_MYGET_API_KEY); + NuGetApiKey = GetApiKey(NUGET_API_KEY, FALLBACK_NUGET_API_KEY); + ChocolateyApiKey = GetApiKey(CHOCO_API_KEY, FALLBACK_CHOCO_API_KEY); + + Net35Test = new PackageTest( + "Net35Test", + "Run mock-assembly.dll under .NET 3.5", + $"src/TestData/mock-assembly/bin/{Configuration}/net35/mock-assembly.dll", + MockAssemblyExpectedResult(1)); + Net462Test = new PackageTest( + "Net4462Test", + "Run mock-assembly.dll under .NET 4.6.2", + $"src/TestData/mock-assembly/bin/{Configuration}/net462/mock-assembly.dll", + MockAssemblyExpectedResult(1)); + NetCore21Test = new PackageTest( + "NetCore21Test", + "Run mock-assembly.dll targeting .NET Core 2.1", + $"src/TestData/mock-assembly/bin/{Configuration}/netcoreapp2.1/mock-assembly.dll", + MockAssemblyExpectedResult(1)); + NetCore31Test = new PackageTest( + "NetCore31Test", + "Run mock-assembly.dll under .NET Core 3.1", + $"src/TestData/mock-assembly/bin/{Configuration}/netcoreapp3.1/mock-assembly.dll", + MockAssemblyExpectedResult(1)); + Net50Test = new PackageTest( + "Net50Test", + "Run mock-assembly.dll under .NET 5.0", + $"src/TestData/mock-assembly/bin/{Configuration}/net5.0/mock-assembly.dll", + MockAssemblyExpectedResult(1)); + Net60Test = new PackageTest( + "Net60Test", + "Run mock-assembly.dll under .NET 6.0", + $"src/TestData/mock-assembly/bin/{Configuration}/net6.0/mock-assembly.dll", + MockAssemblyExpectedResult(1)); + Net70Test = new PackageTest( + "Net70Test", + "Run mock-assembly.dll under .NET 7.0", + $"src/TestData/mock-assembly/bin/{Configuration}/net7.0/mock-assembly.dll", + MockAssemblyExpectedResult(1)); + Net35X86Test = new PackageTest( + "Net35X86Test", + "Run mock-assembly-x86.dll under .NET 3.5", + $"src/TestData/mock-assembly-x86/bin/{Configuration}/net35/mock-assembly-x86.dll", + MockAssemblyExpectedResult(1)); + Net462X86Test = new PackageTest( + "Net462X86Test", + "Run mock-assembly-x86.dll under .NET 4.6.2", + $"src/TestData/mock-assembly-x86/bin/{Configuration}/net462/mock-assembly-x86.dll", + MockAssemblyExpectedResult(1)); + NetCore31X86Test = new PackageTest( + "NetCore31X86Test", + "Run mock-assembly-x86.dll under .NET Core 3.1", + $"src/TestData/mock-assembly-x86/bin/{Configuration}/netcoreapp3.1/mock-assembly-x86.dll", + MockAssemblyExpectedResult(1)); + NetCore21X86Test = new PackageTest( + "NetCore21X86Test", + "Run mock-assembly-x86.dll under .NET Core 2.1", + $"src/TestData/mock-assembly-x86/bin/{Configuration}/netcoreapp2.1/mock-assembly-x86.dll", + MockAssemblyExpectedResult(1)); + Net60WindowsFormsTest = new PackageTest( + "Net60WindowsFormsTest", + "Run test using windows forms under .NET 6.0", + $"src/TestData/windows-test/bin/{Configuration}/net6.0-windows/windows-test.dll", + new ExpectedResult("Passed")); + Net60AspNetCoreTest = new PackageTest( + "Net60AspNetCoreTest", + "Run test using AspNetCore under .NET 6.0", + $"src/TestData/aspnetcore-test/bin/{Configuration}/net6.0/aspnetcore-test.dll", + new ExpectedResult("Passed")); + Net35PlusNet462Test = new PackageTest( + "Net35PlusNet462Test", + "Run both copies of mock-assembly together", + $"src/TestData/mock-assembly/bin/{Configuration}/net35/mock-assembly.dll src/TestData/mock-assembly/bin/{Configuration}/net462/mock-assembly.dll", + MockAssemblyExpectedResult(2)); + Net50PlusNet60Test = new PackageTest( + "Net50PlusNet60Test", + "Run mock-assembly under .Net 5.0 and .Net 6.0 together", + $"src/TestData/mock-assembly/bin/{Configuration}/net5.0/mock-assembly.dll src/TestData/mock-assembly/bin/{Configuration}/net6.0/mock-assembly.dll", + MockAssemblyExpectedResult(2)); + Net462PlusNet60Test = new PackageTest( + "Net462PlusNet60Test", + "Run mock-assembly under .Net Framework 4.6.2 and .Net 6.0 together", + $"src/TestData/mock-assembly/bin/{Configuration}/net462/mock-assembly.dll src/TestData/mock-assembly/bin/{Configuration}/net6.0/mock-assembly.dll", + MockAssemblyExpectedResult(2)); + NUnitProjectTest = new PackageTest( + "NUnitProjectTest", + "Run project with two copies of mock-assembly", + $"NetFXTests.nunit --config={Configuration}", + MockAssemblyExpectedResult(2)); + Net462NUnit4Test = new PackageTest( + "Net462NUnit4Test", + "Run mock-assembly-nunit4.dll under .NET 4.6.2", + $"src/TestData/mock-assembly-nunit4/bin/{Configuration}/net462/mock-assembly-nunit4.dll", + MockAssemblyExpectedResult(1)); + NetCore31NUnit4Test = new PackageTest( + "NetCore31NUnit4Test", + "Run mock-assembly-nunit4.dll under .NET Core 3.1", + $"src/TestData/mock-assembly-nunit4/bin/{Configuration}/netcoreapp3.1/mock-assembly-nunit4.dll", + MockAssemblyExpectedResult(1)); + Net50NUnit4Test = new PackageTest( + "Net50NUnit4Test", + "Run mock-assembly-nunit4.dll under .NET 5.0", + $"src/TestData/mock-assembly-nunit4/bin/{Configuration}/net5.0/mock-assembly-nunit4.dll", + MockAssemblyExpectedResult(1)); + Net60NUnit4Test = new PackageTest( + "Net60NUnit4Test", + "Run mock-assembly-nunit4.dll under .NET 6.0", + $"src/TestData/mock-assembly-nunit4/bin/{Configuration}/net6.0/mock-assembly-nunit4.dll", + MockAssemblyExpectedResult(1)); + + StandardRunnerTests = new List + { + Net35Test, + Net462Test, + NetCore21Test, + NetCore31Test, + Net50Test, + Net60Test, + Net70Test, + Net35PlusNet462Test, + Net50PlusNet60Test, + Net462PlusNet60Test, + Net35X86Test, + Net462X86Test, + NetCore21X86Test, + NetCore31X86Test, + Net60AspNetCoreTest, + Net462NUnit4Test, + NetCore31NUnit4Test, + Net50NUnit4Test, + Net60NUnit4Test + }; + if (IsRunningOnWindows) + StandardRunnerTests.Add(Net60WindowsFormsTest); + + NetCoreRunnerTests = new List + { + NetCore21Test, + NetCore31Test, + Net50Test, + Net60Test, + Net50PlusNet60Test, + Net60AspNetCoreTest, + NetCore31NUnit4Test, + Net50NUnit4Test, + Net60NUnit4Test + }; + if (IsRunningOnWindows) + NetCoreRunnerTests.Add(Net60WindowsFormsTest); + + AllPackages = new PackageDefinition[] { + ConsoleNuGetPackage = new NUnitConsoleNuGetPackage(this), + ConsoleRunnerNuGetPackage = new NUnitConsoleRunnerNuGetPackage(this), + DotNetConsoleRunnerNuGetPackage = new NUnitNetCoreConsoleRunnerPackage(this), + ConsoleRunnerChocolateyPackage = new NUnitConsoleRunnerChocolateyPackage(this), + ConsoleMsiPackage = new NUnitConsoleMsiPackage(this), + ConsoleZipPackage = new NUnitConsoleZipPackage(this), + EngineNuGetPackage = new NUnitEngineNuGetPackage(this), + EngineApiNuGetPackage = new NUnitEngineApiNuGetPackage(this) + }; } public string Target { get; } + public IEnumerable TasksToExecute { get; } + + public ICakeContext Context => _context; + public string Configuration { get; } -} \ No newline at end of file + + public string NetFxConsoleBinDir => NETFX_CONSOLE_DIR + $"bin/{Configuration}/{NETFX_CONSOLE_TARGET}/"; + public string NetCoreConsoleBinDir => NETCORE_CONSOLE_DIR + $"bin/{Configuration}/{NETCORE_CONSOLE_TARGET}"; + + public BuildVersion BuildVersion { get; } + public string SemVer => BuildVersion.SemVer; + public string ProductVersion => BuildVersion.ProductVersion; + public string PreReleaseLabel => BuildVersion.PreReleaseLabel; + public string AssemblyVersion => BuildVersion.AssemblyVersion; + public string AssemblyFileVersion => BuildVersion.AssemblyFileVersion; + public string AssemblyInformationalVersion => BuildVersion.AssemblyInformationalVersion; + public string BranchName => BuildVersion.BranchName; + public bool IsReleaseBranch => BuildVersion.IsReleaseBranch; + + public bool IsLocalBuild => _buildSystem.IsLocalBuild; + public bool IsRunningOnUnix => _context.IsRunningOnUnix(); + public bool IsRunningOnWindows => _context.IsRunningOnWindows(); + public bool IsRunningOnAppVeyor => _buildSystem.AppVeyor.IsRunningOnAppVeyor; + + public bool IsPreRelease => !string.IsNullOrEmpty(PreReleaseLabel); + + public bool ShouldPublishToMyGet => IsPreRelease && LABELS_WE_PUBLISH_ON_MYGET.Contains(PreReleaseLabel); + public bool ShouldPublishToNuGet => !IsPreRelease || LABELS_WE_PUBLISH_ON_NUGET.Contains(PreReleaseLabel); + public bool ShouldPublishToChocolatey => !IsPreRelease || LABELS_WE_PUBLISH_ON_CHOCOLATEY.Contains(PreReleaseLabel); + public bool IsProductionRelease => !IsPreRelease || LABELS_WE_RELEASE_ON_GITHUB.Contains(PreReleaseLabel); + + public string MyGetApiKey { get; } + public string NuGetApiKey { get; } + public string ChocolateyApiKey { get; } + + public string GitHubAccessToken => _context.EnvironmentVariable(GITHUB_ACCESS_TOKEN); + + public bool NoPush { get; } + +////////////////////////////////////////////////////////////////////// +// INDIVIDUAL PACKAGE TEST DEFINITIONS +////////////////////////////////////////////////////////////////////// + + static ExpectedResult MockAssemblyExpectedResult(int nCopies = 1) => new ExpectedResult("Failed") + { + Total = 37 * nCopies, + Passed = 23 * nCopies, + Failed = 5 * nCopies, + Warnings = 1 * nCopies, + Inconclusive = 1 * nCopies, + Skipped = 7 * nCopies + }; + + // Single Assembly Tests using each agent + public PackageTest Net35Test { get; } + public PackageTest Net462Test { get; } + public PackageTest NetCore21Test { get; } + public PackageTest NetCore31Test { get; } + public PackageTest Net50Test { get; } + public PackageTest Net60Test { get; } + public PackageTest Net70Test { get; } + // X86 Tests + public PackageTest Net35X86Test { get; } + public PackageTest Net462X86Test { get; } + public PackageTest NetCore31X86Test { get; } + public PackageTest NetCore21X86Test { get; } + // Special Test Situations + public PackageTest Net60WindowsFormsTest { get; } + public PackageTest Net60AspNetCoreTest { get; } + // Multiple Assemblies + public PackageTest Net35PlusNet462Test { get; } + public PackageTest Net50PlusNet60Test { get; } + public PackageTest Net462PlusNet60Test { get; } + // NUnit Project Test + public PackageTest NUnitProjectTest { get; } + // Tests Using NUnit 4 Framework + public PackageTest Net462NUnit4Test { get; } + public PackageTest NetCore31NUnit4Test { get; } + public PackageTest Net50NUnit4Test { get; } + public PackageTest Net60NUnit4Test { get; } + + // Tests run for all runner packages except NETCORE runner + public List StandardRunnerTests { get; } + // Tests run for the NETCORE runner package + public List NetCoreRunnerTests { get; } + +////////////////////////////////////////////////////////////////////// +// PACKAGE DEFINITIONS +////////////////////////////////////////////////////////////////////// + + public PackageDefinition[] AllPackages { get; } + + public PackageDefinition ConsoleNuGetPackage; + public PackageDefinition ConsoleRunnerNuGetPackage; + public PackageDefinition DotNetConsoleRunnerNuGetPackage; + public PackageDefinition ConsoleRunnerChocolateyPackage; + public PackageDefinition ConsoleMsiPackage; + public PackageDefinition ConsoleZipPackage; + public PackageDefinition EngineNuGetPackage; + public PackageDefinition EngineApiNuGetPackage; + + public void Display() + { + Console.WriteLine("\nTASKS"); + Console.WriteLine("Target: " + Target); + Console.WriteLine("TasksToExecute: " + string.Join(", ", TasksToExecute)); + + Console.WriteLine("\nENVIRONMENT"); + Console.WriteLine("IsLocalBuild: " + IsLocalBuild); + Console.WriteLine("IsRunningOnWindows: " + IsRunningOnWindows); + Console.WriteLine("IsRunningOnUnix: " + IsRunningOnUnix); + Console.WriteLine("IsRunningOnAppVeyor: " + IsRunningOnAppVeyor); + + Console.WriteLine("\nVERSIONING"); + Console.WriteLine("ProductVersion: " + ProductVersion); + Console.WriteLine("AssemblyVersion: " + AssemblyVersion); + Console.WriteLine("AssemblyFileVersion: " + AssemblyFileVersion); + Console.WriteLine("AssemblyInformationalVersion: " + AssemblyInformationalVersion); + Console.WriteLine("SemVer: " + BuildVersion.SemVer); + Console.WriteLine("IsPreRelease: " + BuildVersion.IsPreRelease); + Console.WriteLine("PreReleaseLabel: " + BuildVersion.PreReleaseLabel); + Console.WriteLine("PreReleaseSuffix: " + BuildVersion.PreReleaseSuffix); + + Console.WriteLine("\nRELEASING"); + Console.WriteLine("BranchName: " + BranchName); + Console.WriteLine("IsReleaseBranch: " + IsReleaseBranch); + + Console.WriteLine("\nDIRECTORIES"); + Console.WriteLine($"Project: {PROJECT_DIR}"); + Console.WriteLine($"Package: {PACKAGE_DIR}"); + Console.WriteLine($"Package Test: {PACKAGE_TEST_DIR}"); + Console.WriteLine($"Package Results: {PACKAGE_RESULT_DIR}"); + Console.WriteLine($"Extensions: {EXTENSIONS_DIR}"); + Console.WriteLine(); + Console.WriteLine("Solution and Projects"); + Console.WriteLine($" Solution: {SOLUTION_FILE}"); + Console.WriteLine($" NetFx Runner: {NETFX_CONSOLE_PROJECT}"); + Console.WriteLine($" Bin Dir: {NetFxConsoleBinDir}"); + Console.WriteLine($" NetCore Runner: {NETCORE_CONSOLE_PROJECT}"); + Console.WriteLine($" Bin Dir: {NetCoreConsoleBinDir}"); + } + + private string GetApiKey(string name, string fallback=null) + { + var apikey = _context.EnvironmentVariable(name); + + if (string.IsNullOrEmpty(apikey) && fallback != null) + apikey = _context.EnvironmentVariable(fallback); + + return apikey; + } + + private void ShowApiKeyAvailability(string apikey) + { + if (string.IsNullOrEmpty(apikey)) + Console.WriteLine(" API Key: NOT Available"); + else + Console.WriteLine(" API Key: Available"); + } +} diff --git a/cake/constants.cake b/cake/constants.cake index fdd2aa620..47e123ed5 100644 --- a/cake/constants.cake +++ b/cake/constants.cake @@ -2,94 +2,53 @@ // RUNTIME CONSTANTS AND VARIABLES USED AS CONSTANTS ////////////////////////////////////////////////////////////////////// -// Values are static so they may be used in property initialization and in -// classes. Initialization is separate for any that depend upon PROJECT_DIR +// Values are const or static so they may be used in property initialization +// and in classes. Initialization is separate for any that depend upon PROJECT_DIR // or Configuration being initialized before them. +// We build two console runners. If version of either is upgraded, change it here +const string NETFX_CONSOLE_TARGET = "net462"; +const string NETCORE_CONSOLE_TARGET = "net6.0"; + // Directories +// NOTE: All paths use '/' as a separator because some usage requires it and +// most usage allows it. In a few cases, like installing an msi, we adjust the +// path at the point of usage to use the correct separator for the operating system. static string PROJECT_DIR; PROJECT_DIR = Context.Environment.WorkingDirectory.FullPath + "/"; static string PACKAGE_DIR; PACKAGE_DIR = Argument("artifact-dir", PROJECT_DIR + "package") + "/"; static string PACKAGE_TEST_DIR; PACKAGE_TEST_DIR = PACKAGE_DIR + "tests/"; static string PACKAGE_RESULT_DIR; PACKAGE_RESULT_DIR = PACKAGE_DIR + "results/"; -static string NUGET_DIR; NUGET_DIR = PROJECT_DIR + "nuget/"; -static string CHOCO_DIR; CHOCO_DIR = PROJECT_DIR + "choco/"; -static string MSI_DIR; MSI_DIR = PROJECT_DIR + "msi/"; -static string ZIP_DIR; ZIP_DIR = PROJECT_DIR + "zip/"; -static string TOOLS_DIR; TOOLS_DIR = PROJECT_DIR + "tools/"; -static string IMAGE_DIR; IMAGE_DIR = PROJECT_DIR + "images/"; -static string MSI_IMG_DIR; MSI_IMG_DIR = IMAGE_DIR + "msi/"; -static string ZIP_IMG_DIR; ZIP_IMG_DIR = IMAGE_DIR + "zip/"; -static string SOURCE_DIR; SOURCE_DIR = PROJECT_DIR + "src/"; static string EXTENSIONS_DIR; EXTENSIONS_DIR = PROJECT_DIR + "bundled-extensions"; // Solution and Projects -static string SOLUTION_FILE; SOLUTION_FILE = PROJECT_DIR + "NUnitConsole.sln"; -static string NETFX_CONSOLE_PROJECT; NETFX_CONSOLE_PROJECT = SOURCE_DIR + "NUnitConsole/nunit4-console/nunit4-console.csproj"; -static string NETCORE_CONSOLE_PROJECT; NETCORE_CONSOLE_PROJECT = SOURCE_DIR + "NUnitConsole/nunit4-netcore-console/nunit4-netcore-console.csproj"; -static string ENGINE_PROJECT; ENGINE_PROJECT = SOURCE_DIR + "NUnitEngine/nunit.engine/nunit.engine.csproj"; -static string ENGINE_CORE_PROJECT; ENGINE_CORE_PROJECT = SOURCE_DIR + "NUnitEngine/nunit.engine.core/nunit.engine.core.csproj"; -static string ENGINE_API_PROJECT; ENGINE_API_PROJECT = SOURCE_DIR + "NUnitEngine/nunit.engine.api/nunit.engine.api.csproj"; -static string NET20_AGENT_PROJECT; NET20_AGENT_PROJECT = SOURCE_DIR + "NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20.csproj"; -static string NET20_AGENT_X86_PROJECT; NET20_AGENT_X86_PROJECT = SOURCE_DIR + "NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20-x86.csproj"; -static string NET462_AGENT_PROJECT; NET462_AGENT_PROJECT = SOURCE_DIR + "NUnitEngine/agents/nunit-agent-net462/nunit-agent-net462.csproj"; -static string NET462_AGENT_X86_PROJECT; NET462_AGENT_X86_PROJECT = SOURCE_DIR + "NUnitEngine/agents/nunit-agent-net462-x86/nunit-agent-net462-x86.csproj"; -static string NET50_AGENT_PROJECT; NET50_AGENT_PROJECT = SOURCE_DIR + "NUnitEngine/agents/nunit-agent-net50/nunit-agent-net50.csproj"; -static string NET60_AGENT_PROJECT; NET60_AGENT_PROJECT = SOURCE_DIR + "NUnitEngine/agents/nunit-agent-net60/nunit-agent-net60.csproj"; -static string NETCORE31_AGENT_PROJECT; NETCORE31_AGENT_PROJECT = SOURCE_DIR + "NUnitEngine/agents/nunit-agent-netcore31/nunit-agent-netcore31.csproj"; -static string CONSOLE_TESTS_PROJECT; CONSOLE_TESTS_PROJECT = SOURCE_DIR + "NUnitConsole/nunit4-console.tests/nunit4-console.tests.csproj"; -static string ENGINE_TESTS_PROJECT; ENGINE_TESTS_PROJECT = SOURCE_DIR + "NUnitEngine/nunit.engine.tests/nunit.engine.tests.csproj"; -static string ENGINE_CORE_TESTS_PROJECT; ENGINE_CORE_TESTS_PROJECT = SOURCE_DIR + "NUnitEngine/nunit.engine.core.tests/nunit.engine.core.tests.csproj"; -static string MOCK_ASSEMBLY_PROJECT; MOCK_ASSEMBLY_PROJECT = SOURCE_DIR + "NUnitEngine/mock-assembly/mock-assembly.csproj"; -static string MOCK_ASSEMBLY_X86_PROJECT; MOCK_ASSEMBLY_X86_PROJECT = SOURCE_DIR + "NUnitEngine/mock-assembly-x86/mock-assembly-x86.csproj"; -static string NOTEST_PROJECT; NOTEST_PROJECT = SOURCE_DIR + "NUnitEngine/notest-assembly/notest-assembly.csproj";// Console Runner - -// Bin directories for projects -static string NETFX_CONSOLE_PROJECT_BIN_DIR; NETFX_CONSOLE_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitConsole/nunit4-console/bin/{Configuration}/"; -static string NETCORE_CONSOLE_PROJECT_BIN_DIR; NETCORE_CONSOLE_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitConsole/nunit4-netcore-console/bin/{Configuration}/"; -static string ENGINE_PROJECT_BIN_DIR; ENGINE_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/nunit.engine/bin/{Configuration}/"; -static string ENGINE_CORE_PROJECT_BIN_DIR; ENGINE_CORE_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/nunit.engine.core/bin/{Configuration}/"; -static string ENGINE_API_PROJECT_BIN_DIR; ENGINE_API_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/nunit.engine.api/bin/{Configuration}/"; -static string NET20_AGENT_PROJECT_BIN_DIR; NET20_AGENT_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-net20/bin/{Configuration}/net20/"; -static string NET20_AGENT_X86_PROJECT_BIN_DIR; NET20_AGENT_X86_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-net20-x86/bin/{Configuration}/net20/"; -static string NET462_AGENT_PROJECT_BIN_DIR; NET462_AGENT_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-net462/bin/{Configuration}/net462/"; -static string NET462_AGENT_X86_PROJECT_BIN_DIR; NET462_AGENT_X86_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-net462-x86/bin/{Configuration}/net462/"; -static string NET50_AGENT_PROJECT_BIN_DIR; NET50_AGENT_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-net50/bin/{Configuration}/net5.0/"; -static string NET60_AGENT_PROJECT_BIN_DIR; NET60_AGENT_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-net60/bin/{Configuration}/net6.0/"; -static string NET70_AGENT_PROJECT_BIN_DIR; NET70_AGENT_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-net70/bin/{Configuration}/net7.0/"; -static string NETCORE31_AGENT_PROJECT_BIN_DIR; NETCORE31_AGENT_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/agents/nunit-agent-netcore31/bin/{Configuration}/netcoreapp3.1/"; - -static string CONSOLE_TESTS_PROJECT_BIN_DIR; CONSOLE_TESTS_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitConsole/nunit4-console.tests/bin/{Configuration}/"; -static string ENGINE_TESTS_PROJECT_BIN_DIR; ENGINE_TESTS_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/nunit.engine.tests/bin/{Configuration}/"; -static string ENGINE_CORE_TESTS_PROJECT_BIN_DIR; ENGINE_CORE_TESTS_PROJECT_BIN_DIR = SOURCE_DIR + $"NUnitEngine/nunit.engine.core/bin/{Configuration}/"; -static string MOCK_ASSEMBLY_PROJECT_BIN_DIR; MOCK_ASSEMBLY_PROJECT_BIN_DIR = SOURCE_DIR + $"TestData/mock-assembly/bin/{Configuration}/"; -static string MOCK_ASSEMBLY_X86_PROJECT_BIN_DIR; MOCK_ASSEMBLY_X86_PROJECT_BIN_DIR = SOURCE_DIR + $"TestData/mock-assembly-x86/bin/{Configuration}/"; -static string MOCK_ASSEMBLY_NUNIT4_PROJECT_BIN_DIR; MOCK_ASSEMBLY_NUNIT4_PROJECT_BIN_DIR = SOURCE_DIR + $"TestData/mock-assembly-nunit4/bin/{Configuration}/"; -static string NOTEST_ASSEMBLY_PROJECT_BIN_DIR; NOTEST_ASSEMBLY_PROJECT_BIN_DIR = SOURCE_DIR + $"TestData/notest-assembly/bin/{Configuration}/"; -static string WINDOWS_TEST_PROJECT_BIN_DIR; WINDOWS_TEST_PROJECT_BIN_DIR = SOURCE_DIR + $"TestData/windows-test/bin/{Configuration}/"; -static string ASP_NET_CORE_TEST_PROJECT_BIN_DIR; ASP_NET_CORE_TEST_PROJECT_BIN_DIR = SOURCE_DIR + $"TestData/aspnetcore-test/bin/{Configuration}/"; - -// We build two console runners. If version of either is upgraded, change it here -const string NETFX_CONSOLE_TARGET = "net462"; -const string NETCORE_CONSOLE_TARGET = "net6.0"; -static string[] ENGINE_TARGETS = new [] { "net462", "netstandard2.0", "netcoreapp3.1" }; -static string[] ENGINE_API_TARGETS = new [] { "net20", "netstandard2.0" }; - -// Console Runner -static string NETFX_CONSOLE_DIR; NETFX_CONSOLE_DIR = $"{NETFX_CONSOLE_PROJECT_BIN_DIR}{NETFX_CONSOLE_TARGET}/"; -static string NETFX_CONSOLE; NETFX_CONSOLE = NETFX_CONSOLE_DIR + "nunit4-console.exe"; -static string NETCORE_CONSOLE_DIR; NETCORE_CONSOLE_DIR = $"{NETCORE_CONSOLE_PROJECT_BIN_DIR}{NETCORE_CONSOLE_TARGET}/"; -static string NETCORE_CONSOLE; NETCORE_CONSOLE = NETCORE_CONSOLE_DIR + "nunit4-netcore-console.dll"; +static string SOLUTION_FILE; +SOLUTION_FILE = IsRunningOnWindows() + ? PROJECT_DIR + "NUnitConsole.sln" + : PROJECT_DIR + "NUnitConsole_Linux.sln"; +static string NETFX_CONSOLE_DIR; NETFX_CONSOLE_DIR = PROJECT_DIR + "src/NUnitConsole/nunit4-console/"; +static string NETFX_CONSOLE_PROJECT; NETFX_CONSOLE_PROJECT = NETFX_CONSOLE_DIR + "nunit4-console.csproj"; +static string NETCORE_CONSOLE_DIR; NETCORE_CONSOLE_DIR = PROJECT_DIR + "src/NUnitConsole/nunit4-netcore-console/"; +static string NETCORE_CONSOLE_PROJECT; NETCORE_CONSOLE_PROJECT = NETCORE_CONSOLE_DIR + "nunit4-netcore-console.csproj"; +static string CONSOLE_TESTS_PROJECT; CONSOLE_TESTS_PROJECT = PROJECT_DIR + "src/NUnitConsole/nunit4-console.tests/nunit4-console.tests.csproj"; -// Currently, the engine uses the same versions as the console runner but this may not always be true -const string NETFX_ENGINE_TARGET = NETFX_CONSOLE_TARGET; -const string NETCORE_ENGINE_TARGET = NETCORE_CONSOLE_TARGET; +static string ENGINE_PROJECT; ENGINE_PROJECT = PROJECT_DIR + "src/NUnitEngine/nunit.engine/nunit.engine.csproj"; +static string ENGINE_CORE_PROJECT; ENGINE_CORE_PROJECT = PROJECT_DIR + "src/NUnitEngine/nunit.engine.core/nunit.engine.core.csproj"; +static string ENGINE_API_PROJECT; ENGINE_API_PROJECT = PROJECT_DIR + "src/NUnitEngine/nunit.engine.api/nunit.engine.api.csproj"; +static string NET20_AGENT_PROJECT; NET20_AGENT_PROJECT = PROJECT_DIR + "src/NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20.csproj"; +static string NET20_AGENT_X86_PROJECT; NET20_AGENT_X86_PROJECT = PROJECT_DIR + "src/NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20-x86.csproj"; +static string NET462_AGENT_PROJECT; NET462_AGENT_PROJECT = PROJECT_DIR + "src/NUnitEngine/agents/nunit-agent-net462/nunit-agent-net462.csproj"; +static string NET462_AGENT_X86_PROJECT; NET462_AGENT_X86_PROJECT = PROJECT_DIR + "src/NUnitEngine/agents/nunit-agent-net462-x86/nunit-agent-net462-x86.csproj"; +static string NET50_AGENT_PROJECT; NET50_AGENT_PROJECT = PROJECT_DIR + "src/NUnitEngine/agents/nunit-agent-net50/nunit-agent-net50.csproj"; +static string NET60_AGENT_PROJECT; NET60_AGENT_PROJECT = PROJECT_DIR + "src/NUnitEngine/agents/nunit-agent-net60/nunit-agent-net60.csproj"; +static string NETCORE31_AGENT_PROJECT; NETCORE31_AGENT_PROJECT = PROJECT_DIR + "src/NUnitEngine/agents/nunit-agent-netcore31/nunit-agent-netcore31.csproj"; +static string ENGINE_TESTS_PROJECT; ENGINE_TESTS_PROJECT = PROJECT_DIR + "src/NUnitEngine/nunit.engine.tests/nunit.engine.tests.csproj"; +static string ENGINE_CORE_TESTS_PROJECT; ENGINE_CORE_TESTS_PROJECT = PROJECT_DIR + "src/NUnitEngine/nunit.engine.core.tests/nunit.engine.core.tests.csproj"; -// Unit Tests -const string NETFX_ENGINE_CORE_TESTS = "src/NUnitEngine/nunit.engine.core.tests/nunit.engine.core.tests.exe"; -const string NETCORE_ENGINE_CORE_TESTS = "nunit.engine.core.tests.dll"; -const string NETFX_ENGINE_TESTS = "nunit.engine.tests.exe"; -const string NETCORE_ENGINE_TESTS = "nunit.engine.tests.dll"; -const string CONSOLE_TESTS = "nunit4-console.tests.dll"; +static string MOCK_ASSEMBLY_PROJECT; MOCK_ASSEMBLY_PROJECT = PROJECT_DIR + "src/TestData/mock-assembly/mock-assembly.csproj"; +static string MOCK_ASSEMBLY_X86_PROJECT; MOCK_ASSEMBLY_X86_PROJECT = PROJECT_DIR + "src/TestData/mock-assembly-x86/mock-assembly-x86.csproj"; +static string NOTEST_PROJECT; NOTEST_PROJECT = PROJECT_DIR + "src/TestData/notest-assembly/notest-assembly.csproj";// Console Runner +static string WINDOWS_FORMS_TEST_PROJECT; WINDOWS_FORMS_TEST_PROJECT = PROJECT_DIR + "src/TestData/windows-test/windows-test.csproj"; +static string ASP_NET_CORE_TEST_PROJECT; ASP_NET_CORE_TEST_PROJECT = PROJECT_DIR + "src/TestData/aspnetcore-test/aspnetcore-test.csproj"; // Package sources for nuget restore var PACKAGE_SOURCE = new string[] @@ -112,9 +71,12 @@ private const string NUGET_PUSH_URL = "https://api.nuget.org/v3/index.json"; private const string CHOCO_PUSH_URL = "https://push.chocolatey.org/"; // Environment Variable names holding API keys -private const string MYGET_API_KEY = "MYGET_API_KEY"; -private const string NUGET_API_KEY = "NUGET_API_KEY"; -private const string CHOCO_API_KEY = "CHOCO_API_KEY"; +private const string MYGET_API_KEY = "NUNIT_MYGET_API_KEY"; +private const string NUGET_API_KEY = "NUNIT_NUGET_API_KEY"; +private const string CHOCO_API_KEY = "NUNIT_CHOCO_API_KEY"; +private const string FALLBACK_MYGET_API_KEY = "MYGET_API_KEY"; +private const string FALLBACK_NUGET_API_KEY = "NUGET_API_KEY"; +private const string FALLBACK_CHOCO_API_KEY = "CHOCO_API_KEY"; // GitHub Information private const string GITHUB_OWNER = "nunit"; diff --git a/cake/package-checks.cake b/cake/package-checks.cake index 186462fd3..9edcced1c 100644 --- a/cake/package-checks.cake +++ b/cake/package-checks.cake @@ -178,10 +178,10 @@ public class DirectoryCheck : PackageCheck } } -private FileCheck HasFile(string file) => HasFiles(new [] { file }); -private FileCheck HasFiles(params string[] files) => new FileCheck(files); +private static FileCheck HasFile(string file) => HasFiles(new [] { file }); +private static FileCheck HasFiles(params string[] files) => new FileCheck(files); -private DirectoryCheck HasDirectory(string dir) => new DirectoryCheck(dir); +private static DirectoryCheck HasDirectory(string dir) => new DirectoryCheck(dir); private static void WriteError(string msg) { diff --git a/cake/package-definitions.cake b/cake/package-definitions.cake index b62a503df..c90f41732 100644 --- a/cake/package-definitions.cake +++ b/cake/package-definitions.cake @@ -1,486 +1,177 @@ ////////////////////////////////////////////////////////////////////// -// INDIVIDUAL PACKAGE DEFINITIONS +// PACKAGE DEFINITION ABSTRACT CLASS ////////////////////////////////////////////////////////////////////// -PackageDefinition NUnitConsoleNuGetPackage; -PackageDefinition NUnitConsoleRunnerNuGetPackage; -PackageDefinition NUnitNetCoreConsoleRunnerPackage; -PackageDefinition NUnitEnginePackage; -PackageDefinition NUnitEngineApiPackage; -PackageDefinition NUnitConsoleRunnerChocolateyPackage; -PackageDefinition NUnitConsoleMsiPackage; -PackageDefinition NUnitConsoleZipPackage; - -public void InitializePackageDefinitions(ICakeContext context) +/// +/// The abstract base of all packages +/// +public abstract class PackageDefinition { - const string DOTNET_EXE_X86 = @"C:\Program Files (x86)\dotnet\dotnet.exe"; - bool dotnetX86Available = IsRunningOnWindows() && System.IO.File.Exists(DOTNET_EXE_X86); + protected BuildSettings _settings; + protected ICakeContext _context; - // Tests run for all runner packages except NETCORE runner - var StandardRunnerTests = new List - { - // Single assemblies - Net35Test, - Net462Test, - NetCore21Test, - NetCore31Test, - Net50Test, - Net60Test, - Net70Test, - // X86 Tests - Net35X86Test, - Net462X86Test, - // Special Test Situations - Net60WindowsFormsTest, - Net60AspNetCoreTest, - // Multiple Assemblies - Net35PlusNet462Test, - Net50PlusNet60Test, - Net462PlusNet60Test, - // NUnit4 Tests - Net462NUnit4Test, - NetCore31NUnit4Test, - Net50NUnit4Test, - Net60NUnit4Test, - }; - - if (dotnetX86Available && !BuildSystem.IsRunningOnAppVeyor) + /// + /// Construct without arguments - derived class must set properties + /// + protected PackageDefinition(BuildSettings settings) { - StandardRunnerTests.Add(NetCore21X86Test); - StandardRunnerTests.Add(NetCore31X86Test); + _settings = settings; + _context = settings.Context; + PackageVersion = settings.ProductVersion; } - // Tests run for the NETCORE runner package - var NetCoreRunnerTests = new List + public string PackageId { get; protected set; } + public string PackageVersion { get; protected set; } + public string PackageSource { get; protected set; } + public string BasePath { get; protected set; } + public string TestExecutable { get; protected set; } + public PackageCheck[] PackageChecks { get; protected set; } + public PackageCheck[] SymbolChecks { get; protected set; } + public IEnumerable PackageTests { get; protected set; } + public bool HasTests => PackageTests != null; + public bool HasChecks => PackageChecks != null; + public bool HasSymbols => SymbolChecks != null; + public virtual string SymbolPackageName => throw new System.NotImplementedException($"Symbols are not available for this type of package."); + + public abstract string PackageFileName { get; } + public abstract string InstallDirectory { get; } + public abstract string ResultDirectory { get; } + + protected abstract void doBuildPackage(); + protected abstract void doInstallPackage(); + + public void BuildVerifyAndTest() { - // Single assemblies - NetCore21Test, - NetCore31Test, - Net50Test, - Net60Test, - // Special test situation - Net60AspNetCoreTest, - // Multiple assemblies - Net50PlusNet60Test, - // NUnit4 Tests - NetCore31NUnit4Test, - Net50NUnit4Test, - Net60NUnit4Test, - }; - - if (IsRunningOnWindows()) - NetCoreRunnerTests.Add(Net60WindowsFormsTest); - - AllPackages.AddRange(new PackageDefinition[] { - - NUnitConsoleNuGetPackage = new NuGetPackage( - context: context, - id: "NUnit.Console", - version: ProductVersion, - source: NUGET_DIR + "runners/nunit.console-runner-with-extensions.nuspec", - basepath: PROJECT_DIR, - checks: new PackageCheck[] { HasFile("LICENSE.txt") }), - - NUnitConsoleRunnerNuGetPackage = new NuGetPackage( - context: context, - id: "NUnit.ConsoleRunner", - version: ProductVersion, - source: NUGET_DIR + "runners/nunit.console-runner.nuspec", - basepath: NETFX_CONSOLE_DIR, - checks: new PackageCheck[] { - HasFiles("LICENSE.txt", "NOTICES.txt"), - HasDirectory("tools") - .WithFiles( - "nunit4-console.exe", "nunit4-console.exe.config", "nunit.console.nuget.addins", - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("tools/agents/nunit-agent-net20") - .WithFiles( - "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", - "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("tools/agents/nunit-agent-net462") - .WithFiles( - "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", - "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("tools/agents/nunit-agent-netcore31") - .WithFiles( - "nunit-agent-netcore31.dll", "nunit.engine.core.dll", - "nunit.engine.api.dll", "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("tools/agents/nunit-agent-net50") - .WithFiles( - "nunit-agent-net50.dll", "nunit.engine.core.dll", - "nunit.engine.api.dll", "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("tools/agents/nunit-agent-net60") - .WithFiles( - "nunit-agent-net60.dll", "nunit.engine.core.dll", - "nunit.engine.api.dll", "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("tools/agents/nunit-agent-net70") - .WithFiles("nunit-agent-net70.dll", "nunit.engine.core.dll", - "nunit.engine.api.dll", "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll") - }, - symbols: new PackageCheck[] { - HasDirectory("tools") - .WithFiles("nunit4-console.pdb", "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("tools/agents/nunit-agent-net20").WithFiles( - "nunit-agent-net20.pdb", "nunit-agent-net20-x86.pdb", - "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("tools/agents/nunit-agent-net462").WithFiles( - "nunit-agent-net462.pdb", "nunit-agent-net462-x86.pdb", - "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("tools/agents/nunit-agent-netcore31").WithFiles( - "nunit-agent-netcore31.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("tools/agents/nunit-agent-net50").WithFiles( - "nunit-agent-net50.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("tools/agents/nunit-agent-net60").WithFiles( - "nunit-agent-net60.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("tools/agents/nunit-agent-net70").WithFiles( - "nunit-agent-net70.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb") - }, - executable: "tools/nunit4-console.exe", - tests: StandardRunnerTests), - - NUnitNetCoreConsoleRunnerPackage = new NuGetPackage( - context: context, - id: "NUnit.ConsoleRunner.NetCore", - version: ProductVersion, - source: NUGET_DIR + "runners/nunit.console-runner.netcore.nuspec", - basepath: NETCORE_CONSOLE_DIR, - checks: new PackageCheck[] { - HasFiles("LICENSE.txt", "NOTICES.txt"), - HasDirectory("tools/net6.0/any") - .WithFiles( - "nunit4-netcore-console.exe", "nunit4-netcore-console.dll", "nunit4-netcore-console.dll.config", "nunit.console.nuget.addins", - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll") - }, - symbols: new PackageCheck[] { - HasDirectory("tools/net6.0/any"). - WithFiles( - "nunit4-netcore-console.pdb", "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb") - }, - executable: "tools/net6.0/any/nunit4-netcore-console.exe", - tests: NetCoreRunnerTests), - - NUnitConsoleRunnerChocolateyPackage = new ChocolateyPackage( - context: context, - id: "nunit-console-runner", - version: ProductVersion, - source: CHOCO_DIR + "nunit-console-runner.nuspec", - basepath: NETFX_CONSOLE_DIR, - checks: new PackageCheck[] { - HasDirectory("tools") - .WithFiles( - "LICENSE.txt", "NOTICES.txt", "VERIFICATION.txt", - "nunit4-console.exe", "nunit4-console.exe.config", "nunit.choco.addins", - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("tools/agents/nunit-agent-net20") - .WithFiles( - "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", - "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("tools/agents/nunit-agent-net462") - .WithFiles( - "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", - "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("tools/agents/nunit-agent-netcore31") - .WithFiles( - "nunit-agent-netcore31.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("tools/agents/nunit-agent-net50") - .WithFiles( - "nunit-agent-net50.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("tools/agents/nunit-agent-net60") - .WithFiles( - "nunit-agent-net60.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("tools/agents/nunit-agent-net70") - .WithFiles( - "nunit-agent-net70.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll") - }, - executable: "tools/nunit4-console.exe", - tests: StandardRunnerTests), - - NUnitConsoleMsiPackage = new MsiPackage( - context: context, - id: "NUnit.Console", - version: SemVer, - source: MSI_DIR + "nunit/nunit.wixproj", - basepath: NETFX_CONSOLE_DIR, - checks: new PackageCheck[] { - HasDirectory("NUnit.org").WithFiles("LICENSE.txt", "NOTICES.txt", "nunit.ico"), - HasDirectory("NUnit.org/nunit-console") - .WithFiles( - "nunit4-console.exe", "nunit4-console.exe.config", "nunit.bundle.addins", - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("Nunit.org/nunit-console/addins") - .WithFile("nunit-project-loader.dll"), - HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net20") - .WithFiles( - "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", - "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net462") - .WithFiles( - "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", - "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-netcore31") - .WithFiles( - "nunit-agent-netcore31.dll", "nunit-agent-netcore31.dll.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net50") - .WithFiles( - "nunit-agent-net50.dll", "nunit-agent-net50.dll.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net60") - .WithFiles( - "nunit-agent-net60.dll", "nunit-agent-net60.dll.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "Microsoft.Extensions.DependencyModel.dll"), - HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net70") - .WithFiles( - "nunit-agent-net70.dll", "nunit-agent-net70.dll.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "Microsoft.Extensions.DependencyModel.dll") - }, - executable: "NUnit.org/nunit-console/nunit4-console.exe", - tests: StandardRunnerTests.Concat(new[] { NUnitProjectTest })), - - NUnitConsoleZipPackage = new ZipPackage( - context: context, - id: "NUnit.Console", - version: ProductVersion, - source: ZIP_IMG_DIR, - basepath: ZIP_IMG_DIR, - checks: new PackageCheck[] { - HasFiles("LICENSE.txt", "NOTICES.txt", "CHANGES.txt"), - HasDirectory("bin") - .WithFiles( - "nunit4-console.exe", "nunit4-console.exe.config", "nunit4-console.pdb", - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("bin/agents/nunit-agent-net20") - .WithFiles( - "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", - "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "nunit-agent-net20.pdb", "nunit-agent-net20-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("bin/agents/nunit-agent-net462") - .WithFiles( - "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", - "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "nunit-agent-net462.pdb", "nunit-agent-net462-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("bin/agents/nunit-agent-netcore31") - .WithFiles( - "nunit-agent-netcore31.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll", - "nunit-agent-netcore31.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("bin/agents/nunit-agent-net50") - .WithFiles( - "nunit-agent-net50.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll", - "nunit-agent-net50.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("bin/agents/nunit-agent-net60") - .WithFiles( - "nunit-agent-net60.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll", - "nunit-agent-net60.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("bin/agents/nunit-agent-net70") - .WithFiles( - "nunit-agent-net70.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll", - "nunit-agent-net70.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb") - }, - executable: $"bin/nunit4-console.exe", - tests: StandardRunnerTests.Concat(new[] { NUnitProjectTest })), - - // NOTE: Packages below this point have no direct tests - - NUnitEnginePackage = new NuGetPackage( - context: context, - id: "NUnit.Engine", - version: ProductVersion, - source: NUGET_DIR + "engine/nunit.engine.nuspec", - basepath: ENGINE_PROJECT_BIN_DIR, - checks: new PackageCheck[] { - HasFiles("LICENSE.txt", "NOTICES.txt"), - HasDirectory("lib/net462") - .WithFiles( - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "nunit.engine.nuget.addins"), - HasDirectory("lib/netstandard2.0") - .WithFiles( - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "nunit.engine.nuget.addins"), - HasDirectory("lib/netcoreapp3.1") - .WithFiles( - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll", - "nunit.engine.nuget.addins"), - HasDirectory("agents/net20") - .WithFiles( - "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", - "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("agents/net462") - .WithFiles( - "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", - "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), - HasDirectory("agents/netcoreapp3.1") - .WithFiles( - "nunit-agent-netcore31.dll", "nunit-agent-netcore31.dll.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", - "testcentric.engine.metadata.dll", "Microsoft.Extensions.DependencyModel.dll"), - }, - symbols: new PackageCheck[] { - HasDirectory("lib/net462") - .WithFiles("nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("lib/netstandard2.0") - .WithFiles("nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("lib/netcoreapp3.1") - .WithFiles("nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("agents/net20") - .WithFiles( - "nunit-agent-net20.pdb", "nunit-agent-net20-x86.pdb", - "nunit.engine.core.pdb", "nunit.engine.api.pdb"), - HasDirectory("agents/net462") - .WithFiles( - "nunit-agent-net462.pdb", "nunit-agent-net462-x86.pdb", - "nunit.engine.core.pdb", "nunit.engine.api.pdb") - }), - - NUnitEngineApiPackage = new NuGetPackage( - context: context, - id: "NUnit.Engine.Api", - version: ProductVersion, - source: NUGET_DIR + "engine/nunit.engine.api.nuspec", - basepath: ENGINE_API_PROJECT_BIN_DIR, - checks: new PackageCheck[] { - HasFile("LICENSE.txt"), - HasDirectory("lib/net20").WithFile("nunit.engine.api.dll"), - HasDirectory("lib/netstandard2.0").WithFile("nunit.engine.api.dll"), - }, - symbols: new PackageCheck[] { - HasDirectory("lib/net20").WithFile("nunit.engine.api.pdb"), - HasDirectory("lib/netstandard2.0").WithFile("nunit.engine.api.pdb") - }) - }); -} + _context.EnsureDirectoryExists(PACKAGE_DIR); -////////////////////////////////////////////////////////////////////// -// LIST OF ALL PACKAGES -////////////////////////////////////////////////////////////////////// + BuildPackage(); + InstallPackage(); -var AllPackages = new List(); + if (HasChecks) + VerifyPackage(); -////////////////////////////////////////////////////////////////////// -// PACKAGE DEFINITION IMPLEMENTATION -////////////////////////////////////////////////////////////////////// + if (HasSymbols) + VerifySymbolPackage(); -public enum PackageType -{ - NuGet, - Chocolatey, - Msi, - Zip -} + if (HasTests) + TestPackage(); + } -/// -/// -/// -public abstract class PackageDefinition -{ - protected ICakeContext _context; + public void BuildPackage() + { + DisplayAction("Building"); + doBuildPackage(); + } - /// - /// - /// - /// A PackageType value specifying one of the four known package types - /// A string containing the package ID, used as the root of the PackageName - /// A string representing the package version, used as part of the PackageName - /// A string representing the source used to create the package, e.g. a nuspec file - /// A string containing the path to the executable used in running tests. If relative, the path is contained within the package itself. - /// An array of PackageChecks be made on the content of the package. Optional. - /// An array of PackageChecks to be made on the symbol package, if one is created. Optional. Only supported for nuget packages. - /// An array of PackageTests to be run against the package. Optional. - protected PackageDefinition( - ICakeContext context, - PackageType packageType, - string id, - string version, - string source, - string basepath, - string executable = null, - PackageCheck[] checks = null, - PackageCheck[] symbols = null, - IEnumerable tests = null) + public void InstallPackage() { - if (executable == null && tests != null) - throw new System.ArgumentException($"Unable to create {packageType} package {id}: Executable must be provided if there are tests", nameof(executable)); - - _context = context; - - PackageType = packageType; - PackageId = id; - PackageVersion = version; - PackageSource = source; - BasePath = basepath; - TestExecutable = executable; - PackageChecks = checks; - PackageTests = tests; - SymbolChecks = symbols; + DisplayAction("Installing"); + Console.WriteLine($"Installing package to {InstallDirectory}"); + _context.CleanDirectory(InstallDirectory); + doInstallPackage(); } - public PackageType PackageType { get; } - public string PackageId { get; } - public string PackageVersion { get; } - public string PackageSource { get; } - public string BasePath { get; } - public string TestExecutable { get; } - public PackageCheck[] PackageChecks { get; } - public PackageCheck[] SymbolChecks { get; protected set; } - public IEnumerable PackageTests { get; } + public void VerifyPackage() + { + DisplayAction("Verifying"); + + bool allOK = true; + foreach (var check in PackageChecks) + allOK &= check.Apply(InstallDirectory); + + if (allOK) + WriteInfo("All checks passed!"); + else + throw new Exception("Verification failed!"); + } + + public void TestPackage() + { + DisplayAction("Testing"); + + var reporter = new ResultReporter(PackageFileName); - public abstract string PackageName { get; } - public abstract void BuildPackage(); + _context.CleanDirectory(ResultDirectory); - public bool HasSymbols { get; protected set; } = false; - public virtual string SymbolPackageName => throw new System.NotImplementedException($"Symbols are not available for {PackageType} packages."); + foreach (var packageTest in PackageTests) + { + var testResultDir = ResultDirectory + packageTest.Name + "/"; + var resultFile = testResultDir + "TestResult.xml"; + + DisplayBanner(packageTest.Description); + + Console.WriteLine($"Running {InstallDirectory + TestExecutable}"); + + int rc = TestExecutable.EndsWith(".dll") + ? _context.StartProcess( + "dotnet", + new ProcessSettings() + { + Arguments = $"\"{InstallDirectory}{TestExecutable}\" {packageTest.Arguments} --work={testResultDir}", + }) + : _context.StartProcess( + InstallDirectory + TestExecutable, + new ProcessSettings() + { + Arguments = $"{packageTest.Arguments} --work={testResultDir}", + }); + + try + { + var result = new ActualResult(resultFile); + var report = new TestReport(packageTest, result); + reporter.AddReport(report); + + Console.WriteLine(report.Errors.Count == 0 + ? "\nSUCCESS: Test Result matches expected result!" + : "\nERROR: Test Result not as expected!"); + } + catch (Exception ex) + { + reporter.AddReport(new TestReport(packageTest, ex)); + + Console.WriteLine("\nERROR: No result found!"); + } + } + + bool hadErrors = reporter.ReportResults(); + Console.WriteLine(); + + if (hadErrors) + throw new Exception("One or more package tests had errors!"); + } + + public void DisplayAction(string action) + { + DisplayBanner($"{action} package {PackageFileName}"); + } + + public virtual void VerifySymbolPackage() { } // Overridden for NuGet packages } +////////////////////////////////////////////////////////////////////// +// NUGET PACKAGES +////////////////////////////////////////////////////////////////////// + // Users may only instantiate the derived classes, which avoids // exposing PackageType and makes it impossible to create a // PackageDefinition with an unknown package type. -public class NuGetPackage : PackageDefinition +public abstract class NuGetPackageDefinition : PackageDefinition { - public NuGetPackage(ICakeContext context, string id, string version, string source, string basepath, - string executable = null, PackageCheck[] checks = null, PackageCheck[] symbols = null, IEnumerable tests = null) - : base(context, PackageType.NuGet, id, version, source, basepath, executable: executable, checks: checks, symbols: symbols, tests: tests) - { - if (symbols != null) - { - HasSymbols = true; - SymbolChecks = symbols; - } - } + protected NuGetPackageDefinition(BuildSettings settings) : base(settings) { } - public override string PackageName => $"{PackageId}.{PackageVersion}.nupkg"; - public override string SymbolPackageName => System.IO.Path.ChangeExtension(PackageName, ".snupkg"); + public override string PackageFileName => $"{PackageId}.{PackageVersion}.nupkg"; + public override string SymbolPackageName => System.IO.Path.ChangeExtension(PackageFileName, ".snupkg"); + public override string InstallDirectory => PACKAGE_TEST_DIR + $"nuget/{PackageId}/"; + public override string ResultDirectory => PACKAGE_RESULT_DIR + $"nuget/{PackageId}/"; - public override void BuildPackage() + protected override void doBuildPackage() { var nugetPackSettings = new NuGetPackSettings() { Version = PackageVersion, - BasePath = BasePath, OutputDirectory = PACKAGE_DIR, + BasePath = BasePath, NoPackageAnalysis = true, Symbols = HasSymbols }; @@ -490,17 +181,218 @@ public class NuGetPackage : PackageDefinition _context.NuGetPack(PackageSource, nugetPackSettings); } + + protected override void doInstallPackage() + { + _context.NuGetInstall(PackageId, new NuGetInstallSettings + { + Source = new[] { PACKAGE_DIR }, + Prerelease = true, + OutputDirectory = PACKAGE_TEST_DIR + "nuget", + ExcludeVersion = true + }); + } +} + +public class NUnitConsoleNuGetPackage : NuGetPackageDefinition +{ + public NUnitConsoleNuGetPackage(BuildSettings settings) : base(settings) + { + PackageId = "NUnit.Console"; + PackageSource = PROJECT_DIR + "nuget/runners/nunit.console-runner-with-extensions.nuspec"; + BasePath = PROJECT_DIR; + PackageChecks = new PackageCheck[] { HasFile("LICENSE.txt") }; + } + + + protected override void doInstallPackage() + { + // TODO: This has dependencies, which are only satisified + // after we are done building, so we just unzip it to verify. + _context.Unzip(PACKAGE_DIR + PackageFileName, InstallDirectory); + } +} + +public class NUnitConsoleRunnerNuGetPackage : NuGetPackageDefinition +{ + public NUnitConsoleRunnerNuGetPackage(BuildSettings settings) : base(settings) + { + PackageId = "NUnit.ConsoleRunner"; + PackageSource = PROJECT_DIR + "nuget/runners/nunit.console-runner.nuspec"; + BasePath = settings.NetFxConsoleBinDir; + PackageChecks = new PackageCheck[] { + HasFiles("LICENSE.txt", "NOTICES.txt"), + HasDirectory("tools").WithFiles( + "nunit4-console.exe", "nunit4-console.exe.config", + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", + "testcentric.engine.metadata.dll", "nunit.console.nuget.addins"), + HasDirectory("tools/agents/nunit-agent-net20").WithFiles( + "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", + "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("tools/agents/nunit-agent-net462").WithFiles( + "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", + "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("tools/agents/nunit-agent-netcore31").WithFiles( + "nunit-agent-netcore31.dll", "nunit-agent-netcore31.dll.config", "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("tools/agents/nunit-agent-net50").WithFiles( + "nunit-agent-net50.dll", "nunit-agent-net50.dll.config", "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("tools/agents/nunit-agent-net60").WithFiles( + "nunit-agent-net60.dll", "nunit-agent-net60.dll.config", "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("tools/agents/nunit-agent-net70").WithFiles( + "nunit-agent-net70.dll", "nunit-agent-net70.dll.config", "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + }; + SymbolChecks = new PackageCheck[] { + HasDirectory("tools").WithFiles( + "nunit4-console.pdb", "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("tools/agents/net20").WithFiles( + "nunit-agent.pdb", "nunit-agent-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("tools/agents/net462").WithFiles( + "nunit-agent.pdb", "nunit-agent-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("tools/agents/netcoreapp3.1").WithFiles( + "nunit-agent.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("tools/agents/net5.0").WithFiles( + "nunit-agent.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("tools/agents/net6.0").WithFiles( + "nunit-agent.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("tools/agents/net7.0").WithFiles( + "nunit-agent.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb") + }; + TestExecutable = "tools/nunit4-console.exe"; + PackageTests = settings.StandardRunnerTests; + } +} + +public class NUnitNetCoreConsoleRunnerPackage : NuGetPackageDefinition +{ + public NUnitNetCoreConsoleRunnerPackage(BuildSettings settings) : base(settings) + { + PackageId = "NUnit.ConsoleRunner.NetCore"; + PackageSource = NETCORE_CONSOLE_PROJECT; + BasePath = settings.NetCoreConsoleBinDir; + PackageChecks = new PackageCheck[] { + HasDirectory("content").WithFiles("LICENSE.txt", "NOTICES.txt"), + HasDirectory($"tools/{NETCORE_CONSOLE_TARGET}/any").WithFiles( + "nunit4-netcore-console.dll", "nunit4-netcore-console.dll.config", + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", + "testcentric.engine.metadata.dll")}; + SymbolChecks = new PackageCheck[] { + HasDirectory($"tools/{NETCORE_CONSOLE_TARGET}/any").WithFiles( + "nunit4-netcore-console.pdb", + "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb", + "testcentric.engine.metadata.pdb")}; + TestExecutable = $"tools/{NETCORE_CONSOLE_TARGET}/any/nunit4-netcore-console.dll"; + PackageTests = settings.NetCoreRunnerTests; + } + + // Build package from project file + protected override void doBuildPackage() + { + var settings = new DotNetPackSettings() + { + Configuration = _settings.Configuration, + OutputDirectory = PACKAGE_DIR, + IncludeSymbols = HasSymbols, + ArgumentCustomization = args => args.Append($"/p:Version={PackageVersion}") + }; + + if (HasSymbols) + settings.SymbolPackageFormat = "snupkg"; + + _context.DotNetPack(PackageSource, settings); + } + + protected override void doInstallPackage() + { + // TODO: We can't use NuGet to install this package because + // it's a CLI tool package. For now, just unzip it. + _context.Unzip(PACKAGE_DIR + PackageFileName, InstallDirectory); + } +} + +public class NUnitEngineNuGetPackage : NuGetPackageDefinition +{ + public NUnitEngineNuGetPackage(BuildSettings settings) : base(settings) + { + PackageId = "NUnit.Engine"; + PackageSource = PROJECT_DIR + "nuget/engine/nunit.engine.nuspec"; + BasePath = PROJECT_DIR + $"src/NUnitEngine/nunit.engine/bin/{settings.Configuration}/"; + PackageChecks = new PackageCheck[] { + HasFiles("LICENSE.txt", "NOTICES.txt"), + HasDirectory("lib/net462").WithFiles( + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", + "testcentric.engine.metadata.dll", "nunit.engine.nuget.addins"), + HasDirectory("lib/netstandard2.0").WithFiles( + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", + "testcentric.engine.metadata.dll", "nunit.engine.nuget.addins"), + HasDirectory("lib/netcoreapp3.1").WithFiles( + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", + "testcentric.engine.metadata.dll", "nunit.engine.nuget.addins"), + HasDirectory("agents/nunit-agent-net20").WithFiles( + "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", + "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("agents/nunit-agent-net462").WithFiles( + "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", + "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("agents/nunit-agent-netcore31").WithFiles( + "nunit-agent-netcore31.dll", "nunit-agent-netcore31.dll.config", "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + }; + SymbolChecks = new PackageCheck[] { + HasDirectory("lib/net462").WithFiles( + "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("lib/netstandard2.0").WithFiles( + "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("lib/netcoreapp3.1").WithFiles( + "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("agents/net20").WithFiles( + "nunit-agent.pdb", "nunit-agent-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("agents/net462").WithFiles( + "nunit-agent.pdb", "nunit-agent-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("agents/netcoreapp3.1").WithFiles("nunit-agent.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb") + }; + } } -public class ChocolateyPackage : PackageDefinition +public class NUnitEngineApiNuGetPackage : NuGetPackageDefinition +{ + public NUnitEngineApiNuGetPackage(BuildSettings settings) : base(settings) + { + PackageId = "NUnit.Engine.Api"; + PackageSource = PROJECT_DIR + "nuget/engine/nunit.engine.api.nuspec"; + BasePath = PROJECT_DIR + $"src/NUnitEngine/nunit.engine.api/bin/{settings.Configuration}/"; + PackageChecks = new PackageCheck[] { + HasFile("LICENSE.txt"), + HasDirectory("lib/net20").WithFile("nunit.engine.api.dll"), + HasDirectory("lib/netstandard2.0").WithFile("nunit.engine.api.dll"), + }; + SymbolChecks = new PackageCheck[] { + HasDirectory("lib/net20").WithFile("nunit.engine.api.pdb"), + HasDirectory("lib/netstandard2.0").WithFile("nunit.engine.api.pdb") + }; + } +} + +////////////////////////////////////////////////////////////////////// +// CHOCOLATEY PACKAGE +////////////////////////////////////////////////////////////////////// + +public abstract class ChocolateyPackageDefinition : PackageDefinition { - public ChocolateyPackage(ICakeContext context, string id, string version, string source, string basepath, - string executable = null, PackageCheck[] checks = null, IEnumerable tests = null) - : base(context, PackageType.Chocolatey, id, version, source, basepath, executable: executable, checks: checks, tests: tests) { } + protected ChocolateyPackageDefinition(BuildSettings settings) : base(settings) { } - public override string PackageName => $"{PackageId}.{PackageVersion}.nupkg"; + public override string PackageFileName => $"{PackageId}.{PackageVersion}.nupkg"; + public override string InstallDirectory => PACKAGE_TEST_DIR + $"choco/{PackageId}/"; + public override string ResultDirectory => PACKAGE_RESULT_DIR + $"choco/{PackageId}/"; - public override void BuildPackage() + protected override void doBuildPackage() { _context.ChocolateyPack(PackageSource, new ChocolateyPackSettings() @@ -510,21 +402,68 @@ public class ChocolateyPackage : PackageDefinition ArgumentCustomization = args => args.Append($"BASE={BasePath}") }); } + + protected override void doInstallPackage() + { + // TODO: We can't run chocolatey install effectively + // so for now we just unzip the package. + _context.Unzip(PACKAGE_DIR + PackageFileName, InstallDirectory); + } } -public class MsiPackage : PackageDefinition +public class NUnitConsoleRunnerChocolateyPackage : ChocolateyPackageDefinition { - public MsiPackage(ICakeContext context, string id, string version, string source, string basepath, - string executable = null, PackageCheck[] checks = null, IEnumerable tests = null) - : base(context, PackageType.Msi, id, version, source, basepath, executable: executable, checks: checks, tests: tests) { } + public NUnitConsoleRunnerChocolateyPackage(BuildSettings settings) : base(settings) + { + PackageId = "nunit-console-runner"; + PackageSource = PROJECT_DIR + "choco/nunit-console-runner.nuspec"; + BasePath = settings.NetFxConsoleBinDir; + PackageChecks = new PackageCheck[] { + HasDirectory("tools").WithFiles( + "LICENSE.txt", "NOTICES.txt", "VERIFICATION.txt", "nunit.choco.addins", + "nunit4-console.exe", "nunit4-console.exe.config", + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"), + HasDirectory("tools/agents/nunit-agent-net20").WithFiles( + "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", + "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config"), + HasDirectory("tools/agents/nunit-agent-net462").WithFiles( + "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", + "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config"), + HasDirectory("tools/agents/nunit-agent-netcore31").WithFiles( + "nunit-agent-netcore31.dll", "nunit-agent-netcore31.dll.config"), + HasDirectory("tools/agents/nunit-agent-net50").WithFiles( + "nunit-agent-net50.dll", "nunit-agent-net50.dll.config"), + HasDirectory("tools/agents/nunit-agent-net60").WithFiles( + "nunit-agent-net60.dll", "nunit-agent-net60.dll.config"), + HasDirectory("tools/agents/nunit-agent-net70").WithFiles( + "nunit-agent-net70.dll", "nunit-agent-net70.dll.config"), + }; + TestExecutable = "tools/nunit4-console.exe"; + PackageTests = settings.StandardRunnerTests; + } +} - public override string PackageName => $"{PackageId}-{PackageVersion}.msi"; +////////////////////////////////////////////////////////////////////// +// MSI PACKAGE +////////////////////////////////////////////////////////////////////// - public override void BuildPackage() +public abstract class MsiPackageDefinition : PackageDefinition +{ + protected MsiPackageDefinition(BuildSettings settings) : base(settings) + { + // Required version format for MSI + PackageVersion = settings.BuildVersion.SemVer; + } + + public override string PackageFileName => $"{PackageId}-{PackageVersion}.msi"; + public override string InstallDirectory => PACKAGE_TEST_DIR + $"msi/{PackageId}/"; + public override string ResultDirectory => PACKAGE_RESULT_DIR + $"msi/{PackageId}/"; + + protected override void doBuildPackage() { _context.MSBuild(PackageSource, new MSBuildSettings() .WithTarget("Rebuild") - .SetConfiguration(Configuration) + .SetConfiguration(_settings.Configuration) .WithProperty("Version", PackageVersion) .WithProperty("DisplayVersion", PackageVersion) .WithProperty("OutDir", PACKAGE_DIR) @@ -532,18 +471,129 @@ public class MsiPackage : PackageDefinition .SetMSBuildPlatform(MSBuildPlatform.x86) .SetNodeReuse(false)); } + + protected override void doInstallPackage() + { + // Msiexec does not tolerate forward slashes! + string testDir = PACKAGE_TEST_DIR.Replace('/', '\\') + "msi\\" + PackageId; + string packageUnderTest = PACKAGE_DIR.Replace('/', '\\') + PackageFileName; + + int rc = _context.StartProcess("msiexec", $"/a {packageUnderTest} TARGETDIR={testDir} /q"); + if (rc != 0) + Console.WriteLine($" ERROR: Installer returned {rc.ToString()}"); + } } -public class ZipPackage : PackageDefinition +public class NUnitConsoleMsiPackage : MsiPackageDefinition { - public ZipPackage(ICakeContext context, string id, string version, string source, string basepath, - string executable = null, PackageCheck[] checks = null, IEnumerable tests = null) - : base(context, PackageType.Zip, id, version, source, basepath, executable: executable, checks: checks, tests: tests) { } + public NUnitConsoleMsiPackage(BuildSettings settings) : base(settings) + { + PackageId = "NUnit.Console"; + PackageSource = PROJECT_DIR + "msi/nunit/nunit.wixproj"; + BasePath = settings.NetFxConsoleBinDir; + PackageVersion = settings.BuildVersion.SemVer; + PackageChecks = new PackageCheck[] { + HasDirectory("NUnit.org").WithFiles("LICENSE.txt", "NOTICES.txt", "nunit.ico"), + HasDirectory("NUnit.org/nunit-console").WithFiles( + "nunit4-console.exe", "nunit4-console.exe.config", + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", + "testcentric.engine.metadata.dll", "nunit.bundle.addins"), + HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net20").WithFiles( + "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", + "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config"), + HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net462").WithFiles( + "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", + "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config"), + HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-netcore31").WithFiles( + "nunit-agent-netcore31.dll", "nunit-agent-netcore31.dll.config"), + HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net50").WithFiles( + "nunit-agent-net50.dll", "nunit-agent-net50.dll.config"), + HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net60").WithFiles( + "nunit-agent-net60.dll", "nunit-agent-net60.dll.config"), + HasDirectory("NUnit.org/nunit-console/agents/nunit-agent-net70").WithFiles( + "nunit-agent-net70.dll", "nunit-agent-net70.dll.config"), + HasDirectory("Nunit.org/nunit-console/addins").WithFile("nunit-project-loader.dll") + }; + TestExecutable = "NUnit.org/nunit-console/nunit4-console.exe"; + PackageTests = settings.StandardRunnerTests.Concat(new[] { settings.NUnitProjectTest }); + } +} + +////////////////////////////////////////////////////////////////////// +// ZIP PACKAGE +////////////////////////////////////////////////////////////////////// + +public abstract class ZipPackageDefinition : PackageDefinition +{ + protected ZipPackageDefinition(BuildSettings settings) : base(settings) { } + + public override string PackageFileName => $"{PackageId}-{PackageVersion}.zip"; + public override string InstallDirectory => PACKAGE_TEST_DIR + $"zip/{PackageId}/"; + public override string ResultDirectory => PACKAGE_RESULT_DIR + $"zip/{PackageId}/"; - public override string PackageName => $"{PackageId}-{PackageVersion}.zip"; + protected abstract string ZipImageDirectory { get; } - public override void BuildPackage() + protected override void doBuildPackage() { - _context.Zip(ZIP_IMG_DIR, $"{PACKAGE_DIR}{PackageName}"); + _context.Zip(ZipImageDirectory, PACKAGE_DIR + PackageFileName); } + + protected override void doInstallPackage() + { + _context.Unzip(PACKAGE_DIR + PackageFileName, InstallDirectory); + } +} + +public class NUnitConsoleZipPackage : ZipPackageDefinition +{ + public NUnitConsoleZipPackage(BuildSettings settings) : base(settings) + { + PackageId = "NUnit.Console"; + PackageSource = ZipImageDirectory; + BasePath = ZipImageDirectory; + PackageChecks = new PackageCheck[] { + HasFiles("LICENSE.txt", "NOTICES.txt", "CHANGES.txt", "nunit.ico"), + HasDirectory("bin").WithFiles( + "nunit4-console.exe", "nunit4-console.exe.config", + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", + "testcentric.engine.metadata.dll", "nunit.bundle.addins", + "nunit4-console.pdb", "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("bin/agents/nunit-agent-net20").WithFiles( + "nunit-agent-net20.exe", "nunit-agent-net20.exe.config", + "nunit-agent-net20-x86.exe", "nunit-agent-net20-x86.exe.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", + "nunit-agent-net20.pdb", "nunit-agent-net20-x86.pdb", + "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("bin/agents/nunit-agent-net462").WithFiles( + "nunit-agent-net462.exe", "nunit-agent-net462.exe.config", + "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", + "nunit-agent-net462.pdb", "nunit-agent-net462-x86.pdb", + "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("bin/agents/nunit-agent-netcore31").WithFiles( + "nunit-agent-netcore31.dll", "nunit-agent-netcore31.dll.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", + "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("bin/agents/nunit-agent-net50").WithFiles( + "nunit-agent-net50.dll", "nunit-agent-net50.dll.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", + "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("bin/agents/nunit-agent-net60").WithFiles( + "nunit-agent-net60.dll", "nunit-agent-net60.dll.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", + "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.pdb", "nunit.engine.api.pdb"), + HasDirectory("bin/agents/nunit-agent-net70").WithFiles( + "nunit-agent-net70.dll", "nunit-agent-net70.dll.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", + "Microsoft.Extensions.DependencyModel.dll", + "nunit.engine.core.pdb", "nunit.engine.api.pdb"), +}; + TestExecutable = "bin/nunit4-console.exe"; + PackageTests = settings.StandardRunnerTests.Concat(new [] { settings.NUnitProjectTest }); + } + + protected override string ZipImageDirectory => PACKAGE_DIR + "zip-image"; } diff --git a/cake/package-tests.cake b/cake/package-tests.cake index f77879612..03b8c8304 100644 --- a/cake/package-tests.cake +++ b/cake/package-tests.cake @@ -1,156 +1,3 @@ -////////////////////////////////////////////////////////////////////// -// INDIVIDUAL PACKAGE TEST DEFINITIONS -////////////////////////////////////////////////////////////////////// - -static ExpectedResult MockAssemblyExpectedResult(int nCopies = 1) => new ExpectedResult("Failed") -{ - Total = 37 * nCopies, - Passed = 23 * nCopies, - Failed = 5 * nCopies, - Warnings = 1 * nCopies, - Inconclusive = 1 * nCopies, - Skipped = 7 * nCopies -}; - -// Single Assembly Tests using each agent - -PackageTest Net35Test = new PackageTest( - "Net35Test", - "Run mock-assembly.dll under .NET 3.5", - MOCK_ASSEMBLY_PROJECT_BIN_DIR + "net35/mock-assembly.dll", - MockAssemblyExpectedResult(1)); - -PackageTest Net462Test = new PackageTest( - "Net462Test", - "Run mock-assembly.dll under .NET 4.6.2", - MOCK_ASSEMBLY_PROJECT_BIN_DIR + "net462/mock-assembly.dll", - MockAssemblyExpectedResult(1)); - -PackageTest NetCore21Test = new PackageTest( - "NetCore21Test", - "Run mock-assembly.dll targeting .NET Core 2.1", - MOCK_ASSEMBLY_PROJECT_BIN_DIR + "netcoreapp2.1/mock-assembly.dll", - MockAssemblyExpectedResult(1)); - -PackageTest NetCore31Test = new PackageTest( - "NetCore31Test", - "Run mock-assembly.dll under .NET Core 3.1", - MOCK_ASSEMBLY_PROJECT_BIN_DIR + "netcoreapp3.1/mock-assembly.dll", - MockAssemblyExpectedResult(1)); - -PackageTest Net50Test = new PackageTest( - "Net50Test", - "Run mock-assembly.dll under .NET 5.0", - MOCK_ASSEMBLY_PROJECT_BIN_DIR + "net5.0/mock-assembly.dll", - MockAssemblyExpectedResult(1)); - -PackageTest Net60Test = new PackageTest( - "Net60Test", - "Run mock-assembly.dll under .NET 6.0", - MOCK_ASSEMBLY_PROJECT_BIN_DIR + "net6.0/mock-assembly.dll", - MockAssemblyExpectedResult(1)); - -PackageTest Net70Test = new PackageTest( - "Net70Test", - "Run mock-assembly.dll under .NET 7.0", - MOCK_ASSEMBLY_PROJECT_BIN_DIR + "net7.0/mock-assembly.dll", - MockAssemblyExpectedResult(1)); - -// X86 Tests - -PackageTest Net35X86Test = new PackageTest( - "Net35X86Test", - "Run mock-assembly-x86.dll under .NET 3.5", - MOCK_ASSEMBLY_X86_PROJECT_BIN_DIR + "net35/mock-assembly-x86.dll", - MockAssemblyExpectedResult(1)); - -PackageTest Net462X86Test = new PackageTest( - "Net462X86Test", - "Run mock-assembly-x86.dll under .NET 4.6.2", - MOCK_ASSEMBLY_X86_PROJECT_BIN_DIR + "net462/mock-assembly-x86.dll", - MockAssemblyExpectedResult(1)); - -PackageTest NetCore31X86Test = new PackageTest( - "NetCore31X86Test", - "Run mock-assembly-x86.dll under .NET Core 3.1", - MOCK_ASSEMBLY_X86_PROJECT_BIN_DIR + "netcoreapp3.1/mock-assembly-x86.dll", - MockAssemblyExpectedResult(1)); - -PackageTest NetCore21X86Test = new PackageTest( - "NetCore21X86Test", - "Run mock-assembly-x86.dll under .NET Core 2.1", - MOCK_ASSEMBLY_X86_PROJECT_BIN_DIR + "netcoreapp2.1/mock-assembly-x86.dll", - MockAssemblyExpectedResult(1)); - -// Special Test Situations - -PackageTest Net60WindowsFormsTest = new PackageTest( - "Net60WindowsFormsTest", - "Run test using windows forms under .NET 6.0", - WINDOWS_TEST_PROJECT_BIN_DIR + "net6.0-windows/windows-test.dll", - new ExpectedResult("Passed")); - -PackageTest Net60AspNetCoreTest = new PackageTest( - "Net60AspNetCoreTest", - "Run test using AspNetCore under .NET 6.0", - ASP_NET_CORE_TEST_PROJECT_BIN_DIR + "net6.0/aspnetcore-test.dll", - new ExpectedResult("Passed")); - -// Multiple Assemblies - -PackageTest Net35PlusNet462Test = new PackageTest( - "Net35PlusNet462Test", - "Run both copies of mock-assembly together", - $"{MOCK_ASSEMBLY_PROJECT_BIN_DIR}net35/mock-assembly.dll {MOCK_ASSEMBLY_PROJECT_BIN_DIR}net462/mock-assembly.dll", - MockAssemblyExpectedResult(2)); - -PackageTest Net50PlusNet60Test = new PackageTest( - "Net50PlusNet60Test", - "Run mock-assembly under .Net 5.0 and .Net 6.0 together", - $"{MOCK_ASSEMBLY_PROJECT_BIN_DIR}net5.0/mock-assembly.dll {MOCK_ASSEMBLY_PROJECT_BIN_DIR}net6.0/mock-assembly.dll", - MockAssemblyExpectedResult(2)); - -PackageTest Net462PlusNet60Test = new PackageTest( - "Net462PlusNet60Test", - "Run mock-assembly under .Net Framework 4.6.2 and .Net 6.0 together", - $"{MOCK_ASSEMBLY_PROJECT_BIN_DIR}net462/mock-assembly.dll {MOCK_ASSEMBLY_PROJECT_BIN_DIR}net6.0/mock-assembly.dll", - MockAssemblyExpectedResult(2)); - -// NUnitProject Test - -PackageTest NUnitProjectTest; -NUnitProjectTest = new PackageTest( - "NUnitProjectTest", - "Run project with both copies of mock-assembly", - $"NetFXTests.nunit --config={Configuration}", - MockAssemblyExpectedResult(2)); - -// Tests using NUnit 4 - -PackageTest Net462NUnit4Test = new PackageTest( - "Net462NUnit4Test", - "Run mock-assembly-nunit4.dll under .NET 4.6.2", - MOCK_ASSEMBLY_NUNIT4_PROJECT_BIN_DIR + "net462/mock-assembly-nunit4.dll", - MockAssemblyExpectedResult(1)); - -PackageTest NetCore31NUnit4Test = new PackageTest( - "NetCore31NUnit4Test", - "Run mock-assembly-nunit4.dll under .NET Core 3.1", - MOCK_ASSEMBLY_NUNIT4_PROJECT_BIN_DIR + "netcoreapp3.1/mock-assembly-nunit4.dll", - MockAssemblyExpectedResult(1)); - -PackageTest Net50NUnit4Test = new PackageTest( - "Net50NUnit4Test", - "Run mock-assembly-nunit4.dll under .NET 5.0", - MOCK_ASSEMBLY_NUNIT4_PROJECT_BIN_DIR + "net5.0/mock-assembly-nunit4.dll", - MockAssemblyExpectedResult(1)); - -PackageTest Net60NUnit4Test = new PackageTest( - "Net60NUnit4Test", - "Run mock-assembly-nunit4.dll under .NET 6.0", - MOCK_ASSEMBLY_NUNIT4_PROJECT_BIN_DIR + "net6.0/mock-assembly-nunit4.dll", - MockAssemblyExpectedResult(1)); - // Representation of a single test to be run against a pre-built package. public struct PackageTest { diff --git a/cake/utilities.cake b/cake/utilities.cake index 49246c374..b387a7531 100644 --- a/cake/utilities.cake +++ b/cake/utilities.cake @@ -54,70 +54,51 @@ public static void DisplayBanner(string message) // HELPER METHODS - BUILD ////////////////////////////////////////////////////////////////////// -MSBuildSettings CreateMSBuildSettings(string target) +MSBuildSettings CreateMSBuildSettings(string target, BuildSettings buildSettings) { - var settings = new MSBuildSettings() - .SetConfiguration(Configuration) + var msbuildSettings = new MSBuildSettings() + .SetConfiguration(buildSettings.Configuration) .SetVerbosity(Verbosity.Minimal) - .WithProperty("Version", ProductVersion) - .WithProperty("ApiFileVersion", SemVer + ".0") + .WithProperty("Version", buildSettings.ProductVersion) + .WithProperty("ApiFileVersion", buildSettings.SemVer + ".0") .WithTarget(target) // Workaround for https://github.com/Microsoft/msbuild/issues/3626 .WithProperty("AddSyntheticProjectReferencesForSolutionDependencies", "false"); if (IsRunningOnWindows()) { + // Originally, we only used previews when no other version is installed. + // Currently we use the latest version, even if it is a preview. var vsInstallation = - VSWhereLatest(new VSWhereLatestSettings { Requires = "Microsoft.Component.MSBuild" }); - - if (vsInstallation == null || !vsInstallation.FullPath.Contains("2022")) - { - vsInstallation = VSWhereLatest(new VSWhereLatestSettings { Requires = "Microsoft.Component.MSBuild", IncludePrerelease = true }); - } + VSWhereLatest(new VSWhereLatestSettings { Requires = "Microsoft.Component.MSBuild", IncludePrerelease = true }); if (vsInstallation != null) { var msBuildPath = vsInstallation.CombineWithFilePath(@"MSBuild\Current\Bin\MSBuild.exe"); + if (!FileExists(msBuildPath)) + msBuildPath = vsInstallation.CombineWithFilePath(@"MSBuild\15.0\Bin\MSBuild.exe"); + if (FileExists(msBuildPath)) - settings.ToolPath = msBuildPath; + { + msbuildSettings.ToolPath = msBuildPath; + Information("Using MSBuild at " + msBuildPath); + } } } - return settings; + return msbuildSettings; } -DotNetMSBuildSettings CreateDotNetMSBuildSettings(string target) +DotNetMSBuildSettings CreateDotNetMSBuildSettings(string target, BuildSettings buildSettings) { return new DotNetMSBuildSettings() - .SetConfiguration(Configuration) - .WithProperty("Version", ProductVersion) - .WithProperty("ApiFileVersion", SemVer + ".0") + .SetConfiguration(buildSettings.Configuration) + .WithProperty("Version", buildSettings.ProductVersion) + .WithProperty("ApiFileVersion", buildSettings.SemVer + ".0") .WithTarget(target); } -void CopyAgentsToDirectory(string targetDir) -{ - DisplayBanner($"Copying agents to {targetDir}"); - CreateDirectory( targetDir + "agents"); - - // Copy agent directories we are retaining - CopyDirectory(NET20_AGENT_PROJECT_BIN_DIR, targetDir + "agents/nunit-agent-net20"); - CopyDirectory(NET462_AGENT_PROJECT_BIN_DIR, targetDir + "agents/nunit-agent-net462"); - CopyDirectory(NETCORE31_AGENT_PROJECT_BIN_DIR, targetDir + "agents/nunit-agent-netcore31"); - CopyDirectory(NET50_AGENT_PROJECT_BIN_DIR, targetDir + "agents/nunit-agent-net50"); - CopyDirectory(NET60_AGENT_PROJECT_BIN_DIR, targetDir + "agents/nunit-agent-net60"); - CopyDirectory(NET70_AGENT_PROJECT_BIN_DIR, targetDir + "agents/nunit-agent-net70"); - - // Copy X86 files to corresponding runtime directories - CopyFiles( - NET20_AGENT_X86_PROJECT_BIN_DIR + "nunit-agent-net20-x86.*", - targetDir + "agents/nunit-agent-net20/"); - CopyFiles( - NET462_AGENT_X86_PROJECT_BIN_DIR + "nunit-agent-net462-x86.*", - targetDir + "agents/nunit-agent-net462/"); -} - ////////////////////////////////////////////////////////////////////// // HELPER METHODS - TEST ////////////////////////////////////////////////////////////////////// @@ -132,21 +113,21 @@ FilePath GetResultXmlPath(string testAssembly, string targetRuntime) return MakeAbsolute(new FilePath($@"test-results\{targetRuntime}\{assemblyName}.xml")); } -string GetProjectBinDir(string projectPath) +string GetProjectBinDir(string projectPath, string configuration) { var projectDir = System.IO.Path.GetDirectoryName(projectPath); - return projectDir + $"/bin/{Configuration}/"; + return projectDir + $"/bin/{configuration}/"; } -string GetProjectBinDir(string projectPath, string targetRuntime) +string GetProjectBinDir(string projectPath, string configuration, string targetRuntime) { - return GetProjectBinDir(projectPath) + targetRuntime + "/"; + return GetProjectBinDir(projectPath, configuration) + targetRuntime + "/"; } -void RunNUnitLiteTests(string projectPath, string targetRuntime) +void RunNUnitLiteTests(string projectPath, string configuration, string targetRuntime) { var testAssembly = System.IO.Path.GetFileNameWithoutExtension(projectPath) + ".exe"; - var workingDir = GetProjectBinDir(projectPath, targetRuntime); + var workingDir = GetProjectBinDir(projectPath, configuration, targetRuntime); var resultPath = GetResultXmlPath( testAssembly, targetRuntime).FullPath; int rc = StartProcess( @@ -163,10 +144,10 @@ void RunNUnitLiteTests(string projectPath, string targetRuntime) UnreportedErrors.Add($"{testAssembly}({targetRuntime}) returned rc = {rc}"); } -void RunDotnetNUnitLiteTests(string projectPath, string targetRuntime) +void RunDotnetNUnitLiteTests(string projectPath, string configuration, string targetRuntime) { var testAssembly = System.IO.Path.GetFileNameWithoutExtension(projectPath) + ".dll"; - var workingDir = GetProjectBinDir(projectPath, targetRuntime); + var workingDir = GetProjectBinDir(projectPath, configuration, targetRuntime); var assemblyPath = workingDir + testAssembly; var resultPath = GetResultXmlPath(assemblyPath, targetRuntime).FullPath; @@ -184,18 +165,18 @@ void RunDotnetNUnitLiteTests(string projectPath, string targetRuntime) UnreportedErrors.Add($"{testAssembly}({targetRuntime}) returned rc = {rc}"); } -void RunNetFxConsole(string projectPath, string targetRuntime) +void RunNetFxConsole(string projectPath, string configuration, string targetRuntime) { var testAssembly = System.IO.Path.GetFileNameWithoutExtension(projectPath) + ".dll"; - var workingDir = GetProjectBinDir(projectPath, targetRuntime); + var workingDir = GetProjectBinDir(projectPath, configuration, targetRuntime); var assemblyPath = workingDir + testAssembly; var resultPath = GetResultXmlPath(assemblyPath, targetRuntime).FullPath; int rc = StartProcess( - NETFX_CONSOLE, + NETFX_CONSOLE_DIR + $"bin/{configuration}/{NETFX_CONSOLE_TARGET}/nunit4-console.exe", new ProcessSettings() { - Arguments = $"\"{assemblyPath}\" --result:{resultPath}", + Arguments = $"\"{assemblyPath}\" --result:\"{resultPath}\" --trace:Debug", WorkingDirectory = workingDir }); @@ -205,10 +186,10 @@ void RunNetFxConsole(string projectPath, string targetRuntime) UnreportedErrors.Add($"{testAssembly}({targetRuntime}) returned rc = {rc}"); } -void RunNetCoreConsole(string projectPath, string targetRuntime) +void RunNetCoreConsole(string projectPath, string configuration, string targetRuntime) { var testAssembly = System.IO.Path.GetFileNameWithoutExtension(projectPath) + ".dll"; - var workingDir = GetProjectBinDir(projectPath, targetRuntime); + var workingDir = GetProjectBinDir(projectPath, configuration, targetRuntime); var assemblyPath = workingDir + testAssembly; var resultPath = GetResultXmlPath(assemblyPath, targetRuntime).FullPath; @@ -216,7 +197,7 @@ void RunNetCoreConsole(string projectPath, string targetRuntime) "dotnet", new ProcessSettings { - Arguments = $"\"{NETCORE_CONSOLE}\" \"{assemblyPath}\" --result:{resultPath}", + Arguments = $"\"{NETCORE_CONSOLE_DIR}bin/{configuration}/{NETCORE_CONSOLE_TARGET}/nunit4-netcore-console.dll\" \"{assemblyPath}\" --result:{resultPath}", WorkingDirectory = workingDir }); @@ -262,19 +243,13 @@ public void CopyPackageContents(DirectoryPath packageDir, DirectoryPath outDir) public void PushNuGetPackage(FilePath package, string apiKey, string url) { CheckPackageExists(package); - if (NoPush) - Information($"Push {package} to {url}"); - else - NuGetPush(package, new NuGetPushSettings() { ApiKey = apiKey, Source = url }); + NuGetPush(package, new NuGetPushSettings() { ApiKey = apiKey, Source = url }); } public void PushChocolateyPackage(FilePath package, string apiKey, string url) { CheckPackageExists(package); - if (NoPush) - Information($"Push {package} to {url}"); - else - ChocolateyPush(package, new ChocolateyPushSettings() { ApiKey = apiKey, Source = url }); + ChocolateyPush(package, new ChocolateyPushSettings() { ApiKey = apiKey, Source = url }); } private void CheckPackageExists(FilePath package) diff --git a/msi/resources/nunit.bundle.addins b/msi/resources/nunit.bundle.addins index 224c4aa72..174b44cc6 100644 --- a/msi/resources/nunit.bundle.addins +++ b/msi/resources/nunit.bundle.addins @@ -1,2 +1 @@ addins/nunit-project-loader.dll -addins/vs-project-loader.dll diff --git a/nuget/engine/nunit.engine.nuspec b/nuget/engine/nunit.engine.nuspec index d67e6029a..52b4de730 100644 --- a/nuget/engine/nunit.engine.nuspec +++ b/nuget/engine/nunit.engine.nuspec @@ -63,41 +63,41 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/nuget/runners/DotnetToolSettings.xml b/nuget/runners/DotnetToolSettings.xml index 99909c38b..ee2ec209f 100644 --- a/nuget/runners/DotnetToolSettings.xml +++ b/nuget/runners/DotnetToolSettings.xml @@ -1,6 +1,6 @@ - + diff --git a/nuget/runners/nunit.console-runner-with-extensions.nuspec b/nuget/runners/nunit.console-runner-with-extensions.nuspec index 867e6eb02..98ac3d8b5 100644 --- a/nuget/runners/nunit.console-runner-with-extensions.nuspec +++ b/nuget/runners/nunit.console-runner-with-extensions.nuspec @@ -2,7 +2,7 @@ NUnit.Console - NUnit 3 Console Runner Plus Extensions + NUnit 4 Console Runner Plus Extensions $version$ Charlie Poole, Rob Prouse Charlie Poole, Rob Prouse @@ -12,9 +12,9 @@ https://cdn.rawgit.com/nunit/resources/master/images/icon/nunit_256.png images\nunit_256.png false - Console runner for the NUnit 3 unit-testing framework with selected extensions. + Console runner for the NUnit unit-testing framework with selected extensions. - This package includes the nunit3-console runner and test engine for version 3 of the NUnit unit-testing framework. + This package includes the nunit4-console runner and test engine for the NUnit unit-testing framework. The following extensions are included with this package: * NUnitProjectLoader - loads tests from NUnit projects diff --git a/src/NUnitConsole/nunit4-console/ConsoleOptions.cs b/src/NUnitConsole/nunit4-console/ConsoleOptions.cs index c0977ee72..ed746ed43 100644 --- a/src/NUnitConsole/nunit4-console/ConsoleOptions.cs +++ b/src/NUnitConsole/nunit4-console/ConsoleOptions.cs @@ -11,7 +11,7 @@ namespace NUnit.ConsoleRunner.Options { /// /// ConsoleOptions encapsulates the option settings for - /// the nunit3-console program. The class inherits from the Mono + /// the nunit4-console program. The class inherits from the Mono /// Options class and provides a central location /// for defining and parsing options. /// diff --git a/src/NUnitConsole/nunit4-console/ConsoleRunner.cs b/src/NUnitConsole/nunit4-console/ConsoleRunner.cs index d06ac2509..25ce55535 100644 --- a/src/NUnitConsole/nunit4-console/ConsoleRunner.cs +++ b/src/NUnitConsole/nunit4-console/ConsoleRunner.cs @@ -15,7 +15,7 @@ namespace NUnit.ConsoleRunner { /// - /// ConsoleRunner provides the nunit3-console text-based + /// ConsoleRunner provides the nunit4-console text-based /// user interface, running the tests and reporting the results. /// public class ConsoleRunner diff --git a/src/NUnitConsole/nunit4-console/Program.cs b/src/NUnitConsole/nunit4-console/Program.cs index b94fa36e7..d6a53f150 100644 --- a/src/NUnitConsole/nunit4-console/Program.cs +++ b/src/NUnitConsole/nunit4-console/Program.cs @@ -195,7 +195,7 @@ private static void WriteHeader() private static void WriteHelpText() { OutWriter.WriteLine(); - OutWriter.WriteLine(ColorStyle.Header, "NUNIT3-CONSOLE [inputfiles] [options]"); + OutWriter.WriteLine(ColorStyle.Header, "NUNIT4-CONSOLE [inputfiles] [options]"); OutWriter.WriteLine(); OutWriter.WriteLine(ColorStyle.Default, "Runs a set of NUnit tests from the console."); OutWriter.WriteLine(); diff --git a/src/NUnitConsole/nunit4-netcore-console/ConsoleOptions.cs b/src/NUnitConsole/nunit4-netcore-console/ConsoleOptions.cs index c0977ee72..ed746ed43 100644 --- a/src/NUnitConsole/nunit4-netcore-console/ConsoleOptions.cs +++ b/src/NUnitConsole/nunit4-netcore-console/ConsoleOptions.cs @@ -11,7 +11,7 @@ namespace NUnit.ConsoleRunner.Options { /// /// ConsoleOptions encapsulates the option settings for - /// the nunit3-console program. The class inherits from the Mono + /// the nunit4-console program. The class inherits from the Mono /// Options class and provides a central location /// for defining and parsing options. /// diff --git a/src/NUnitConsole/nunit4-netcore-console/ConsoleRunner.cs b/src/NUnitConsole/nunit4-netcore-console/ConsoleRunner.cs index d06ac2509..25ce55535 100644 --- a/src/NUnitConsole/nunit4-netcore-console/ConsoleRunner.cs +++ b/src/NUnitConsole/nunit4-netcore-console/ConsoleRunner.cs @@ -15,7 +15,7 @@ namespace NUnit.ConsoleRunner { /// - /// ConsoleRunner provides the nunit3-console text-based + /// ConsoleRunner provides the nunit4-console text-based /// user interface, running the tests and reporting the results. /// public class ConsoleRunner diff --git a/src/NUnitConsole/nunit4-netcore-console/nunit4-netcore-console.csproj b/src/NUnitConsole/nunit4-netcore-console/nunit4-netcore-console.csproj index 87644b088..1aac8591a 100644 --- a/src/NUnitConsole/nunit4-netcore-console/nunit4-netcore-console.csproj +++ b/src/NUnitConsole/nunit4-netcore-console/nunit4-netcore-console.csproj @@ -15,6 +15,24 @@ The console command-line runner for NUnit + + true + dotnet-nunit + NUnit.ConsoleRunner.NetCore + NUnit Console Runner (.NET Core) + Charlie Poole, Rob Prouse, + content\LICENSE.txt + https://nunit.org + README.md + git + https://github.com/nunit/nunit-console + content\nunit_256.png + false + https://docs.nunit.org/articles/nunit/release-notes/console-and-engine.html + nunit test testing tdd runner + Copyright (c) 2022 Charlie Poole, Rob Prouse + + ..\..\..\nunit.ico app.manifest @@ -22,6 +40,13 @@ + + + + True + \ + + diff --git a/src/NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20-x86.csproj b/src/NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20-x86.csproj index 980e5639c..cfed7f8da 100644 --- a/src/NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20-x86.csproj +++ b/src/NUnitEngine/agents/nunit-agent-net20-x86/nunit-agent-net20-x86.csproj @@ -37,4 +37,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-net20/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-net20/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/agents/nunit-agent-net20/nunit-agent-net20.csproj b/src/NUnitEngine/agents/nunit-agent-net20/nunit-agent-net20.csproj index 581265f18..4641960a8 100644 --- a/src/NUnitEngine/agents/nunit-agent-net20/nunit-agent-net20.csproj +++ b/src/NUnitEngine/agents/nunit-agent-net20/nunit-agent-net20.csproj @@ -36,4 +36,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-net20/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-net20/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/agents/nunit-agent-net462-x86/nunit-agent-net462-x86.csproj b/src/NUnitEngine/agents/nunit-agent-net462-x86/nunit-agent-net462-x86.csproj index 114069a0d..d4cd1502f 100644 --- a/src/NUnitEngine/agents/nunit-agent-net462-x86/nunit-agent-net462-x86.csproj +++ b/src/NUnitEngine/agents/nunit-agent-net462-x86/nunit-agent-net462-x86.csproj @@ -3,7 +3,7 @@ Exe nunit.agent - net20;net462 + net462 app.manifest ..\..\..\..\nunit.ico x86 @@ -37,4 +37,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-net462/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-net462/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/agents/nunit-agent-net462/nunit-agent-net462.csproj b/src/NUnitEngine/agents/nunit-agent-net462/nunit-agent-net462.csproj index 20ce7abfd..06c5667cf 100644 --- a/src/NUnitEngine/agents/nunit-agent-net462/nunit-agent-net462.csproj +++ b/src/NUnitEngine/agents/nunit-agent-net462/nunit-agent-net462.csproj @@ -36,4 +36,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-net462/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-net462/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/agents/nunit-agent-net50/nunit-agent-net50.csproj b/src/NUnitEngine/agents/nunit-agent-net50/nunit-agent-net50.csproj index b84cd006c..4df45afed 100644 --- a/src/NUnitEngine/agents/nunit-agent-net50/nunit-agent-net50.csproj +++ b/src/NUnitEngine/agents/nunit-agent-net50/nunit-agent-net50.csproj @@ -38,4 +38,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-net50/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-net50/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/agents/nunit-agent-net60/nunit-agent-net60.csproj b/src/NUnitEngine/agents/nunit-agent-net60/nunit-agent-net60.csproj index d8680d318..cbd038dd0 100644 --- a/src/NUnitEngine/agents/nunit-agent-net60/nunit-agent-net60.csproj +++ b/src/NUnitEngine/agents/nunit-agent-net60/nunit-agent-net60.csproj @@ -37,4 +37,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-net60/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-net60/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/agents/nunit-agent-net70/nunit-agent-net70.csproj b/src/NUnitEngine/agents/nunit-agent-net70/nunit-agent-net70.csproj index 5f0cad263..a43bc2fad 100644 --- a/src/NUnitEngine/agents/nunit-agent-net70/nunit-agent-net70.csproj +++ b/src/NUnitEngine/agents/nunit-agent-net70/nunit-agent-net70.csproj @@ -37,4 +37,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-net70/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-net70/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/agents/nunit-agent-netcore31/nunit-agent-netcore31.csproj b/src/NUnitEngine/agents/nunit-agent-netcore31/nunit-agent-netcore31.csproj index 23867e623..296fd7c9b 100644 --- a/src/NUnitEngine/agents/nunit-agent-netcore31/nunit-agent-netcore31.csproj +++ b/src/NUnitEngine/agents/nunit-agent-netcore31/nunit-agent-netcore31.csproj @@ -37,4 +37,20 @@ + + + $([System.IO.Path]::GetFullPath("../../../NUnitConsole/nunit4-console/bin/$(Configuration)/net462/agents/nunit-agent-netcore31/")) + $([System.IO.Path]::GetFullPath("../../nunit.engine/bin/$(Configuration)/agents/nunit-agent-netcore31/")) + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs b/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs index a80800ccd..f797fe78b 100644 --- a/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs +++ b/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs @@ -11,13 +11,13 @@ internal sealed class RunnerInDirectoryWithoutFramework : IDisposable { private readonly DirectoryWithNeededAssemblies directory; - public string ConsoleExe => Path.Combine(directory.Directory, "nunit3-console.exe"); + public string ConsoleExe => Path.Combine(directory.Directory, "nunit4-console.exe"); public string AgentExe => Path.Combine(directory.Directory, "nunit-agent.exe"); public string AgentX86Exe => Path.Combine(directory.Directory, "nunit-agent-x86.exe"); public RunnerInDirectoryWithoutFramework() { - directory = new DirectoryWithNeededAssemblies("nunit3-console", "nunit.engine"); + directory = new DirectoryWithNeededAssemblies("nunit4-console", "nunit.engine"); Assert.That(Path.Combine(directory.Directory, "nunit.framework.dll"), Does.Not.Exist, "This test must be run without nunit.framework.dll in the same directory as the console runner."); } diff --git a/zip/nunit.bundle.addins b/zip/nunit.bundle.addins index 224c4aa72..174b44cc6 100644 --- a/zip/nunit.bundle.addins +++ b/zip/nunit.bundle.addins @@ -1,2 +1 @@ addins/nunit-project-loader.dll -addins/vs-project-loader.dll From 05f8b64e5ae203b92d3e25aced996ca900b5ff96 Mon Sep 17 00:00:00 2001 From: Charlie Poole Date: Tue, 10 Jan 2023 16:19:17 -0800 Subject: [PATCH 2/3] Fix errors in AppVeyor build --- build.cake | 20 +++++++------------- cake/utilities.cake | 7 ------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/build.cake b/build.cake index 5746b518d..b6daac062 100644 --- a/build.cake +++ b/build.cake @@ -15,12 +15,6 @@ static string Target; Target = GetArgument("target|t", "Default"); #tool dotnet:?package=GitVersion.Tool&version=5.6.3 #tool dotnet:?package=GitReleaseManager.Tool&version=0.12.1 -BuildVersion _buildVersion; -string ProductVersion => _buildVersion.ProductVersion; -string SemVer => _buildVersion.SemVer; -string PreReleaseLabel => _buildVersion.PreReleaseLabel; -bool IsReleaseBranch => _buildVersion.IsReleaseBranch; - var UnreportedErrors = new List(); var installedNetCoreRuntimes = GetInstalledNetCoreRuntimes(); @@ -35,7 +29,7 @@ Setup(context => Information($"PreReleaseLabel is {settings.PreReleaseLabel}"); if (BuildSystem.IsRunningOnAppVeyor) - AppVeyor.UpdateBuildVersion(ProductVersion + "-" + AppVeyor.Environment.Build.Number); + AppVeyor.UpdateBuildVersion(settings.ProductVersion + "-" + AppVeyor.Environment.Build.Number); return settings; }); @@ -603,11 +597,11 @@ Task("CreateDraftRelease") if (isDirectTarget && !HasArgument("productVersion")) throw new Exception("Must specify --productVersion with the CreateDraftRelease target."); - if (IsReleaseBranch || isDirectTarget) + if (settings.IsReleaseBranch || isDirectTarget) { - string milestone = IsReleaseBranch - ? _buildVersion.BranchName.Substring(8) - : ProductVersion; + string milestone = settings.IsReleaseBranch + ? settings.BranchName.Substring(8) + : settings.ProductVersion; string releaseName = $"NUnit Console and Engine {milestone}"; Information($"Creating draft release for {releaseName}"); @@ -642,10 +636,10 @@ Task("CreateDraftRelease") Task("CreateProductionRelease") .Does(settings => { - if (IsProductionRelease) + if (settings.IsProductionRelease) { string token = EnvironmentVariable(GITHUB_ACCESS_TOKEN); - string tagName = ProductVersion; + string tagName = settings.ProductVersion; var assetList = new List(); foreach (var package in settings.AllPackages) diff --git a/cake/utilities.cake b/cake/utilities.cake index b387a7531..c2c7faaa7 100644 --- a/cake/utilities.cake +++ b/cake/utilities.cake @@ -258,10 +258,3 @@ private void CheckPackageExists(FilePath package) throw new InvalidOperationException( $"Package not found: {package.GetFilename()}.\nCode may have changed since package was last built."); } - -public bool IsPreRelease => !string.IsNullOrEmpty(PreReleaseLabel); - -public bool ShouldPublishToMyGet => IsPreRelease && LABELS_WE_PUBLISH_ON_MYGET.Contains(PreReleaseLabel); -public bool ShouldPublishToNuGet => !IsPreRelease || LABELS_WE_PUBLISH_ON_NUGET.Contains(PreReleaseLabel); -public bool ShouldPublishToChocolatey => !IsPreRelease || LABELS_WE_PUBLISH_ON_CHOCOLATEY.Contains(PreReleaseLabel); -public bool IsProductionRelease => !IsPreRelease || LABELS_WE_RELEASE_ON_GITHUB.Contains(PreReleaseLabel); From 44d3c484b3eedc640502b8cbd0c20b59fb899ed0 Mon Sep 17 00:00:00 2001 From: Charlie Poole Date: Tue, 10 Jan 2023 17:53:32 -0800 Subject: [PATCH 3/3] Don't run .NET Core X86 tests on AppVeyor --- cake/build-settings.cake | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cake/build-settings.cake b/cake/build-settings.cake index a16e406ab..1bbfc83dd 100644 --- a/cake/build-settings.cake +++ b/cake/build-settings.cake @@ -143,8 +143,6 @@ public class BuildSettings Net462PlusNet60Test, Net35X86Test, Net462X86Test, - NetCore21X86Test, - NetCore31X86Test, Net60AspNetCoreTest, Net462NUnit4Test, NetCore31NUnit4Test, @@ -152,8 +150,16 @@ public class BuildSettings Net60NUnit4Test }; if (IsRunningOnWindows) + { StandardRunnerTests.Add(Net60WindowsFormsTest); + if (!IsRunningOnAppVeyor) + { + StandardRunnerTests.Add(NetCore21X86Test); + StandardRunnerTests.Add(NetCore31X86Test); + } + } + NetCoreRunnerTests = new List { NetCore21Test,