From 4feea8f805dec25bff5a911c4a75f6542610364c Mon Sep 17 00:00:00 2001 From: Mattias Karlsson Date: Fri, 19 Dec 2025 14:39:20 +0100 Subject: [PATCH] Migrate from Cake script to Cake SDK - Convert build.cake to cake.cs using Cake SDK 6.0.0 - Migrate build/helpers.cake to build/helpers.cs - Rename build/records.cake to build/records.cs and update to C# syntax - Remove .config/dotnet-tools.json (no longer needed with SDK) - Update GitHub Actions workflow to use file-path instead of tool-manifest - Replace context.GitHubActions() with static GitHubActions access - Update DPI tool invocation from DotNetTool to Command API - Make environment variable properties nullable in BuildData record - Change ExtensionHelper visibility from private to internal --- .config/dotnet-tools.json | 18 --------- .github/workflows/build.yml | 2 +- build/helpers.cake | 28 -------------- build/helpers.cs | 39 ++++++++++++++++++++ build/{records.cake => records.cs} | 10 ++--- build.cake => cake.cs | 59 +++++++++++++----------------- 6 files changed, 71 insertions(+), 85 deletions(-) delete mode 100644 .config/dotnet-tools.json delete mode 100644 build/helpers.cake create mode 100644 build/helpers.cs rename build/{records.cake => records.cs} (72%) rename build.cake => cake.cs (81%) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json deleted file mode 100644 index 6f51fa0..0000000 --- a/.config/dotnet-tools.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 1, - "isRoot": true, - "tools": { - "cake.tool": { - "version": "6.0.0", - "commands": [ - "dotnet-cake" - ] - }, - "dpi": { - "version": "2025.12.17.349", - "commands": [ - "dpi" - ] - } - } -} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 26db778..ffd2f49 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -52,5 +52,5 @@ jobs: NUGET_APIKEY: ${{steps.login.outputs.NUGET_API_KEY}} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - cake-version: tool-manifest + file-path: cake.cs target: GitHub-Actions \ No newline at end of file diff --git a/build/helpers.cake b/build/helpers.cake deleted file mode 100644 index 3c88e4b..0000000 --- a/build/helpers.cake +++ /dev/null @@ -1,28 +0,0 @@ -/***************************** - * Helpers - *****************************/ - -private static ExtensionHelper extensionHelper; -extensionHelper = new ExtensionHelper(Task, () => RunTarget(Argument("target", "Default"))); -public static CakeTaskBuilder Then(this CakeTaskBuilder cakeTaskBuilder, string name) - => extensionHelper - .TaskCreate(name) - .IsDependentOn(cakeTaskBuilder); - - -public static CakeReport Run(this CakeTaskBuilder cakeTaskBuilder) - => extensionHelper.Run(); - -public static CakeTaskBuilder Default(this CakeTaskBuilder cakeTaskBuilder) -{ - extensionHelper - .TaskCreate("Default") - .IsDependentOn(cakeTaskBuilder); - return cakeTaskBuilder; -} - -if (BuildSystem.GitHubActions.IsRunningOnGitHubActions) -{ - TaskSetup(context=> System.Console.WriteLine($"::group::{context.Task.Name.Quote()}")); - TaskTeardown(context=>System.Console.WriteLine("::endgroup::")); -} \ No newline at end of file diff --git a/build/helpers.cs b/build/helpers.cs new file mode 100644 index 0000000..6029c27 --- /dev/null +++ b/build/helpers.cs @@ -0,0 +1,39 @@ +/***************************** + * Helpers + *****************************/ + +public partial class Program +{ + static void Main_SetupExtensions() + { + if (BuildSystem.GitHubActions.IsRunningOnGitHubActions) + { + TaskSetup(context => BuildSystem.GitHubActions.Commands.StartGroup(context.Task.Name)); + TaskTeardown(context => BuildSystem.GitHubActions.Commands.EndGroup()); + } + } +} + + +public static partial class CakeTaskBuilderExtensions +{ + private static ExtensionHelper extensionHelper = new (Task, () => RunTarget(Argument("target", "Default"))); + + public static CakeTaskBuilder Then(this CakeTaskBuilder cakeTaskBuilder, string name) + => extensionHelper + .TaskCreate(name) + .IsDependentOn(cakeTaskBuilder); + + + public static CakeReport Run(this CakeTaskBuilder cakeTaskBuilder) + => extensionHelper.Run(); + + public static CakeTaskBuilder Default(this CakeTaskBuilder cakeTaskBuilder) + { + extensionHelper + .TaskCreate("Default") + .IsDependentOn(cakeTaskBuilder); + return cakeTaskBuilder; + } + +} \ No newline at end of file diff --git a/build/records.cake b/build/records.cs similarity index 72% rename from build/records.cake rename to build/records.cs index 0eeca62..51b0d26 100644 --- a/build/records.cake +++ b/build/records.cs @@ -15,15 +15,15 @@ Func MSBuildSettingsCus public DirectoryPath NuGetOutputPath { get; } = OutputPath.Combine("nuget"); public DirectoryPath BinaryOutputPath { get; } = OutputPath.Combine("bin"); - public string GitHubNuGetSource { get; } = System.Environment.GetEnvironmentVariable("GH_PACKAGES_NUGET_SOURCE"); - public string GitHubNuGetApiKey { get; } = System.Environment.GetEnvironmentVariable("GITHUB_TOKEN"); + public string? GitHubNuGetSource { get; } = System.Environment.GetEnvironmentVariable("GH_PACKAGES_NUGET_SOURCE"); + public string? GitHubNuGetApiKey { get; } = System.Environment.GetEnvironmentVariable("GITHUB_TOKEN"); public bool ShouldPushGitHubPackages() => (IsMainBranch || IsDevelopmentBranch) && !string.IsNullOrWhiteSpace(GitHubNuGetSource) && !string.IsNullOrWhiteSpace(GitHubNuGetApiKey); - public string NuGetSource { get; } = System.Environment.GetEnvironmentVariable("NUGET_SOURCE"); - public string NuGetApiKey { get; } = System.Environment.GetEnvironmentVariable("NUGET_APIKEY"); + public string? NuGetSource { get; } = System.Environment.GetEnvironmentVariable("NUGET_SOURCE"); + public string? NuGetApiKey { get; } = System.Environment.GetEnvironmentVariable("NUGET_APIKEY"); public bool ShouldPushNuGetPackages() => IsMainBranch && !string.IsNullOrWhiteSpace(NuGetSource) && !string.IsNullOrWhiteSpace(NuGetApiKey); @@ -37,4 +37,4 @@ public bool ShouldPushNuGetPackages() => IsMainBranch && public DotNetMSBuildSettings MSBuildSettings => msBuildSettings ??= MSBuildSettingsCustomization(this, new DotNetMSBuildSettings()); } -private record ExtensionHelper(Func TaskCreate, Func Run); +internal record ExtensionHelper(Func TaskCreate, Func Run); diff --git a/build.cake b/cake.cs similarity index 81% rename from build.cake rename to cake.cs index 30a6753..e1216d3 100644 --- a/build.cake +++ b/cake.cs @@ -1,24 +1,22 @@ -// Install .NET Core Global tools. -#tool "dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=6.5.1" - -#load "build/records.cake" -#load "build/helpers.cake" +#:sdk Cake.Sdk@6.0.0 +#:property IncludeAdditionalFiles=./build/*.cs /***************************** * Setup *****************************/ Setup( static context => { + InstallTool("dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=6.5.1"); + InstallTool("dotnet:https://api.nuget.org/v3/index.json?package=DPI&version=2025.12.17.349"); var assertedVersions = context.GitVersion(new GitVersionSettings { OutputType = GitVersionOutput.Json }); - var gh = context.GitHubActions(); var buildDate = DateTime.UtcNow; - var runNumber = gh.IsRunningOnGitHubActions - ? gh.Environment.Workflow.RunNumber + var runNumber = GitHubActions.IsRunningOnGitHubActions + ? GitHubActions.Environment.Workflow.RunNumber : (short)((buildDate - buildDate.Date).TotalSeconds/3); var version = FormattableString .Invariant($"{buildDate:yyyy.M.d}.{runNumber}"); @@ -63,7 +61,7 @@ .WithProperty("PackageProjectUrl", "https://github.com/devlead/Devlead.Console.Template") .WithProperty("RepositoryUrl", "https://github.com/devlead/Devlead.Console.Template.git") .WithProperty("RepositoryType", "git") - .WithProperty("ContinuousIntegrationBuild", gh.IsRunningOnGitHubActions ? "true" : "false") + .WithProperty("ContinuousIntegrationBuild", GitHubActions.IsRunningOnGitHubActions ? "true" : "false") .WithProperty("EmbedUntrackedSources", "true") .WithProperty("PackageOutputPath", data.NuGetOutputPath.FullPath) .WithProperty("BaseOutputPath", data.BinaryOutputPath.FullPath + "/") @@ -144,26 +142,22 @@ .DeferOnError() .Then("DPI") .Does( - static (context, data) => context.DotNetTool( - "tool", - new DotNetToolSettings { - ArgumentCustomization = args => args - .Append("run") - .Append("dpi") - .Append("nuget") - .Append("--silent") - .AppendSwitchQuoted("--output", "table") - .Append( - ( - !string.IsNullOrWhiteSpace(context.EnvironmentVariable("NuGetReportSettings_SharedKey")) - && - !string.IsNullOrWhiteSpace(context.EnvironmentVariable("NuGetReportSettings_WorkspaceId")) - ) - ? "report" - : "analyze" - ) - .AppendSwitchQuoted("--buildversion", data.Version) - } + static (context, data) => Command( + ["dpi", "dpi.exe"], + new ProcessArgumentBuilder() + .Append("nuget") + .Append("--silent") + .AppendSwitchQuoted("--output", "table") + .Append( + ( + !string.IsNullOrWhiteSpace(context.EnvironmentVariable("NuGetReportSettings_SharedKey")) + && + !string.IsNullOrWhiteSpace(context.EnvironmentVariable("NuGetReportSettings_WorkspaceId")) + ) + ? "report" + : "analyze" + ) + .AppendSwitchQuoted("--buildversion", data.Version) ) ) .Then("Pack") @@ -180,10 +174,9 @@ .Then("Upload-Artifacts") .WithCriteria(BuildSystem.IsRunningOnGitHubActions, nameof(BuildSystem.IsRunningOnGitHubActions)) .Does( - static (context, data) => context - .GitHubActions() - .Commands - .UploadArtifact(data.ArtifactsPath, "artifacts") + static (context, data) => GitHubActions + .Commands + .UploadArtifact(data.ArtifactsPath, "artifacts") ) .Then("Push-GitHub-Packages") .WithCriteria( (context, data) => data.ShouldPushGitHubPackages())