From 519c7789d14d24c684d7154d496925f6f8242fca Mon Sep 17 00:00:00 2001 From: darthsharp <48331467+darthsharp@users.noreply.github.com> Date: Sun, 18 Jan 2026 12:11:34 +0100 Subject: [PATCH 1/2] Refactor task settings and paths for clarity and consistency - Renamed `OutputDirectory` to `PackOutputDirectory` in `IPackTaskSettings` for improved semantic alignment. - Updated `CreateDotNetPublishSettings` to handle relative output paths for publish tasks. - Enhanced directory path handling with new `DirectoryPathExtensions`. - Introduced static class `DotNetRuntime` for predefined .NET runtime constants. - Updated tests to reflect changes in property and method names. --- .../DirectoryPathExtensions.cs | 18 +++++++++++++ .../CreativeCoders.CakeBuild/DotNetRuntime.cs | 27 +++++++++++++++++++ .../Tasks/Templates/NuGetPushTask.cs | 2 +- .../Tasks/Templates/PackTask.cs | 2 +- .../Tasks/Templates/PublishTask.cs | 12 +++++---- .../Templates/Settings/IPackTaskSettings.cs | 2 +- .../Settings/IPublishTaskSettings.cs | 2 +- .../Tasks/Templates/NuGetPushTaskTests.cs | 2 +- 8 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 source/CakeBuild/CreativeCoders.CakeBuild/DirectoryPathExtensions.cs create mode 100644 source/CakeBuild/CreativeCoders.CakeBuild/DotNetRuntime.cs diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/DirectoryPathExtensions.cs b/source/CakeBuild/CreativeCoders.CakeBuild/DirectoryPathExtensions.cs new file mode 100644 index 00000000..09681047 --- /dev/null +++ b/source/CakeBuild/CreativeCoders.CakeBuild/DirectoryPathExtensions.cs @@ -0,0 +1,18 @@ +using System.Diagnostics.CodeAnalysis; +using Cake.Core.IO; + +namespace CreativeCoders.CakeBuild; + +public static class DirectoryPathExtensions +{ + [SuppressMessage("ReSharper", "LoopCanBeConvertedToQuery")] + public static DirectoryPath Combine(this DirectoryPath path, params string[] segments) + { + foreach (var segment in segments) + { + path = path.Combine(segment); + } + + return path; + } +} diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/DotNetRuntime.cs b/source/CakeBuild/CreativeCoders.CakeBuild/DotNetRuntime.cs new file mode 100644 index 00000000..c945eaee --- /dev/null +++ b/source/CakeBuild/CreativeCoders.CakeBuild/DotNetRuntime.cs @@ -0,0 +1,27 @@ +using System.Diagnostics.CodeAnalysis; +using JetBrains.Annotations; + +namespace CreativeCoders.CakeBuild; + +[ExcludeFromCodeCoverage] +[PublicAPI] +public static class DotNetRuntime +{ + public const string WinX64 = "win-x64"; + + public const string WinX86 = "win-x86"; + + public const string WinArm64 = "win-arm64"; + + public const string WinArm = "win-arm"; + + public const string LinuxX64 = "linux-x64"; + + public const string LinuxMuslX64 = "linux-x64"; + + public const string LinuxArm64 = "linux-arm64"; + + public const string LinuxArm = "linux-arm"; + + public const string MacOsX64 = "osx-x64"; +} diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/NuGetPushTask.cs b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/NuGetPushTask.cs index 33f6fa59..d5e0ad48 100755 --- a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/NuGetPushTask.cs +++ b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/NuGetPushTask.cs @@ -18,7 +18,7 @@ protected override Task RunAsyncCore(T context, INuGetPushTaskSettings taskSetti var packSettings = context.GetRequiredSettings(); - var filePath = packSettings.OutputDirectory.GetFilePath("*.nupkg"); + var filePath = packSettings.PackOutputDirectory.GetFilePath("*.nupkg"); context.DotNetNuGetPush(filePath, CreateNuGetPushSettings(taskSettings)); diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PackTask.cs b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PackTask.cs index 4e21180a..7d2cc87d 100755 --- a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PackTask.cs +++ b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PackTask.cs @@ -19,7 +19,7 @@ private DotNetPackSettings CreateDotNetPackSettings(T context, IPackTaskSettings { var dotNetPackSettings = new DotNetPackSettings { - OutputDirectory = packSettings.OutputDirectory, + OutputDirectory = packSettings.PackOutputDirectory, Configuration = context.BuildConfiguration, NoBuild = context.HasExecutedTask(typeof(BuildTask)), IncludeSymbols = true, diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs index f3b3dc6c..99ecbc4f 100644 --- a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs +++ b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs @@ -16,7 +16,7 @@ protected override Task RunAsyncCore(TBuildContext context, IPublishTaskSettings foreach (var publishingItem in taskSettings.PublishingItems) { context.DotNetPublish(publishingItem.ProjectPath.FullPath, - CreateDotNetPublishSettings(publishingItem, context)); + CreateDotNetPublishSettings(taskSettings, publishingItem, context)); } } else @@ -28,7 +28,7 @@ protected override Task RunAsyncCore(TBuildContext context, IPublishTaskSettings return Task.CompletedTask; } - private DotNetPublishSettings CreateDotNetPublishSettings(IPublishTaskSettings publishSettings, + private static DotNetPublishSettings CreateDotNetPublishSettings(IPublishTaskSettings publishSettings, TBuildContext context) { var dotNetPublishSettings = new DotNetPublishSettings @@ -41,13 +41,15 @@ private DotNetPublishSettings CreateDotNetPublishSettings(IPublishTaskSettings p return dotNetPublishSettings; } - protected virtual DotNetPublishSettings CreateDotNetPublishSettings(PublishingItem publishingItem, - TBuildContext context) + protected virtual DotNetPublishSettings CreateDotNetPublishSettings(IPublishTaskSettings publishSettings, + PublishingItem publishingItem, TBuildContext context) { var dotNetPublishSettings = new DotNetPublishSettings { Runtime = publishingItem.Runtime, - OutputDirectory = publishingItem.OutputDir, + OutputDirectory = publishingItem.OutputDir.IsRelative + ? publishSettings.PublishOutputDir.Combine(publishingItem.OutputDir) + : publishingItem.OutputDir, SelfContained = publishingItem.SelfContained, NoBuild = context.HasExecutedTask(typeof(BuildTask)), Configuration = context.BuildConfiguration diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPackTaskSettings.cs b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPackTaskSettings.cs index 4b74a908..9285877f 100644 --- a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPackTaskSettings.cs +++ b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPackTaskSettings.cs @@ -5,7 +5,7 @@ namespace CreativeCoders.CakeBuild.Tasks.Templates.Settings; [CakeTaskSettings] public interface IPackTaskSettings : IBuildContextAccessor { - DirectoryPath OutputDirectory => Context.ArtifactsDir.Combine("nuget"); + DirectoryPath PackOutputDirectory => Context.ArtifactsDir.Combine("nuget"); string Copyright => string.Empty; diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPublishTaskSettings.cs b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPublishTaskSettings.cs index cc8def34..528b7d52 100644 --- a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPublishTaskSettings.cs +++ b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/Settings/IPublishTaskSettings.cs @@ -4,7 +4,7 @@ namespace CreativeCoders.CakeBuild.Tasks.Templates.Settings; public interface IPublishTaskSettings : IBuildContextAccessor { - DirectoryPath PublishOutputDir => Context.ArtifactsDir.Combine("dist"); + DirectoryPath PublishOutputDir => Context.ArtifactsDir.Combine("published"); IEnumerable PublishingItems => []; } diff --git a/tests/CreativeCoders.CakeBuild.Tests/Tasks/Templates/NuGetPushTaskTests.cs b/tests/CreativeCoders.CakeBuild.Tests/Tasks/Templates/NuGetPushTaskTests.cs index 001432df..8d07a0b4 100644 --- a/tests/CreativeCoders.CakeBuild.Tests/Tasks/Templates/NuGetPushTaskTests.cs +++ b/tests/CreativeCoders.CakeBuild.Tests/Tasks/Templates/NuGetPushTaskTests.cs @@ -14,7 +14,7 @@ private class TestNuGetPushBuildContext(Cake.Core.ICakeContext context) { public bool SkipPush { get; set; } - public DirectoryPath OutputDirectory => new("/repo/dist"); + public DirectoryPath PackOutputDirectory => new("/repo/dist"); } [Fact] From 69983bbe2de79c5b28c20b39b685bf1d2497a6dc Mon Sep 17 00:00:00 2001 From: darthsharp <48331467+darthsharp@users.noreply.github.com> Date: Sun, 18 Jan 2026 12:32:20 +0100 Subject: [PATCH 2/2] Remove unnecessary `NoBuild` assignment from `CreateDotNetPublishSettings`. --- .../CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs index 99ecbc4f..f2e1434f 100644 --- a/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs +++ b/source/CakeBuild/CreativeCoders.CakeBuild/Tasks/Templates/PublishTask.cs @@ -51,7 +51,6 @@ protected virtual DotNetPublishSettings CreateDotNetPublishSettings(IPublishTask ? publishSettings.PublishOutputDir.Combine(publishingItem.OutputDir) : publishingItem.OutputDir, SelfContained = publishingItem.SelfContained, - NoBuild = context.HasExecutedTask(typeof(BuildTask)), Configuration = context.BuildConfiguration };