From 6945c4ff9cec6f3914e97b7329f9ab506cafd931 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Sun, 9 Jul 2023 23:40:41 +0200 Subject: [PATCH 01/23] (build) Updated Cake Tool to version 3.1.0 --- .config/dotnet-tools.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 831d039b64..8f3a4382f2 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "cake.tool": { - "version": "3.0.0", + "version": "3.1.0", "commands": [ "dotnet-cake" ] From 700eaef1b5b735920c70b134ae182a958060ccf3 Mon Sep 17 00:00:00 2001 From: Pascal Berger Date: Tue, 8 Aug 2023 00:06:30 +0200 Subject: [PATCH 02/23] Mark Cake 2.x as out of suppport --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 9386a21bbb..5fb5231fb5 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,7 +5,7 @@ | Version | Supported | | --------- | ------------------ | | 3.x.x | :white_check_mark: | -| 2.x.x | :white_check_mark: | +| 2.x.x | :x: | | 1.0.x | :x: | | 0.38.5 | :x: | | <= 0.38.4 | :x: | From 9cecf92c3a419f86a1a572b8d06a91ed7c997699 Mon Sep 17 00:00:00 2001 From: Roman Marusyk Date: Sun, 16 Jul 2023 03:48:03 +0300 Subject: [PATCH 03/23] Add NodeReuse property to DotNetMSBuildSettings --- .../MSBuild/DotNetMSBuildBuilderTests.cs | 15 +++++++++ .../DotNetMSBuildSettingsExtensionsTests.cs | 31 +++++++++++++++++++ .../MSBuild/DotNetMSBuildSettingsTests.cs | 13 ++++++++ .../DotNet/MSBuild/DotNetMSBuildSettings.cs | 7 +++++ .../DotNetMSBuildSettingsExtensions.cs | 14 +++++++++ .../MSBuildArgumentBuilderExtensions.cs | 6 ++++ 6 files changed, 86 insertions(+) diff --git a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs index 59490fa515..ddbcd81a5a 100644 --- a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs +++ b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using Cake.Common.Tests.Fixtures.Tools; using Cake.Common.Tests.Fixtures.Tools.DotNet.MSBuild; using Cake.Common.Tools.DotNet; using Cake.Common.Tools.DotNet.MSBuild; @@ -801,6 +802,20 @@ public void Should_Add_Host_Arguments() // Then Assert.Equal("--diagnostics msbuild", result.Args); } + + [Fact] + public void Should_Use_Node_Reuse_If_Specified() + { + // Given + var fixture = new DotNetMSBuildBuilderFixture(); + fixture.Settings.NodeReuse = true; + + // When + var result = fixture.Run(); + + // Then + Assert.Equal("msbuild /nr:true", result.Args); + } } public class TheConsoleLoggerSettingsProperty diff --git a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensionsTests.cs b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensionsTests.cs index 6bb2d53b12..655125e255 100644 --- a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensionsTests.cs +++ b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensionsTests.cs @@ -712,6 +712,37 @@ public void Should_Return_The_Same_Configuration() } } + public sealed class TheNodeReuseMethod + { + [Theory] + [InlineData(true)] + [InlineData(false)] + public void Should_Set_Node_Reuse(bool reuse) + { + // Given + var settings = new DotNetMSBuildSettings(); + + // When + settings.SetNodeReuse(reuse); + + // Then + Assert.Equal(reuse, settings.NodeReuse); + } + + [Fact] + public void Should_Return_The_Same_Configuration() + { + // Given + var settings = new DotNetMSBuildSettings(); + + // When + var result = settings.SetNodeReuse(true); + + // Then + Assert.Equal(settings, result); + } + } + public sealed class TheSetConfigurationMethod { private const string Configuration = "TheConfiguration"; diff --git a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsTests.cs b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsTests.cs index ce42825bb0..0162cbc19c 100644 --- a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsTests.cs +++ b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildSettingsTests.cs @@ -484,5 +484,18 @@ public void Should_Be_Empty_By_Default() Assert.Empty(settings.DistributedLoggers); } } + + public sealed class TheNodeReuseProperty + { + [Fact] + public void Should_Be_Null_By_Default() + { + // Given + var settings = new DotNetMSBuildSettings(); + + // Then + Assert.Null(settings.NodeReuse); + } + } } } \ No newline at end of file diff --git a/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettings.cs b/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettings.cs index 4bfe90d69b..da992f5a46 100644 --- a/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettings.cs +++ b/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettings.cs @@ -214,6 +214,13 @@ public string PackageReleaseNotes /// public IList WarningCodesAsMessage { get; } + /// + /// Gets or sets a value indicating whether or not node reuse is used. + /// When you’re doing multiple builds in a row, this helps reduce your total build time, + /// by avoiding the start up costs of each MSBuild child node. + /// + public bool? NodeReuse { get; set; } + /// /// Initializes a new instance of the class. /// diff --git a/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensions.cs b/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensions.cs index be47afc62c..1194d0509f 100644 --- a/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensions.cs +++ b/src/Cake.Common/Tools/DotNet/MSBuild/DotNetMSBuildSettingsExtensions.cs @@ -439,6 +439,20 @@ public static DotNetMSBuildSettings TreatAllWarningsAs(this DotNetMSBuildSetting return settings; } + /// + /// Sets whether or not node reuse should be enabled. + /// + /// The settings. + /// true if node reuse should be enabled; otherwise false. + /// The same instance so that multiple calls can be chained. + public static DotNetMSBuildSettings SetNodeReuse(this DotNetMSBuildSettings settings, bool reuse) + { + EnsureSettings(settings); + + settings.NodeReuse = reuse; + return settings; + } + /// /// Sets the configuration. /// diff --git a/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs b/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs index 68156d416b..f5b85a11c7 100644 --- a/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs +++ b/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs @@ -203,6 +203,12 @@ public static void AppendMSBuildSettings(this ProcessArgumentBuilder builder, Do msBuilder.AppendMSBuildSwitch("property", $"ContinuousIntegrationBuild={continuousIntegrationBuild}"); } + // Re-use of MSBuild nodes? + if (settings.NodeReuse != null) + { + msBuilder.Append(string.Concat("/nr:", settings.NodeReuse.Value ? "true" : "false")); + } + builder.AppendRange( invokeArgumentCustomization ? settings.ArgumentCustomization?.Invoke(msBuilder) ?? msBuilder From 4ed7c72c1bfc7bf4872df8ecccf0999f228fceb0 Mon Sep 17 00:00:00 2001 From: "C. Augusto Proiete" Date: Sun, 16 Jul 2023 04:27:15 -0300 Subject: [PATCH 04/23] Apply suggestions from code review (/nr: => /nodeReuse:) --- .../Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs | 2 +- .../Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs index ddbcd81a5a..541036be8f 100644 --- a/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs +++ b/src/Cake.Common.Tests/Unit/Tools/DotNet/MSBuild/DotNetMSBuildBuilderTests.cs @@ -814,7 +814,7 @@ public void Should_Use_Node_Reuse_If_Specified() var result = fixture.Run(); // Then - Assert.Equal("msbuild /nr:true", result.Args); + Assert.Equal("msbuild /nodeReuse:true", result.Args); } } diff --git a/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs b/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs index f5b85a11c7..46ea94d326 100644 --- a/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs +++ b/src/Cake.Common/Tools/DotNet/MSBuild/MSBuildArgumentBuilderExtensions.cs @@ -204,9 +204,9 @@ public static void AppendMSBuildSettings(this ProcessArgumentBuilder builder, Do } // Re-use of MSBuild nodes? - if (settings.NodeReuse != null) + if (settings.NodeReuse.HasValue) { - msBuilder.Append(string.Concat("/nr:", settings.NodeReuse.Value ? "true" : "false")); + msBuilder.Append(string.Concat("/nodeReuse:", settings.NodeReuse.Value ? "true" : "false")); } builder.AppendRange( From 855b86f0b0be0aee868af08246c58a62012bb3fb Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 29 Sep 2023 16:56:12 +0200 Subject: [PATCH 05/23] (GH-4207) Update .NET SDK to 7.0.401 * fixes #4207 --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index ecd662c276..b531084de3 100644 --- a/global.json +++ b/global.json @@ -3,7 +3,7 @@ "src" ], "sdk": { - "version": "7.0.305", + "version": "7.0.401", "rollForward": "latestFeature" } } \ No newline at end of file From e35e5693d61c651022a916cda652f11e5224ae82 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 29 Sep 2023 17:19:20 +0200 Subject: [PATCH 06/23] (GH-4208) Update xunit to 2.5.1 * fixes #4208 --- src/Cake.Common.Tests/Cake.Common.Tests.csproj | 4 ++-- src/Cake.Core.Tests/Cake.Core.Tests.csproj | 4 ++-- .../Cake.DotNetTool.Module.Tests.csproj | 4 ++-- src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj | 4 ++-- src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj | 4 ++-- src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj | 2 +- src/Cake.Tests/Cake.Tests.csproj | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Cake.Common.Tests/Cake.Common.Tests.csproj b/src/Cake.Common.Tests/Cake.Common.Tests.csproj index 0d1b477ca8..1b40fa8650 100644 --- a/src/Cake.Common.Tests/Cake.Common.Tests.csproj +++ b/src/Cake.Common.Tests/Cake.Common.Tests.csproj @@ -17,8 +17,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.Core.Tests/Cake.Core.Tests.csproj b/src/Cake.Core.Tests/Cake.Core.Tests.csproj index 5ab212ea53..bb638b2b26 100644 --- a/src/Cake.Core.Tests/Cake.Core.Tests.csproj +++ b/src/Cake.Core.Tests/Cake.Core.Tests.csproj @@ -15,8 +15,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj index 4456c42c5c..f91d51826a 100644 --- a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj +++ b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj @@ -17,8 +17,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj index ba7e795c47..f1bbe3e7ab 100644 --- a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj +++ b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj index 78ea742d85..1a4104e3ca 100644 --- a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj +++ b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj @@ -16,8 +16,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj b/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj index af7d9f598f..8838cf5dc3 100644 --- a/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj +++ b/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Cake.Tests/Cake.Tests.csproj b/src/Cake.Tests/Cake.Tests.csproj index d530c01aba..e52055a59d 100644 --- a/src/Cake.Tests/Cake.Tests.csproj +++ b/src/Cake.Tests/Cake.Tests.csproj @@ -11,8 +11,8 @@ - - + + all runtime; build; native; contentfiles; analyzers From aa527cba42c23013cc2ccd2fd1cb019aa5192d43 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 29 Sep 2023 18:54:52 +0200 Subject: [PATCH 07/23] (GH-4211) Update Microsoft.NET.Test.Sdk to 17.7.2 * fixes #4211 --- src/Cake.Common.Tests/Cake.Common.Tests.csproj | 2 +- src/Cake.Core.Tests/Cake.Core.Tests.csproj | 2 +- .../Cake.DotNetTool.Module.Tests.csproj | 2 +- src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj | 4 ++-- src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj | 2 +- src/Cake.Tests/Cake.Tests.csproj | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Cake.Common.Tests/Cake.Common.Tests.csproj b/src/Cake.Common.Tests/Cake.Common.Tests.csproj index 1b40fa8650..535ec8c29d 100644 --- a/src/Cake.Common.Tests/Cake.Common.Tests.csproj +++ b/src/Cake.Common.Tests/Cake.Common.Tests.csproj @@ -16,7 +16,7 @@ - + all diff --git a/src/Cake.Core.Tests/Cake.Core.Tests.csproj b/src/Cake.Core.Tests/Cake.Core.Tests.csproj index bb638b2b26..4226494abe 100644 --- a/src/Cake.Core.Tests/Cake.Core.Tests.csproj +++ b/src/Cake.Core.Tests/Cake.Core.Tests.csproj @@ -14,7 +14,7 @@ - + all diff --git a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj index f91d51826a..4a799c605c 100644 --- a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj +++ b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj @@ -16,7 +16,7 @@ - + all diff --git a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj index f1bbe3e7ab..38c74dca22 100644 --- a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj +++ b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj @@ -8,8 +8,8 @@ - - + + all diff --git a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj index 1a4104e3ca..b748172e34 100644 --- a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj +++ b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj @@ -15,7 +15,7 @@ - + all diff --git a/src/Cake.Tests/Cake.Tests.csproj b/src/Cake.Tests/Cake.Tests.csproj index e52055a59d..175a6a43a7 100644 --- a/src/Cake.Tests/Cake.Tests.csproj +++ b/src/Cake.Tests/Cake.Tests.csproj @@ -10,7 +10,7 @@ - + all From 7958f6b58706de28fc3ef4ef91e15e1398e130a7 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 29 Sep 2023 19:41:45 +0200 Subject: [PATCH 08/23] (GH-4213) Update NSubstitute to 5.1.0 * fixes #4213 --- src/Cake.Common.Tests/Cake.Common.Tests.csproj | 2 +- src/Cake.Core.Tests/Cake.Core.Tests.csproj | 2 +- .../Cake.DotNetTool.Module.Tests.csproj | 2 +- src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj | 2 +- src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj | 2 +- src/Cake.Tests/Cake.Tests.csproj | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Cake.Common.Tests/Cake.Common.Tests.csproj b/src/Cake.Common.Tests/Cake.Common.Tests.csproj index 535ec8c29d..9511b5599a 100644 --- a/src/Cake.Common.Tests/Cake.Common.Tests.csproj +++ b/src/Cake.Common.Tests/Cake.Common.Tests.csproj @@ -22,7 +22,7 @@ all runtime; build; native; contentfiles; analyzers - + diff --git a/src/Cake.Core.Tests/Cake.Core.Tests.csproj b/src/Cake.Core.Tests/Cake.Core.Tests.csproj index 4226494abe..572253151b 100644 --- a/src/Cake.Core.Tests/Cake.Core.Tests.csproj +++ b/src/Cake.Core.Tests/Cake.Core.Tests.csproj @@ -20,7 +20,7 @@ all runtime; build; native; contentfiles; analyzers - + diff --git a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj index 4a799c605c..e59a512ac6 100644 --- a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj +++ b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj @@ -22,7 +22,7 @@ all runtime; build; native; contentfiles; analyzers - + diff --git a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj index 38c74dca22..d1d9426c7b 100644 --- a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj +++ b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj @@ -15,7 +15,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj index b748172e34..85a6e856b7 100644 --- a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj +++ b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj @@ -21,7 +21,7 @@ all runtime; build; native; contentfiles; analyzers - + diff --git a/src/Cake.Tests/Cake.Tests.csproj b/src/Cake.Tests/Cake.Tests.csproj index 175a6a43a7..a6fc020852 100644 --- a/src/Cake.Tests/Cake.Tests.csproj +++ b/src/Cake.Tests/Cake.Tests.csproj @@ -16,7 +16,7 @@ all runtime; build; native; contentfiles; analyzers - + From 6be60dbe5d8ffe61913eeb21452d4ef27bbae317 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 29 Sep 2023 20:05:08 +0200 Subject: [PATCH 09/23] (GH-4215) Update Autofac to 7.1.0 * fixes #4215 --- src/Cake.Cli/Cake.Cli.csproj | 2 +- src/Cake/Cake.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Cake.Cli/Cake.Cli.csproj b/src/Cake.Cli/Cake.Cli.csproj index f32bfeee7f..48b5859f13 100644 --- a/src/Cake.Cli/Cake.Cli.csproj +++ b/src/Cake.Cli/Cake.Cli.csproj @@ -18,7 +18,7 @@ - + diff --git a/src/Cake/Cake.csproj b/src/Cake/Cake.csproj index 8704a7cfa3..6cb621ca5c 100644 --- a/src/Cake/Cake.csproj +++ b/src/Cake/Cake.csproj @@ -29,7 +29,7 @@ - + From c56e04bf1318531657027ef46ffbfe4aa0ce9172 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 29 Sep 2023 20:41:10 +0200 Subject: [PATCH 10/23] (GH-4217) Update NuGet.* to 6.7.0 * fixes #4217 --- src/Cake.NuGet/Cake.NuGet.csproj | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Cake.NuGet/Cake.NuGet.csproj b/src/Cake.NuGet/Cake.NuGet.csproj index cf565a1088..8854bbdc03 100644 --- a/src/Cake.NuGet/Cake.NuGet.csproj +++ b/src/Cake.NuGet/Cake.NuGet.csproj @@ -18,17 +18,17 @@ - - - - - - + + + + + + - + All From 0202188893cd37008df5751a98f0567674a59101 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 29 Sep 2023 21:03:20 +0200 Subject: [PATCH 11/23] (GH-4219) Update Microsoft.CodeAnalysis.CSharp.Scripting to 4.7.0 * fixes #4219 --- src/Cake/Cake.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Cake/Cake.csproj b/src/Cake/Cake.csproj index 6cb621ca5c..2b5607877d 100644 --- a/src/Cake/Cake.csproj +++ b/src/Cake/Cake.csproj @@ -26,11 +26,11 @@ - + - - + + \ No newline at end of file From 78edbb103e8ecd67b94efd6dbc1ed17bc25f8dda Mon Sep 17 00:00:00 2001 From: Flepp Jann Date: Wed, 31 May 2023 10:02:14 +0200 Subject: [PATCH 12/23] Add Azure Pipelines group logging commands --- .../AzurePipelinesCommandTests.cs | 54 ++++++++++++++++-- .../AzurePipelines/AzurePipelinesCommands.cs | 26 ++++++++- .../AzurePipelinesDisposableExtensions.cs | 56 +++++++++++++++++++ .../AzurePipelines/IAzurePipelinesCommands.cs | 17 ++++++ .../templates/cakefrosting/build/Build.csproj | 2 +- .../AzurePipelinesProvider.cake | 22 ++++++++ .../Cake.Common/Build/BuildSystemAliases.cake | 4 +- 7 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 src/Cake.Common/Build/AzurePipelines/AzurePipelinesDisposableExtensions.cs create mode 100644 tests/integration/Cake.Common/Build/AzurePipelines/AzurePipelinesProvider.cake diff --git a/src/Cake.Common.Tests/Unit/Build/AzurePipelines/AzurePipelinesCommandTests.cs b/src/Cake.Common.Tests/Unit/Build/AzurePipelines/AzurePipelinesCommandTests.cs index c57c4ba62a..b88292631a 100644 --- a/src/Cake.Common.Tests/Unit/Build/AzurePipelines/AzurePipelinesCommandTests.cs +++ b/src/Cake.Common.Tests/Unit/Build/AzurePipelines/AzurePipelinesCommandTests.cs @@ -127,6 +127,48 @@ public void Should_Log_Error_Message_With_Data() Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[task.logissue sourcepath=./code.cs;linenumber=1;columnnumber=2;code=3;type=error;]build error"); } + [Fact] + public void Should_Begin_Group_With_Name() + { + // Given + var fixture = new AzurePipelinesFixture(); + var service = fixture.CreateAzurePipelinesService(); + + // When + service.Commands.BeginGroup("Example Group"); + + // Then + Assert.Contains(fixture.Writer.Entries, m => m == $"##[group]Example Group"); + } + + [Fact] + public void Should_End_Group() + { + // Given + var fixture = new AzurePipelinesFixture(); + var service = fixture.CreateAzurePipelinesService(); + + // When + service.Commands.EndGroup(); + + // Then + Assert.Contains(fixture.Writer.Entries, m => m == $"##[endgroup]"); + } + + [Fact] + public void Should_Section_With_Name() + { + // Given + var fixture = new AzurePipelinesFixture(); + var service = fixture.CreateAzurePipelinesService(); + + // When + service.Commands.Section("Example Section"); + + // Then + Assert.Contains(fixture.Writer.Entries, m => m == $"##[section]Example Section"); + } + [Fact] public void Should_Set_Current_Progress() { @@ -152,7 +194,7 @@ public void Should_Complete_Current_Task() service.Commands.CompleteCurrentTask(); // Then - Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[task.complete ]DONE"); + Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[task.complete]DONE"); } [Fact] @@ -281,7 +323,7 @@ public void Should_Upload_Task_Summary() service.Commands.UploadTaskSummary("./summary.md"); // Then - Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[task.uploadsummary ]{path}"); + Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[task.uploadsummary]{path}"); } [Fact] @@ -296,7 +338,7 @@ public void Should_Upload_Task_Log() service.Commands.UploadTaskLogFile("./logs/task.log"); // Then - Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[task.uploadfile ]{path}"); + Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[task.uploadfile]{path}"); } [Theory] @@ -432,7 +474,7 @@ public void Should_Upload_Build_Log() service.Commands.UploadBuildLogFile("./dist/buildlog.txt"); // Then - Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[build.uploadlog ]{path}"); + Assert.Contains(fixture.Writer.Entries, m => m == $"##vso[build.uploadlog]{path}"); } [Fact] @@ -446,7 +488,7 @@ public void Should_Update_Build_Number() service.Commands.UpdateBuildNumber("CIBuild_1"); // Then - Assert.Contains(fixture.Writer.Entries, m => m == "##vso[build.updatebuildnumber ]CIBuild_1"); + Assert.Contains(fixture.Writer.Entries, m => m == "##vso[build.updatebuildnumber]CIBuild_1"); } [Fact] @@ -460,7 +502,7 @@ public void Should_Add_Build_Tag() service.Commands.AddBuildTag("Stable"); // Then - Assert.Contains(fixture.Writer.Entries, m => m == "##vso[build.addbuildtag ]Stable"); + Assert.Contains(fixture.Writer.Entries, m => m == "##vso[build.addbuildtag]Stable"); } [Fact] diff --git a/src/Cake.Common/Build/AzurePipelines/AzurePipelinesCommands.cs b/src/Cake.Common/Build/AzurePipelines/AzurePipelinesCommands.cs index ecef614c78..23520230c9 100644 --- a/src/Cake.Common/Build/AzurePipelines/AzurePipelinesCommands.cs +++ b/src/Cake.Common/Build/AzurePipelines/AzurePipelinesCommands.cs @@ -18,6 +18,7 @@ namespace Cake.Common.Build.AzurePipelines /// public sealed class AzurePipelinesCommands : IAzurePipelinesCommands { + private const string FormatPrefix = "##["; private const string MessagePrefix = "##vso["; private const string MessagePostfix = "]"; @@ -69,6 +70,24 @@ public void WriteError(string message, AzurePipelinesMessageData data) WriteLoggingCommand("task.logissue", properties, message); } + /// + public void BeginGroup(string name) + { + WriteFormatCommand("group", name); + } + + /// + public void EndGroup() + { + WriteFormatCommand("endgroup", string.Empty); + } + + /// + public void Section(string name) + { + WriteFormatCommand("section", name); + } + /// public void SetProgress(int progress, string currentOperation) { @@ -287,9 +306,14 @@ public void PublishCodeCoverage(FilePath summaryFilePath, Action(), value); + _writer.Write("{0}{1}{2}{3}", MessagePrefix, actionName, MessagePostfix, value); } private void WriteLoggingCommand(string actionName, Dictionary properties, string value) diff --git a/src/Cake.Common/Build/AzurePipelines/AzurePipelinesDisposableExtensions.cs b/src/Cake.Common/Build/AzurePipelines/AzurePipelinesDisposableExtensions.cs new file mode 100644 index 0000000000..80d90c2b5e --- /dev/null +++ b/src/Cake.Common/Build/AzurePipelines/AzurePipelinesDisposableExtensions.cs @@ -0,0 +1,56 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +namespace Cake.Common.Build.AzurePipelines +{ + /// + /// A set of extensions for allowing "using" with Azure Pipelines "blocks". + /// + public static class AzurePipelinesDisposableExtensions + { + /// + /// Groups Azure Pipelines output. + /// + /// The Azure Pipelines Commands. + /// The name. + /// An . + public static IDisposable Group(this IAzurePipelinesCommands azurePipelinesCommands, string name) + { + ArgumentNullException.ThrowIfNull(name); + + azurePipelinesCommands.BeginGroup(name); + return new AzurePipelinesActionDisposable(azurePipelinesCommands, apc => apc.EndGroup()); + } + + /// + /// Disposable helper for writing Azure Pipelines message blocks. + /// + internal sealed class AzurePipelinesActionDisposable : IDisposable + { + private readonly Action _disposeAction; + private readonly T _instance; + + /// + /// Initializes a new instance of the class. + /// + /// The instance. + /// The dispose action. + public AzurePipelinesActionDisposable(T instance, Action disposeAction) + { + _instance = instance; + _disposeAction = disposeAction; + } + + /// + /// Calls dispose action. + /// + public void Dispose() + { + _disposeAction(_instance); + } + } + } +} diff --git a/src/Cake.Common/Build/AzurePipelines/IAzurePipelinesCommands.cs b/src/Cake.Common/Build/AzurePipelines/IAzurePipelinesCommands.cs index 9adf93515b..0ca0beda1a 100644 --- a/src/Cake.Common/Build/AzurePipelines/IAzurePipelinesCommands.cs +++ b/src/Cake.Common/Build/AzurePipelines/IAzurePipelinesCommands.cs @@ -39,6 +39,23 @@ public interface IAzurePipelinesCommands /// The message data. void WriteError(string message, AzurePipelinesMessageData data); + /// + /// Begin a collapsible group. + /// + /// The name of the group. + public void BeginGroup(string name); + + /// + /// End a collapsible group. + /// + public void EndGroup(); + + /// + /// Log section. + /// + /// The name of the section. + public void Section(string name); + /// /// Set progress and current operation for current task. /// diff --git a/src/Cake.Frosting.Template/templates/cakefrosting/build/Build.csproj b/src/Cake.Frosting.Template/templates/cakefrosting/build/Build.csproj index dde8fef1e5..287fbda94c 100644 --- a/src/Cake.Frosting.Template/templates/cakefrosting/build/Build.csproj +++ b/src/Cake.Frosting.Template/templates/cakefrosting/build/Build.csproj @@ -5,6 +5,6 @@ $(MSBuildProjectDirectory) - + \ No newline at end of file diff --git a/tests/integration/Cake.Common/Build/AzurePipelines/AzurePipelinesProvider.cake b/tests/integration/Cake.Common/Build/AzurePipelines/AzurePipelinesProvider.cake new file mode 100644 index 0000000000..36a1e45dbb --- /dev/null +++ b/tests/integration/Cake.Common/Build/AzurePipelines/AzurePipelinesProvider.cake @@ -0,0 +1,22 @@ +Task("Cake.Common.Build.AzurePipelinesProvider.Commands.Group") + .Does(() => { + using (AzurePipelines.Commands.Group("Cake Group")) + { + Console.WriteLine("This is inside a group"); + } +}); + +Task("Cake.Common.Build.AzurePipelinesProvider.Commands.Section") + .Does(() => { + AzurePipelines.Commands.Section("Cake Section"); +}); + + +var azurePipelinesProviderTask = Task("Cake.Common.Build.AzurePipelinesProvider"); + +if(AzurePipelines.IsRunningOnAzurePipelines) +{ + azurePipelinesProviderTask + .IsDependentOn("Cake.Common.Build.AzurePipelinesProvider.Commands.Group") + .IsDependentOn("Cake.Common.Build.AzurePipelinesProvider.Commands.Section"); +} \ No newline at end of file diff --git a/tests/integration/Cake.Common/Build/BuildSystemAliases.cake b/tests/integration/Cake.Common/Build/BuildSystemAliases.cake index aeceb7d274..1bb353db17 100644 --- a/tests/integration/Cake.Common/Build/BuildSystemAliases.cake +++ b/tests/integration/Cake.Common/Build/BuildSystemAliases.cake @@ -1,4 +1,5 @@ #load "GitHubActions/GitHubActionsProvider.cake" +#load "AzurePipelines/AzurePipelinesProvider.cake" Task("Cake.Common.Build.BuildSystemAliases.BuildProvider") .DoesForEach( @@ -10,4 +11,5 @@ Task("Cake.Common.Build.BuildSystemAliases.BuildProvider") Task("Cake.Common.Build.BuildSystemAliases") .IsDependentOn("Cake.Common.Build.BuildSystemAliases.BuildProvider") - .IsDependentOn("Cake.Common.Build.GitHubActionsProvider"); \ No newline at end of file + .IsDependentOn("Cake.Common.Build.GitHubActionsProvider") + .IsDependentOn("Cake.Common.Build.AzurePipelinesProvider"); \ No newline at end of file From 4ae30f34e08a8b8cdd4b307f3b689e42d385f18f Mon Sep 17 00:00:00 2001 From: moljac Date: Sun, 1 Oct 2023 22:23:04 +0200 Subject: [PATCH 13/23] File type check on macosx (if file is "dylib") (#4206) * added file type check on macosx (if file is "dylib" AKA has "dylib" extension) * Added unit test and fixes for empty path * refactored to test Path and suffix ("extension") GetExtension throws * inclusively covering all PE extensions (not excluding dylib only) * fixing tests accoring new logic (reverting to old) * style fixes * Update src/Cake.Core/IO/FileExtensions.cs Co-authored-by: Mattias Karlsson * Add `.` to extensions Co-authored-by: Mattias Karlsson --------- Co-authored-by: Mattias Karlsson --- .../Unit/IO/FileExtensionsTests.cs | 15 +++++++++++++ src/Cake.Core/IO/FileExtensions.cs | 22 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/Cake.Core.Tests/Unit/IO/FileExtensionsTests.cs b/src/Cake.Core.Tests/Unit/IO/FileExtensionsTests.cs index 176c0aa200..4a0fc5f3f3 100644 --- a/src/Cake.Core.Tests/Unit/IO/FileExtensionsTests.cs +++ b/src/Cake.Core.Tests/Unit/IO/FileExtensionsTests.cs @@ -297,6 +297,21 @@ public void Should_Return_False_When_File_Is_Not_A_Valid_PE() // Then Assert.False(FileExtensions.IsClrAssembly(file)); } + + [Fact] + public void Should_Return_False_When_File_Is_MacOS_MachO_dylib() + { + // Given + var file = Substitute.For(); + + // When + file.Exists.Returns(true); + file.Path.Returns(new string("fullname.dylib")); + file.Length.Returns(_invalidPeBytes.Length); + + // Then + Assert.False(FileExtensions.IsClrAssembly(file)); + } } } } \ No newline at end of file diff --git a/src/Cake.Core/IO/FileExtensions.cs b/src/Cake.Core/IO/FileExtensions.cs index c504962157..f42df8b3df 100644 --- a/src/Cake.Core/IO/FileExtensions.cs +++ b/src/Cake.Core/IO/FileExtensions.cs @@ -116,6 +116,28 @@ public static bool IsClrAssembly(this IFile file) return false; } + // Is known extension? + switch (file.Path?.GetExtension().ToLowerInvariant()) + { + case ".dll": + case ".exe": + case ".sys": + case ".tsp": + case ".acm": + case ".ax": + case ".cpl": + case ".drv": + case ".efi": + case ".mui": + case ".ocx": + case ".scr": + case null: + break; + + default: + return false; + } + using (var fs = file.OpenRead()) { using (var reader = new System.IO.BinaryReader(fs)) From 27a28a52dc23d2d9fa5577ca6d2061052d13bc18 Mon Sep 17 00:00:00 2001 From: Roman Marusyk Date: Tue, 10 Oct 2023 22:35:16 +0300 Subject: [PATCH 14/23] Add DotNetAddPackage alias for dotnet add package command (#4195) * Add DotNetAddPackage alias for dotnet add package command * Add an integration test for DotNetAddPackage alias * Add an integration test for DotNetAddPackage alias * Change the package in integration test for DotNetAddPackage alias --- .../Package/Add/DotNetPackageAdderFixture.cs | 21 ++++ .../Package/Add/DotNetPackageAdderTests.cs | 119 ++++++++++++++++++ src/Cake.Common/Tools/DotNet/DotNetAliases.cs | 100 +++++++++++++++ .../Package/Add/DotNetPackageAddSettings.cs | 54 ++++++++ .../DotNet/Package/Add/DotNetPackageAdder.cs | 116 +++++++++++++++++ .../Tools/DotNet/DotNetAliases.cake | 24 +++- 6 files changed, 433 insertions(+), 1 deletion(-) create mode 100644 src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Add/DotNetPackageAdderFixture.cs create mode 100644 src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs create mode 100644 src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAddSettings.cs create mode 100644 src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAdder.cs diff --git a/src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Add/DotNetPackageAdderFixture.cs b/src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Add/DotNetPackageAdderFixture.cs new file mode 100644 index 0000000000..2c2b1fa842 --- /dev/null +++ b/src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Add/DotNetPackageAdderFixture.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Cake.Common.Tools.DotNet.Package.Add; + +namespace Cake.Common.Tests.Fixtures.Tools.DotNet.Package.Add +{ + internal sealed class DotNetPackageAdderFixture : DotNetFixture + { + public string PackageName { get; set; } + + public string Project { get; set; } + + protected override void RunTool() + { + var tool = new DotNetPackageAdder(FileSystem, Environment, ProcessRunner, Tools); + tool.Add(PackageName, Project, Settings); + } + } +} diff --git a/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs b/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs new file mode 100644 index 0000000000..9eef45bc11 --- /dev/null +++ b/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs @@ -0,0 +1,119 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Cake.Common.Tests.Fixtures.Tools.DotNet.Package.Add; +using Cake.Common.Tests.Fixtures.Tools.DotNet.SDKCheck; +using Cake.Common.Tests.Fixtures.Tools.DotNet.Workload.Restore; +using Cake.Common.Tools.DotNet; +using Cake.Common.Tools.DotNet.Package.Add; +using Cake.Testing; +using Xunit; + +namespace Cake.Common.Tests.Unit.Tools.DotNet.Package.Add +{ + public sealed class DotNetPackageAdderTests + { + public sealed class TheAddMethod + { + [Fact] + public void Should_Throw_If_Process_Was_Not_Started() + { + // Given + var fixture = new DotNetPackageAdderFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.GivenProcessCannotStart(); + + // When + var result = Record.Exception(() => fixture.Run()); + + // Then + AssertEx.IsCakeException(result, ".NET CLI: Process was not started."); + } + + [Fact] + public void Should_Throw_If_Process_Has_A_Non_Zero_Exit_Code() + { + // Given + var fixture = new DotNetPackageAdderFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.GivenProcessExitsWithCode(1); + + // When + var result = Record.Exception(() => fixture.Run()); + + // Then + AssertEx.IsCakeException(result, ".NET CLI: Process returned an error (exit code 1)."); + } + + [Fact] + public void Should_Throw_If_Settings_Are_Null() + { + // Given + var fixture = new DotNetPackageAdderFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.Settings = null; + fixture.GivenDefaultToolDoNotExist(); + + // When + var result = Record.Exception(() => fixture.Run()); + + // Then + AssertEx.IsArgumentNullException(result, "settings"); + } + + [Fact] + public void Should_Throw_If_PackageName_Is_Null() + { + // Given + var fixture = new DotNetPackageAdderFixture(); + fixture.PackageName = null; + fixture.GivenDefaultToolDoNotExist(); + + // When + var result = Record.Exception(() => fixture.Run()); + + // Then + AssertEx.IsArgumentNullException(result, "packageName"); + } + + [Fact] + public void Should_Add_Project_Argument() + { + // Given + var fixture = new DotNetPackageAdderFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.Project = "ToDo.csproj"; + + // When + var result = fixture.Run(); + + // Then + Assert.Equal("add \"ToDo.csproj\" package Microsoft.AspNetCore.StaticFiles", result.Args); + } + + [Fact] + public void Should_Add_Additional_Arguments() + { + // Given + var fixture = new DotNetPackageAdderFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.Settings.Framework = "net7.0"; + fixture.Settings.Interactive = true; + fixture.Settings.NoRestore = true; + fixture.Settings.PackageDirectory = "./src/project"; + fixture.Settings.Prerelease = true; + fixture.Settings.Source = "http://www.nuget.org/api/v2/package"; + fixture.Settings.Version = "1.0.0"; + fixture.Settings.Verbosity = DotNetVerbosity.Diagnostic; + + // When + var result = fixture.Run(); + + // Then + var expected = "add package Microsoft.AspNetCore.StaticFiles --framework net7.0 --interactive --no-restore --package-directory \"/Working/src/project\" --prerelease --source \"http://www.nuget.org/api/v2/package\" --version \"1.0.0\" --verbosity diagnostic"; + Assert.Equal(expected, result.Args); + } + } + } +} diff --git a/src/Cake.Common/Tools/DotNet/DotNetAliases.cs b/src/Cake.Common/Tools/DotNet/DotNetAliases.cs index 4e6dedf7ca..749508588b 100644 --- a/src/Cake.Common/Tools/DotNet/DotNetAliases.cs +++ b/src/Cake.Common/Tools/DotNet/DotNetAliases.cs @@ -15,6 +15,7 @@ using Cake.Common.Tools.DotNet.NuGet.Push; using Cake.Common.Tools.DotNet.NuGet.Source; using Cake.Common.Tools.DotNet.Pack; +using Cake.Common.Tools.DotNet.Package.Add; using Cake.Common.Tools.DotNet.Publish; using Cake.Common.Tools.DotNet.Restore; using Cake.Common.Tools.DotNet.Run; @@ -2285,5 +2286,104 @@ public static void DotNetWorkloadRestore(this ICakeContext context, string proje var restorer = new DotNetWorkloadRestorer(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); restorer.Restore(project, settings); } + + /// + /// Adds or updates a package reference in a project file. + /// + /// The context. + /// The package reference to add. + /// + /// + /// DotNetAddPackage("Cake.FileHelper"); + /// + /// + [CakeMethodAlias] + [CakeAliasCategory("AddPackage")] + [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] + public static void DotNetAddPackage(this ICakeContext context, string packageName) + { + context.DotNetAddPackage(packageName, null, null); + } + + /// + /// Adds or updates a package reference in a project file. + /// + /// The context. + /// The package reference to add. + /// The project or solution file to install workloads for. + /// + /// + /// DotNetAddPackage("Cake.FileHelper", "ToDo.csproj"); + /// + /// + [CakeMethodAlias] + [CakeAliasCategory("AddPackage")] + [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] + public static void DotNetAddPackage(this ICakeContext context, string packageName, string project) + { + context.DotNetAddPackage(packageName, project, null); + } + + /// + /// Adds or updates a package reference in a project file. + /// + /// The context. + /// The package reference to add. + /// The settings. + /// + /// + /// var settings = new DotNetPackageAddSettings + /// { + /// NoRestore = true, + /// Version = "6.1.3" + /// }; + /// + /// DotNetAddPackage("Cake.FileHelper", settings); + /// + /// + [CakeMethodAlias] + [CakeAliasCategory("AddPackage")] + [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] + public static void DotNetAddPackage(this ICakeContext context, string packageName, DotNetPackageAddSettings settings) + { + context.DotNetAddPackage(packageName, null, settings); + } + + /// + /// Adds or updates a package reference in a project file. + /// + /// The context. + /// The package reference to add. + /// The project or solution file to install workloads for. + /// The settings. + /// + /// + /// var settings = new DotNetPackageAddSettings + /// { + /// NoRestore = true, + /// Version = "6.1.3" + /// }; + /// + /// DotNetAddPackage("Cake.FileHelper", "ToDo.csproj", settings); + /// + /// + [CakeMethodAlias] + [CakeAliasCategory("AddPackage")] + [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] + public static void DotNetAddPackage(this ICakeContext context, string packageName, string project, DotNetPackageAddSettings settings) + { + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (settings is null) + { + settings = new DotNetPackageAddSettings(); + } + + var adder = new DotNetPackageAdder(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); + adder.Add(packageName, project, settings); + } } } diff --git a/src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAddSettings.cs b/src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAddSettings.cs new file mode 100644 index 0000000000..cd52cc571e --- /dev/null +++ b/src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAddSettings.cs @@ -0,0 +1,54 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Cake.Core.IO; + +namespace Cake.Common.Tools.DotNet.Package.Add +{ + /// + /// Contains settings used by . + /// + public sealed class DotNetPackageAddSettings : DotNetSettings + { + /// + /// Gets or sets a specific framework to compile. + /// + public string Framework { get; set; } + + /// + /// Gets or sets a value indicating whether to allow the command to stop and wait for user input or action. + /// For example, to complete authentication. + /// + public bool Interactive { get; set; } + + /// + /// Gets or sets a value indicating whether to not do implicit NuGet package restore. + /// This makes run faster, but requires restore to be done before run is executed. + /// + public bool NoRestore { get; set; } + + /// + /// Gets or sets the directory path where to restore the packages. + /// The default package restore location is %userprofile%\.nuget\packages on Windows and ~/.nuget/packages on macOS and Linux. + /// + public DirectoryPath PackageDirectory { get; set; } + + /// + /// Gets or sets a value indicating whether to allow installation of prerelease packages. + /// Available since .NET Core 5 SDK. + /// + public bool Prerelease { get; set; } + + /// + /// Gets or sets the URI of the NuGet package source to use during the restore operation. + /// + public string Source { get; set; } + + /// + /// Gets or sets the version of the package to install. + /// If none specified, the latest will be used. + /// + public string Version { get; set; } + } +} diff --git a/src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAdder.cs b/src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAdder.cs new file mode 100644 index 0000000000..299a21838a --- /dev/null +++ b/src/Cake.Common/Tools/DotNet/Package/Add/DotNetPackageAdder.cs @@ -0,0 +1,116 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Cake.Core; +using Cake.Core.IO; +using Cake.Core.Tooling; + +namespace Cake.Common.Tools.DotNet.Package.Add +{ + /// + /// .NET package adder. + /// + public sealed class DotNetPackageAdder : DotNetTool + { + private readonly ICakeEnvironment _environment; + + /// + /// Initializes a new instance of the class. + /// + /// The file system. + /// The environment. + /// The process runner. + /// The tool locator. + public DotNetPackageAdder( + IFileSystem fileSystem, + ICakeEnvironment environment, + IProcessRunner processRunner, + IToolLocator tools) : base(fileSystem, environment, processRunner, tools) + { + _environment = environment; + } + + /// + /// Adds or updates a package reference in a project file. + /// + /// The package reference to add. + /// The target project file path. If not specified, the command searches the current directory for one. + /// The settings. + public void Add(string packageName, string project, DotNetPackageAddSettings settings) + { + if (packageName == null) + { + throw new ArgumentNullException(nameof(packageName)); + } + if (settings == null) + { + throw new ArgumentNullException(nameof(settings)); + } + + RunCommand(settings, GetArguments(packageName, project, settings)); + } + + private ProcessArgumentBuilder GetArguments(string packageName, string project, DotNetPackageAddSettings settings) + { + var builder = CreateArgumentBuilder(settings); + + builder.Append("add"); + + // Project path + if (project != null) + { + builder.AppendQuoted(project); + } + + // Package Name + builder.AppendSwitch("package", packageName); + + // Framework + if (!string.IsNullOrEmpty(settings.Framework)) + { + builder.AppendSwitch("--framework", settings.Framework); + } + + // Interactive + if (settings.Interactive) + { + builder.Append("--interactive"); + } + + // No Restore + if (settings.NoRestore) + { + builder.Append("--no-restore"); + } + + // Package Directory + if (settings.PackageDirectory != null) + { + builder.Append("--package-directory"); + builder.AppendQuoted(settings.PackageDirectory.MakeAbsolute(_environment).FullPath); + } + + // Prerelease + if (settings.Prerelease) + { + builder.Append("--prerelease"); + } + + // Source + if (!string.IsNullOrEmpty(settings.Source)) + { + builder.AppendSwitchQuoted("--source", settings.Source); + } + + // Version + if (!string.IsNullOrEmpty(settings.Version)) + { + builder.AppendSwitchQuoted("--version", settings.Version); + } + + return builder; + } + } +} diff --git a/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake b/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake index 68b058a6d6..acfa1a1ad2 100644 --- a/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake +++ b/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake @@ -251,7 +251,7 @@ Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetFormat") var project = path.CombineWithFilePath("hwapp/hwapp.csproj"); // When - DotNetFormat(project.FullPath); + DotNetFormat(project.FullPath); }); Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetSDKCheck") @@ -308,6 +308,27 @@ Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetWorkloadRestore") DotNetWorkloadRestore(project.FullPath); }); +Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetAddPackage") + .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.Setup") + .Does(() => +{ + // Given + var path = Paths.Temp.Combine("./Cake.Common/Tools/DotNet"); + var project = path.CombineWithFilePath("hwapp/hwapp.csproj"); + var package = "grok.net"; + + // When + DotNetAddPackage(package, project.FullPath); + + var value = XmlPeek( + project.FullPath, + $"/Project/ItemGroup/PackageReference[@Include='{package}']/@Include" + ); + + // Then + Assert.Equal(package, value); +}); + Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetBuildServerShutdown") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetRestore") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetBuild") @@ -329,6 +350,7 @@ Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetBuildServerShutdown") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetWorkloadRepair") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetWorkloadUpdate") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetWorkloadRestore") + .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetAddPackage") .Does(() => { // When From 863198c695e29a8d5de14221aabc643340575b9c Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Tue, 10 Oct 2023 21:43:27 +0200 Subject: [PATCH 15/23] (GH-4226) Update .NET SDK to 7.0.402 * fixes #4226 --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index b531084de3..54fa47f7d5 100644 --- a/global.json +++ b/global.json @@ -3,7 +3,7 @@ "src" ], "sdk": { - "version": "7.0.401", + "version": "7.0.402", "rollForward": "latestFeature" } } \ No newline at end of file From 9915abf4f8594f698b715940e3fd57989dffb3b4 Mon Sep 17 00:00:00 2001 From: Roman Marusyk Date: Mon, 30 Oct 2023 09:29:34 +0200 Subject: [PATCH 16/23] Add DotNetRemovePackage alias for dotnet remove package command (#4228) --- .../Remove/DotNetPackageRemoverFixture.cs | 21 +++++ .../Package/Add/DotNetPackageAdderTests.cs | 3 - .../Remove/DotNetPackageRemoverTests.cs | 77 +++++++++++++++++++ src/Cake.Common/Tools/DotNet/DotNetAliases.cs | 56 ++++++++++++-- .../Remove/DotNetPackageRemoveSettings.cs | 13 ++++ .../Package/Remove/DotNetPackageRemover.cs | 69 +++++++++++++++++ .../Tools/DotNet/DotNetAliases.cake | 27 +++++++ 7 files changed, 257 insertions(+), 9 deletions(-) create mode 100644 src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Remove/DotNetPackageRemoverFixture.cs create mode 100644 src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Remove/DotNetPackageRemoverTests.cs create mode 100644 src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemoveSettings.cs create mode 100644 src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemover.cs diff --git a/src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Remove/DotNetPackageRemoverFixture.cs b/src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Remove/DotNetPackageRemoverFixture.cs new file mode 100644 index 0000000000..4d259b0ae9 --- /dev/null +++ b/src/Cake.Common.Tests/Fixtures/Tools/DotNet/Package/Remove/DotNetPackageRemoverFixture.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Cake.Common.Tools.DotNet.Package.Remove; + +namespace Cake.Common.Tests.Fixtures.Tools.DotNet.Package.Remove +{ + internal sealed class DotNetPackageRemoverFixture : DotNetFixture + { + public string PackageName { get; set; } + + public string Project { get; set; } + + protected override void RunTool() + { + var tool = new DotNetPackageRemover(FileSystem, Environment, ProcessRunner, Tools); + tool.Remove(PackageName, Project); + } + } +} diff --git a/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs b/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs index 9eef45bc11..f447412a7f 100644 --- a/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs +++ b/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Add/DotNetPackageAdderTests.cs @@ -3,10 +3,7 @@ // See the LICENSE file in the project root for more information. using Cake.Common.Tests.Fixtures.Tools.DotNet.Package.Add; -using Cake.Common.Tests.Fixtures.Tools.DotNet.SDKCheck; -using Cake.Common.Tests.Fixtures.Tools.DotNet.Workload.Restore; using Cake.Common.Tools.DotNet; -using Cake.Common.Tools.DotNet.Package.Add; using Cake.Testing; using Xunit; diff --git a/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Remove/DotNetPackageRemoverTests.cs b/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Remove/DotNetPackageRemoverTests.cs new file mode 100644 index 0000000000..b97f3d37b3 --- /dev/null +++ b/src/Cake.Common.Tests/Unit/Tools/DotNet/Package/Remove/DotNetPackageRemoverTests.cs @@ -0,0 +1,77 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Cake.Common.Tests.Fixtures.Tools.DotNet.Package.Remove; +using Cake.Common.Tools.DotNet; +using Cake.Testing; +using Xunit; + +namespace Cake.Common.Tests.Unit.Tools.DotNet.Package.Remove +{ + public sealed class DotNetPackageRemoverTests + { + public sealed class TheRemoveMethod + { + [Fact] + public void Should_Throw_If_Process_Was_Not_Started() + { + // Given + var fixture = new DotNetPackageRemoverFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.GivenProcessCannotStart(); + + // When + var result = Record.Exception(() => fixture.Run()); + + // Then + AssertEx.IsCakeException(result, ".NET CLI: Process was not started."); + } + + [Fact] + public void Should_Throw_If_Process_Has_A_Non_Zero_Exit_Code() + { + // Given + var fixture = new DotNetPackageRemoverFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.GivenProcessExitsWithCode(1); + + // When + var result = Record.Exception(() => fixture.Run()); + + // Then + AssertEx.IsCakeException(result, ".NET CLI: Process returned an error (exit code 1)."); + } + + [Fact] + public void Should_Throw_If_PackageName_Is_Null() + { + // Given + var fixture = new DotNetPackageRemoverFixture(); + fixture.PackageName = null; + fixture.GivenDefaultToolDoNotExist(); + + // When + var result = Record.Exception(() => fixture.Run()); + + // Then + AssertEx.IsArgumentNullException(result, "packageName"); + } + + [Fact] + public void Should_Add_Project_Argument() + { + // Given + var fixture = new DotNetPackageRemoverFixture(); + fixture.PackageName = "Microsoft.AspNetCore.StaticFiles"; + fixture.Project = "ToDo.csproj"; + + // When + var result = fixture.Run(); + + // Then + Assert.Equal("remove \"ToDo.csproj\" package Microsoft.AspNetCore.StaticFiles", result.Args); + } + } + } +} diff --git a/src/Cake.Common/Tools/DotNet/DotNetAliases.cs b/src/Cake.Common/Tools/DotNet/DotNetAliases.cs index 749508588b..520f7c0b08 100644 --- a/src/Cake.Common/Tools/DotNet/DotNetAliases.cs +++ b/src/Cake.Common/Tools/DotNet/DotNetAliases.cs @@ -16,6 +16,7 @@ using Cake.Common.Tools.DotNet.NuGet.Source; using Cake.Common.Tools.DotNet.Pack; using Cake.Common.Tools.DotNet.Package.Add; +using Cake.Common.Tools.DotNet.Package.Remove; using Cake.Common.Tools.DotNet.Publish; using Cake.Common.Tools.DotNet.Restore; using Cake.Common.Tools.DotNet.Run; @@ -2298,7 +2299,7 @@ public static void DotNetWorkloadRestore(this ICakeContext context, string proje /// /// [CakeMethodAlias] - [CakeAliasCategory("AddPackage")] + [CakeAliasCategory("Package")] [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] public static void DotNetAddPackage(this ICakeContext context, string packageName) { @@ -2310,14 +2311,14 @@ public static void DotNetAddPackage(this ICakeContext context, string packageNam /// /// The context. /// The package reference to add. - /// The project or solution file to install workloads for. + /// The target project file path. /// /// /// DotNetAddPackage("Cake.FileHelper", "ToDo.csproj"); /// /// [CakeMethodAlias] - [CakeAliasCategory("AddPackage")] + [CakeAliasCategory("Package")] [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] public static void DotNetAddPackage(this ICakeContext context, string packageName, string project) { @@ -2342,7 +2343,7 @@ public static void DotNetAddPackage(this ICakeContext context, string packageNam /// /// [CakeMethodAlias] - [CakeAliasCategory("AddPackage")] + [CakeAliasCategory("Package")] [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] public static void DotNetAddPackage(this ICakeContext context, string packageName, DotNetPackageAddSettings settings) { @@ -2354,7 +2355,7 @@ public static void DotNetAddPackage(this ICakeContext context, string packageNam /// /// The context. /// The package reference to add. - /// The project or solution file to install workloads for. + /// The target project file path. /// The settings. /// /// @@ -2368,7 +2369,7 @@ public static void DotNetAddPackage(this ICakeContext context, string packageNam /// /// [CakeMethodAlias] - [CakeAliasCategory("AddPackage")] + [CakeAliasCategory("Package")] [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Add")] public static void DotNetAddPackage(this ICakeContext context, string packageName, string project, DotNetPackageAddSettings settings) { @@ -2385,5 +2386,48 @@ public static void DotNetAddPackage(this ICakeContext context, string packageNam var adder = new DotNetPackageAdder(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); adder.Add(packageName, project, settings); } + + /// + /// Removes package reference from a project file. + /// + /// The context. + /// The package reference to remove. + /// + /// + /// DotNetRemovePackage("Cake.FileHelper"); + /// + /// + [CakeMethodAlias] + [CakeAliasCategory("Package")] + [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Remove")] + public static void DotNetRemovePackage(this ICakeContext context, string packageName) + { + context.DotNetRemovePackage(packageName, null); + } + + /// + /// Removes package reference from a project file. + /// + /// The context. + /// The package reference to remove. + /// The target project file path. + /// + /// + /// DotNetRemovePackage("Cake.FileHelper", "ToDo.csproj"); + /// + /// + [CakeMethodAlias] + [CakeAliasCategory("Package")] + [CakeNamespaceImport("Cake.Common.Tools.DotNet.Package.Remove")] + public static void DotNetRemovePackage(this ICakeContext context, string packageName, string project) + { + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + var adder = new DotNetPackageRemover(context.FileSystem, context.Environment, context.ProcessRunner, context.Tools); + adder.Remove(packageName, project); + } } } diff --git a/src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemoveSettings.cs b/src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemoveSettings.cs new file mode 100644 index 0000000000..31462c35ef --- /dev/null +++ b/src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemoveSettings.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Cake.Common.Tools.DotNet.Package.Remove +{ + /// + /// Contains settings used by . + /// + public sealed class DotNetPackageRemoveSettings : DotNetSettings + { + } +} diff --git a/src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemover.cs b/src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemover.cs new file mode 100644 index 0000000000..0216234930 --- /dev/null +++ b/src/Cake.Common/Tools/DotNet/Package/Remove/DotNetPackageRemover.cs @@ -0,0 +1,69 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Cake.Core; +using Cake.Core.IO; +using Cake.Core.Tooling; + +namespace Cake.Common.Tools.DotNet.Package.Remove +{ + /// + /// .NET package remover. + /// + public sealed class DotNetPackageRemover : DotNetTool + { + private readonly ICakeEnvironment _environment; + + /// + /// Initializes a new instance of the class. + /// + /// The file system. + /// The environment. + /// The process runner. + /// The tool locator. + public DotNetPackageRemover( + IFileSystem fileSystem, + ICakeEnvironment environment, + IProcessRunner processRunner, + IToolLocator tools) : base(fileSystem, environment, processRunner, tools) + { + _environment = environment; + } + + /// + /// Removes package reference from a project file. + /// + /// The package reference to remove. + /// The target project file path. If not specified, the command searches the current directory for one. + public void Remove(string packageName, string project) + { + if (packageName == null) + { + throw new ArgumentNullException(nameof(packageName)); + } + + var settings = new DotNetPackageRemoveSettings(); + RunCommand(settings, GetArguments(packageName, project, settings)); + } + + private ProcessArgumentBuilder GetArguments(string packageName, string project, DotNetPackageRemoveSettings settings) + { + var builder = CreateArgumentBuilder(settings); + + builder.Append("remove"); + + // Project path + if (project != null) + { + builder.AppendQuoted(project); + } + + // Package Name + builder.AppendSwitch("package", packageName); + + return builder; + } + } +} diff --git a/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake b/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake index acfa1a1ad2..66e835d469 100644 --- a/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake +++ b/tests/integration/Cake.Common/Tools/DotNet/DotNetAliases.cake @@ -329,6 +329,32 @@ Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetAddPackage") Assert.Equal(package, value); }); +Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetRemovePackage") + .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.Setup") + .Does(() => +{ + // Given + var path = Paths.Temp.Combine("./Cake.Common/Tools/DotNet"); + var project = path.CombineWithFilePath("hwapp/hwapp.csproj"); + var package = "grok.net"; + var value = XmlPeek( + project.FullPath, + $"/Project/ItemGroup/PackageReference[@Include='{package}']/@Include" + ); + Assert.Equal(package, value); + + // When + DotNetRemovePackage(package, project.FullPath); + + value = XmlPeek( + project.FullPath, + $"/Project/ItemGroup/PackageReference[@Include='{package}']/@Include" + ); + + // Then + Assert.Null(value); +}); + Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetBuildServerShutdown") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetRestore") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetBuild") @@ -351,6 +377,7 @@ Task("Cake.Common.Tools.DotNet.DotNetAliases.DotNetBuildServerShutdown") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetWorkloadUpdate") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetWorkloadRestore") .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetAddPackage") + .IsDependentOn("Cake.Common.Tools.DotNet.DotNetAliases.DotNetRemovePackage") .Does(() => { // When From 0da7e641f17a8f6459ed02ac4c6304829d244456 Mon Sep 17 00:00:00 2001 From: Frank Ray <52075808+FrankRay78@users.noreply.github.com> Date: Tue, 24 Oct 2023 15:34:04 +0100 Subject: [PATCH 17/23] Within Cake.Commands.DefaultCommand.Execute(...), explicitly create the CakeArguments from CommandContext.Remaining, adding in the DefaultCommandSettings.Recompile flag, if necessary. Follows the same pattern already established in Cake.Frosting.Internal.DefaultCommand --- src/Cake.Cli/Cake.Cli.csproj | 4 +-- .../Internal/Commands/DefaultCommand.cs | 2 +- .../Fixtures/BuildFeatureFixture.cs | 11 ++++-- src/Cake.Tests/Unit/ProgramTests.cs | 8 ++--- .../Utilities/TestContainerConfigurator.cs | 4 +-- src/Cake/Commands/DefaultCommand.cs | 35 +++++++++++++++++-- .../Bootstrapping/BootstrapFeature.cs | 4 +-- src/Cake/Features/Building/BuildFeature.cs | 6 ++-- src/Cake/Features/CakeFeature.cs | 6 ++-- .../Infrastructure/ContainerConfigurator.cs | 4 +-- .../Infrastructure/IContainerConfigurator.cs | 4 +-- 11 files changed, 62 insertions(+), 26 deletions(-) diff --git a/src/Cake.Cli/Cake.Cli.csproj b/src/Cake.Cli/Cake.Cli.csproj index 48b5859f13..64a6fd31e2 100644 --- a/src/Cake.Cli/Cake.Cli.csproj +++ b/src/Cake.Cli/Cake.Cli.csproj @@ -19,7 +19,7 @@ - - + + \ No newline at end of file diff --git a/src/Cake.Frosting/Internal/Commands/DefaultCommand.cs b/src/Cake.Frosting/Internal/Commands/DefaultCommand.cs index cce55ad5de..6a172970a2 100644 --- a/src/Cake.Frosting/Internal/Commands/DefaultCommand.cs +++ b/src/Cake.Frosting/Internal/Commands/DefaultCommand.cs @@ -82,6 +82,7 @@ public override int Execute(CommandContext context, DefaultCommandSettings setti private static CakeArguments CreateCakeArguments(IRemainingArguments remainingArguments, DefaultCommandSettings settings) { var arguments = new Dictionary>(StringComparer.OrdinalIgnoreCase); + // Keep the actual remaining arguments in the cake arguments foreach (var group in remainingArguments.Parsed) { @@ -98,7 +99,6 @@ private static CakeArguments CreateCakeArguments(IRemainingArguments remainingAr { arguments[targetArgumentName] = new List(); } - foreach (var target in settings.Targets) { arguments[targetArgumentName].Add(target); diff --git a/src/Cake.Tests/Fixtures/BuildFeatureFixture.cs b/src/Cake.Tests/Fixtures/BuildFeatureFixture.cs index 4c28658bc1..a17c879381 100644 --- a/src/Cake.Tests/Fixtures/BuildFeatureFixture.cs +++ b/src/Cake.Tests/Fixtures/BuildFeatureFixture.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; using Cake.Core; using Cake.Core.Composition; @@ -63,7 +65,10 @@ public BuildFeatureFixture( public BuildFeatureFixtureResult Run(BuildFeatureSettings settings, IDictionary arguments = null) { - var remaining = new FakeRemainingArguments(arguments); + var parsed = (arguments ?? new Dictionary()) + .ToLookup(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase); + + var remaining = new CakeArguments(parsed); var exitCode = ((IBuildFeature)this).Run(remaining, settings); return new BuildFeatureFixtureResult @@ -88,7 +93,7 @@ private string GetDefaultScriptContent() return builder.ToString(); } - int IBuildFeature.Run(IRemainingArguments arguments, BuildFeatureSettings settings) + int IBuildFeature.Run(ICakeArguments arguments, BuildFeatureSettings settings) { var feature = new BuildFeature(FileSystem, Environment, Bootstrapper, ModuleSearcher, Log); return feature.Run(arguments, settings); diff --git a/src/Cake.Tests/Unit/ProgramTests.cs b/src/Cake.Tests/Unit/ProgramTests.cs index 34ceaf2dc1..704bf94cd0 100644 --- a/src/Cake.Tests/Unit/ProgramTests.cs +++ b/src/Cake.Tests/Unit/ProgramTests.cs @@ -27,7 +27,7 @@ public async Task Should_Use_Default_Parameters_By_Default() // Then feature.Received(1).Run( - Arg.Any(), + Arg.Any(), Arg.Is(settings => settings.BuildHostKind == BuildHostKind.Build && settings.Debug == false && @@ -53,7 +53,7 @@ public async Task The_DryRun_Option_Should_Perform_A_Dry_Run_Of_Script(params st // Then feature.Received(1).Run( - Arg.Any(), + Arg.Any(), Arg.Is(settings => settings.BuildHostKind == BuildHostKind.DryRun)); } @@ -73,7 +73,7 @@ public async Task The_Tree_Option_Should_Show_The_Script_Tree(params string[] ar // Then feature.Received(1).Run( - Arg.Any(), + Arg.Any(), Arg.Is(settings => settings.BuildHostKind == BuildHostKind.Tree)); } @@ -93,7 +93,7 @@ public async Task The_Description_Option_Should_Show_Script_Descriptions(params // Then feature.Received(1).Run( - Arg.Any(), + Arg.Any(), Arg.Is(settings => settings.BuildHostKind == BuildHostKind.Description)); } diff --git a/src/Cake.Tests/Utilities/TestContainerConfigurator.cs b/src/Cake.Tests/Utilities/TestContainerConfigurator.cs index 9c4dcfd5ea..8e419295d0 100644 --- a/src/Cake.Tests/Utilities/TestContainerConfigurator.cs +++ b/src/Cake.Tests/Utilities/TestContainerConfigurator.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; +using Cake.Core; using Cake.Core.Composition; using Cake.Core.Configuration; using Cake.Infrastructure; -using Spectre.Console.Cli; namespace Cake.Tests.Fakes { @@ -21,7 +21,7 @@ public TestContainerConfigurator() public void Configure( ICakeContainerRegistrar registrar, ICakeConfiguration configuration, - IRemainingArguments arguments) + ICakeArguments arguments) { _decorated.Configure(registrar, configuration, arguments); diff --git a/src/Cake/Commands/DefaultCommand.cs b/src/Cake/Commands/DefaultCommand.cs index eafcfa72cf..9b860e4c38 100644 --- a/src/Cake/Commands/DefaultCommand.cs +++ b/src/Cake/Commands/DefaultCommand.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using System.Linq; using Cake.Cli; using Cake.Core; @@ -69,8 +70,10 @@ public override int Execute(CommandContext context, DefaultCommandSettings setti } } + var arguments = CreateCakeArguments(context.Remaining, settings); + // Run the build feature. - return _builder.Run(context.Remaining, new BuildFeatureSettings(host) + return _builder.Run(arguments, new BuildFeatureSettings(host) { Script = settings.Script, Verbosity = settings.Verbosity, @@ -110,11 +113,39 @@ private int PerformBootstrapping(CommandContext context, DefaultCommandSettings return 0; } - return _bootstrapper.Run(context.Remaining, new BootstrapFeatureSettings + var arguments = CreateCakeArguments(context.Remaining, settings); + + return _bootstrapper.Run(arguments, new BootstrapFeatureSettings { Script = settings.Script, Verbosity = settings.Verbosity }); } + + private static CakeArguments CreateCakeArguments(IRemainingArguments remainingArguments, DefaultCommandSettings settings) + { + var arguments = new Dictionary>(StringComparer.OrdinalIgnoreCase); + + // Keep the actual remaining arguments in the cake arguments + foreach (var group in remainingArguments.Parsed) + { + arguments[group.Key] = new List(); + foreach (var argument in group) + { + arguments[group.Key].Add(argument); + } + } + + // Fixes #4157, We have to add arguments manually which are defined within the DefaultCommandSettings type. Those are not considered "as remaining" because they could be parsed + const string recompileArgumentName = Infrastructure.Constants.Cache.InvalidateScriptCache; + if (settings.Recompile && !arguments.ContainsKey(recompileArgumentName)) + { + arguments[recompileArgumentName] = new List(); + arguments[recompileArgumentName].Add(true.ToString()); + } + + var argumentLookUp = arguments.SelectMany(a => a.Value, Tuple.Create).ToLookup(a => a.Item1.Key, a => a.Item2); + return new CakeArguments(argumentLookUp); + } } } diff --git a/src/Cake/Features/Bootstrapping/BootstrapFeature.cs b/src/Cake/Features/Bootstrapping/BootstrapFeature.cs index c3f355b94c..4c1b666c7b 100644 --- a/src/Cake/Features/Bootstrapping/BootstrapFeature.cs +++ b/src/Cake/Features/Bootstrapping/BootstrapFeature.cs @@ -17,7 +17,7 @@ namespace Cake.Features.Bootstrapping { public interface IBootstrapFeature { - int Run(IRemainingArguments arguments, BootstrapFeatureSettings settings); + int Run(ICakeArguments arguments, BootstrapFeatureSettings settings); } public sealed class BootstrapFeature : Feature, IBootstrapFeature @@ -32,7 +32,7 @@ public BootstrapFeature( _environment = environment; } - public int Run(IRemainingArguments arguments, BootstrapFeatureSettings settings) + public int Run(ICakeArguments arguments, BootstrapFeatureSettings settings) { // Fix the script path. settings.Script = settings.Script ?? new FilePath("build.cake"); diff --git a/src/Cake/Features/Building/BuildFeature.cs b/src/Cake/Features/Building/BuildFeature.cs index 1dd9b82fc6..4a8fa4ec40 100644 --- a/src/Cake/Features/Building/BuildFeature.cs +++ b/src/Cake/Features/Building/BuildFeature.cs @@ -21,7 +21,7 @@ namespace Cake.Features.Building { public interface IBuildFeature { - int Run(IRemainingArguments arguments, BuildFeatureSettings settings); + int Run(ICakeArguments arguments, BuildFeatureSettings settings); } public sealed class BuildFeature : Feature, IBuildFeature @@ -42,7 +42,7 @@ public BuildFeature( _log = log; } - public int Run(IRemainingArguments arguments, BuildFeatureSettings settings) + public int Run(ICakeArguments arguments, BuildFeatureSettings settings) { using (new ScriptAssemblyResolver(_environment, _log)) { @@ -50,7 +50,7 @@ public int Run(IRemainingArguments arguments, BuildFeatureSettings settings) } } - private int RunCore(IRemainingArguments arguments, BuildFeatureSettings settings) + private int RunCore(ICakeArguments arguments, BuildFeatureSettings settings) { // Fix the script path. settings.Script = settings.Script ?? new FilePath("build.cake"); diff --git a/src/Cake/Features/CakeFeature.cs b/src/Cake/Features/CakeFeature.cs index c9eee80edd..3d47f8bc88 100644 --- a/src/Cake/Features/CakeFeature.cs +++ b/src/Cake/Features/CakeFeature.cs @@ -33,7 +33,7 @@ public Feature( protected IContainer CreateScope( ICakeConfiguration configuration, - IRemainingArguments arguments, + ICakeArguments arguments, Action action = null) { var registrar = new AutofacTypeRegistrar(new ContainerBuilder()); @@ -45,10 +45,10 @@ protected IContainer CreateScope( } protected ICakeConfiguration ReadConfiguration( - IRemainingArguments remaining, DirectoryPath root) + ICakeArguments arguments, DirectoryPath root) { var provider = new CakeConfigurationProvider(_fileSystem, _environment); - var args = remaining.Parsed.ToDictionary(x => x.Key, x => x.FirstOrDefault() ?? string.Empty); + var args = arguments.GetArguments().ToDictionary(x => x.Key, x => x.Value?.FirstOrDefault() ?? string.Empty); return provider.CreateConfiguration(root, args); } diff --git a/src/Cake/Infrastructure/ContainerConfigurator.cs b/src/Cake/Infrastructure/ContainerConfigurator.cs index e817a84cff..f2c4f59d4e 100644 --- a/src/Cake/Infrastructure/ContainerConfigurator.cs +++ b/src/Cake/Infrastructure/ContainerConfigurator.cs @@ -24,10 +24,10 @@ public sealed class ContainerConfigurator : IContainerConfigurator public void Configure( ICakeContainerRegistrar registrar, ICakeConfiguration configuration, - IRemainingArguments arguments) + ICakeArguments arguments) { // Arguments - registrar.RegisterInstance(new CakeArguments(arguments.Parsed)).AsSelf().As(); + registrar.RegisterInstance(arguments).AsSelf().As(); // Scripting registrar.RegisterType().As().Singleton(); diff --git a/src/Cake/Infrastructure/IContainerConfigurator.cs b/src/Cake/Infrastructure/IContainerConfigurator.cs index 3548c7bfec..41e5a07ef1 100644 --- a/src/Cake/Infrastructure/IContainerConfigurator.cs +++ b/src/Cake/Infrastructure/IContainerConfigurator.cs @@ -2,9 +2,9 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using Cake.Core; using Cake.Core.Composition; using Cake.Core.Configuration; -using Spectre.Console.Cli; namespace Cake.Infrastructure { @@ -17,6 +17,6 @@ public interface IContainerConfigurator void Configure( ICakeContainerRegistrar registrar, ICakeConfiguration configuration, - IRemainingArguments arguments); + ICakeArguments arguments); } } From 4017669e779f0f7665071dc183702e061cbc5403 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Mon, 30 Oct 2023 10:14:19 +0100 Subject: [PATCH 18/23] (GH-4238) Update .NET SDK to 7.0.403 * fixes #4238 --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 54fa47f7d5..52954cc8d6 100644 --- a/global.json +++ b/global.json @@ -3,7 +3,7 @@ "src" ], "sdk": { - "version": "7.0.402", + "version": "7.0.403", "rollForward": "latestFeature" } } \ No newline at end of file From 21b31a5f8a516a7a13e829e4bdf2ddb86597a033 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Mon, 30 Oct 2023 10:34:35 +0100 Subject: [PATCH 19/23] (GH-4240) Update xunit to 2.5.3 * fixes #4240 --- src/Cake.Common.Tests/Cake.Common.Tests.csproj | 4 ++-- src/Cake.Core.Tests/Cake.Core.Tests.csproj | 4 ++-- .../Cake.DotNetTool.Module.Tests.csproj | 4 ++-- src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj | 4 ++-- src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj | 4 ++-- src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj | 2 +- src/Cake.Tests/Cake.Tests.csproj | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Cake.Common.Tests/Cake.Common.Tests.csproj b/src/Cake.Common.Tests/Cake.Common.Tests.csproj index 9511b5599a..77e3c8f9af 100644 --- a/src/Cake.Common.Tests/Cake.Common.Tests.csproj +++ b/src/Cake.Common.Tests/Cake.Common.Tests.csproj @@ -17,8 +17,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.Core.Tests/Cake.Core.Tests.csproj b/src/Cake.Core.Tests/Cake.Core.Tests.csproj index 572253151b..617f0a86cd 100644 --- a/src/Cake.Core.Tests/Cake.Core.Tests.csproj +++ b/src/Cake.Core.Tests/Cake.Core.Tests.csproj @@ -15,8 +15,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj index e59a512ac6..049ca37bd7 100644 --- a/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj +++ b/src/Cake.DotNetTool.Module.Tests/Cake.DotNetTool.Module.Tests.csproj @@ -17,8 +17,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj index d1d9426c7b..e500faf181 100644 --- a/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj +++ b/src/Cake.Frosting.Tests/Cake.Frosting.Tests.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj index 85a6e856b7..6b46c84ff0 100644 --- a/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj +++ b/src/Cake.NuGet.Tests/Cake.NuGet.Tests.csproj @@ -16,8 +16,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj b/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj index 8838cf5dc3..4575a25519 100644 --- a/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj +++ b/src/Cake.Testing.Xunit/Cake.Testing.Xunit.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Cake.Tests/Cake.Tests.csproj b/src/Cake.Tests/Cake.Tests.csproj index a6fc020852..7990841020 100644 --- a/src/Cake.Tests/Cake.Tests.csproj +++ b/src/Cake.Tests/Cake.Tests.csproj @@ -11,8 +11,8 @@ - - + + all runtime; build; native; contentfiles; analyzers From 5e894968e2597470dabe8cf1cc2d2ba698b99244 Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Mon, 30 Oct 2023 20:08:51 +0100 Subject: [PATCH 20/23] (GH-4242) Update GitReleaseManager.Tool to 0.15.0 * fixes #4242 --- build.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.cake b/build.cake index 7da4bbc5a0..74738d363a 100644 --- a/build.cake +++ b/build.cake @@ -3,7 +3,7 @@ // Install .NET Core Global tools. #tool "dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=5.12.0" -#tool "dotnet:https://api.nuget.org/v3/index.json?package=GitReleaseManager.Tool&version=0.13.0" +#tool "dotnet:https://api.nuget.org/v3/index.json?package=GitReleaseManager.Tool&version=0.15.0" #tool "dotnet:https://api.nuget.org/v3/index.json?package=sign&version=0.9.1-beta.23274.1&prerelease" // Load other scripts. From facb599787161341fbbc9c2357563c3e71f670dd Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Mon, 30 Oct 2023 20:59:19 +0100 Subject: [PATCH 21/23] (GH-4244) Update sign tool to 0.9.1-beta.23530.1 * fixes #4244 --- build.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.cake b/build.cake index 74738d363a..5183d166d3 100644 --- a/build.cake +++ b/build.cake @@ -4,7 +4,7 @@ // Install .NET Core Global tools. #tool "dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=5.12.0" #tool "dotnet:https://api.nuget.org/v3/index.json?package=GitReleaseManager.Tool&version=0.15.0" -#tool "dotnet:https://api.nuget.org/v3/index.json?package=sign&version=0.9.1-beta.23274.1&prerelease" +#tool "dotnet:https://api.nuget.org/v3/index.json?package=sign&version=0.9.1-beta.23530.1&prerelease" // Load other scripts. #load "./build/parameters.cake" From 0ccf2b8235eea0282aac1f2690975e9d3dd4b71f Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 10 Nov 2023 09:18:37 +0100 Subject: [PATCH 22/23] Revert "(GH-4242) Update GitReleaseManager.Tool to 0.15.0" This reverts commit 5e894968e2597470dabe8cf1cc2d2ba698b99244. --- build.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.cake b/build.cake index 5183d166d3..41a4007690 100644 --- a/build.cake +++ b/build.cake @@ -3,7 +3,7 @@ // Install .NET Core Global tools. #tool "dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=5.12.0" -#tool "dotnet:https://api.nuget.org/v3/index.json?package=GitReleaseManager.Tool&version=0.15.0" +#tool "dotnet:https://api.nuget.org/v3/index.json?package=GitReleaseManager.Tool&version=0.13.0" #tool "dotnet:https://api.nuget.org/v3/index.json?package=sign&version=0.9.1-beta.23530.1&prerelease" // Load other scripts. From 5857ac22f669a5d9307576e57b5f03ef7e222c8c Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 10 Nov 2023 09:25:24 +0100 Subject: [PATCH 23/23] (build) Updated version and release notes --- ReleaseNotes.md | 12 ++++++++++++ src/SolutionInfo.cs | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 624d7c9e52..314cf10802 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,3 +1,15 @@ +### New in 3.2.0 (Released 2023/11/10) + +* 4225 Add DotNetRemovePackage alias for dotnet remove package command. +* 4187 Add DotNetAddPackage alias for dotnet add package command. +* 4221 Add Azure Pipelines group logging commands. +* 4219 Update Microsoft.CodeAnalysis.CSharp.Scripting to 4.7.0. +* 4217 Update NuGet.* to 6.7.0. +* 4215 Update Autofac to 7.1.0. +* 4157 Upgrading to spectre.console 0.47.0 breaks the cake build. +* 4144 DotNetMSBuildSettings is missing NodeReuse. +* 3996 Error: Bad IL format with Cake MacOSX (2.3.0 - 3.1.0). + ### New in 3.1.0 (Released 2023/07/09) * 4122 Call multiple tasks from CLI in Frosting. diff --git a/src/SolutionInfo.cs b/src/SolutionInfo.cs index baad8e125f..aba1fbe686 100644 --- a/src/SolutionInfo.cs +++ b/src/SolutionInfo.cs @@ -10,7 +10,7 @@ using System.Reflection; [assembly: AssemblyProduct("Cake")] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] -[assembly: AssemblyInformationalVersion("3.1.0-beta.1+0.Branch.release-3.1.0.Sha.6a334f30ec989c44d6578a7e73843ed9f1167ca3")] +[assembly: AssemblyVersion("3.2.0.0")] +[assembly: AssemblyFileVersion("3.2.0.0")] +[assembly: AssemblyInformationalVersion("3.2.0-beta.1+1.Branch.release-3.2.0.Sha.0ccf2b8235eea0282aac1f2690975e9d3dd4b71f")] [assembly: AssemblyCopyright("Copyright (c) .NET Foundation and Contributors")]