diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json deleted file mode 100644 index 800d86f..0000000 --- a/.config/dotnet-tools.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": 1, - "isRoot": true, - "tools": { - "cake.tool": { - "version": "6.0.0", - "commands": [ - "dotnet-cake" - ], - "rollForward": false - }, - "dpi": { - "version": "2025.11.25.337", - "commands": [ - "dpi" - ], - "rollForward": false - } - } -} \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 49803c5..ac4c5a1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,5 +59,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 diff --git a/build/helpers.cake b/build/helpers.cake deleted file mode 100644 index a3c84f4..0000000 --- a/build/helpers.cake +++ /dev/null @@ -1,56 +0,0 @@ -#addin "nuget:?package=xunit.assert&version=2.9.3" -#load "records.cake" - -// Usings -using Xunit; - -/***************************** - * 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::")); -} - -public class FilePathJsonConverter : PathJsonConverter -{ - protected override FilePath ConvertFromString(string value) => FilePath.FromString(value); -} - -public abstract class PathJsonConverter : System.Text.Json.Serialization.JsonConverter where TPath : Cake.Core.IO.Path -{ - public override TPath Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) - { - var value = reader.GetString(); - - return value is null ? null : ConvertFromString(value); - } - - public override void Write(System.Text.Json.Utf8JsonWriter writer, TPath value, System.Text.Json.JsonSerializerOptions options) - { - writer.WriteStringValue(value.FullPath); - } - - protected abstract TPath ConvertFromString(string value); -} \ No newline at end of file diff --git a/build/helpers.cs b/build/helpers.cs new file mode 100644 index 0000000..0afb837 --- /dev/null +++ b/build/helpers.cs @@ -0,0 +1,61 @@ +/***************************** + * 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; + } + +} + +public class FilePathJsonConverter : PathJsonConverter +{ + protected override FilePath? ConvertFromString(string value) => FilePath.FromString(value); +} + +public abstract class PathJsonConverter : System.Text.Json.Serialization.JsonConverter where TPath : Cake.Core.IO.Path +{ + public override TPath? Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) + { + var value = reader.GetString(); + + return value is null ? null : ConvertFromString(value); + } + + public override void Write(System.Text.Json.Utf8JsonWriter writer, TPath value, System.Text.Json.JsonSerializerOptions options) + { + writer.WriteStringValue(value.FullPath); + } + + protected abstract TPath? ConvertFromString(string value); +} \ No newline at end of file diff --git a/build/records.cake b/build/records.cs similarity index 78% rename from build/records.cake rename to build/records.cs index 45c4028..88f44d3 100644 --- a/build/records.cake +++ b/build/records.cs @@ -1,4 +1,3 @@ -#load "helpers.cake" using System.Text.Json.Serialization; /***************************** @@ -22,15 +21,15 @@ DirectoryPath OutputPath public DirectoryPath MarkdownPath { get; } = OutputPath.Combine(Markdown); public FilePath MarkdownIndexPath { get; } = OutputPath.Combine(Markdown).CombineWithFilePath("index.md"); - public string GitHubNuGetSource { get; } = System.Environment.GetEnvironmentVariable("GH_PACKAGES_NUGET_SOURCE"); - public string GitHubNuGetApiKey { get; } = System.Environment.GetEnvironmentVariable("GH_PACKAGES_NUGET_APIKEY"); + public string? GitHubNuGetSource { get; } = System.Environment.GetEnvironmentVariable("GH_PACKAGES_NUGET_SOURCE"); + public string? GitHubNuGetApiKey { get; } = System.Environment.GetEnvironmentVariable("GH_PACKAGES_NUGET_APIKEY"); public bool ShouldPushGitHubPackages() => !ShouldNotPublish && !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 && !ShouldNotPublish && !string.IsNullOrWhiteSpace(NuGetSource) && @@ -44,7 +43,7 @@ public bool ShouldPushNuGetPackages() => IsMainBranch && }; } -private record ExtensionHelper(Func TaskCreate, Func Run); +internal record ExtensionHelper(Func TaskCreate, Func Run); public record DPIPackageReference( diff --git a/build.cake b/cake.cs similarity index 92% rename from build.cake rename to cake.cs index 0a3df0f..ac6b0ed 100644 --- a/build.cake +++ b/cake.cs @@ -1,14 +1,15 @@ -#tool "dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=6.5.1" -#addin nuget:?package=System.Text.Json&version=10.0.1&loaddependencies=true -#load "build/records.cake" -#load "build/helpers.cake" +#:sdk Cake.Sdk@6.0.0 +#:package xunit.v3.assert@3.2.1 +#:property IncludeAdditionalFiles=./build/*.cs +using Xunit; /***************************** * Setup *****************************/ Setup( static context => { - var assertedVersions = context.GitVersion(new GitVersionSettings + InstallTool("dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=6.5.1"); + var assertedVersions = context.GitVersion(new GitVersionSettings { OutputType = GitVersionOutput.Json }); @@ -16,10 +17,9 @@ var branchName = assertedVersions.BranchName; var isMainBranch = StringComparer.OrdinalIgnoreCase.Equals("main", branchName); - 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 @@ -51,7 +51,7 @@ .WithProperty("PackageTags", "tool") .WithProperty("PackageDescription", "Dependency Inventory .NET Tool - Inventories dependencies to Azure Log Analytics") .WithProperty("RepositoryUrl", "https://github.com/devlead/DPI.git") - .WithProperty("ContinuousIntegrationBuild", gh.IsRunningOnGitHubActions ? "true" : "false") + .WithProperty("ContinuousIntegrationBuild", GitHubActions.IsRunningOnGitHubActions ? "true" : "false") .WithProperty("EmbedUntrackedSources", "true"), artifactsPath, artifactsPath.Combine(version) @@ -100,11 +100,9 @@ .Then("Upload-Artifacts") .WithCriteria(BuildSystem.IsRunningOnGitHubActions, nameof(BuildSystem.IsRunningOnGitHubActions)) .Does( - static (context, data) => context - .GitHubActions() is var gh && gh != null - ? gh.Commands - .UploadArtifact(data.ArtifactsPath, $"Artifact_{gh.Environment.Runner.ImageOS ?? gh.Environment.Runner.OS}_{context.Environment.Runtime.BuiltFramework.Identifier}_{context.Environment.Runtime.BuiltFramework.Version}") - : throw new Exception("GitHubActions not available") + static (context, data) => GitHubActions + .Commands + .UploadArtifact(data.ArtifactsPath, $"Artifact_{GitHubActions.Environment.Runner.ImageOS ?? GitHubActions.Environment.Runner.OS}_{context.Environment.Runtime.BuiltFramework.Identifier}_{context.Environment.Runtime.BuiltFramework.Version}") ) .Then("Integration-Tests-Restore-MultiTarget") .Does( @@ -191,6 +189,8 @@ out json string.Concat(json) ); + Assert.NotNull(packageReferences); + Array.ForEach( packageReferences, packageReference => Assert.Equal( diff --git a/src/DPI/DPI.csproj b/src/DPI/DPI.csproj index fe11e36..802d183 100644 --- a/src/DPI/DPI.csproj +++ b/src/DPI/DPI.csproj @@ -11,14 +11,14 @@ - + - + - +