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..f2e1434f 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,15 +41,16 @@ 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]