diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index da200cd..ff3ff6b 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -2,11 +2,12 @@
"version": 1,
"isRoot": true,
"tools": {
- "cake.tool": {
- "version": "4.0.0",
+ "microsoft.sbom.dotnettool": {
+ "version": "4.1.0",
"commands": [
- "dotnet-cake"
- ]
+ "sbom-tool"
+ ],
+ "rollForward": true
}
}
}
\ No newline at end of file
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9d673d6..602b8e2 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -3,8 +3,8 @@ name: CI
on: [push]
env:
- xcodeVersion: 16.2
- dotnetVersion: 9.0.200
+ xcodeVersion: 16.4
+ dotnetVersion: 9.0.304
jobs:
build:
@@ -33,9 +33,9 @@ jobs:
run: dotnet tool restore
- name: Run the Cake script
- run: dotnet cake
+ run: dotnet run --project build/Build.csproj --artifactsDir ${{ github.workspace }}/artifacts
- uses: actions/upload-artifact@v4
with:
name: NugetPackage
- path: artifacts
+ path: ${{ github.workspace }}/artifacts
diff --git a/.gitignore b/.gitignore
index 7a6533b..7d35514 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,7 +20,6 @@ Resource.designer.cs
[Rr]eleases/
x64/
x86/
-build/
bld/
[Bb]in/
[Oo]bj/
@@ -260,3 +259,5 @@ artifacts/
.DS_Store
.vs/
+
+build/artifacts/
\ No newline at end of file
diff --git a/build.cake b/build.cake
deleted file mode 100644
index 970d0ca..0000000
--- a/build.cake
+++ /dev/null
@@ -1,79 +0,0 @@
-#tool dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=5.12.0
-#addin nuget:https://api.nuget.org/v3/index.json?package=Cake.Figlet&version=2.0.1
-
-var target = Argument("target", "Default");
-var configuration = Argument("configuration", "Release");
-var sln = new FilePath("./BTProgressHUD/BTProgressHUD.csproj");
-var artifactsDir = new DirectoryPath("./artifacts");
-var gitVersionLog = new FilePath("./gitversion.log");
-
-GitVersion versionInfo = null;
-
-Setup(context =>
-{
- versionInfo = context.GitVersion(new GitVersionSettings
- {
- UpdateAssemblyInfo = true,
- OutputType = GitVersionOutput.Json,
- LogFilePath = gitVersionLog.MakeAbsolute(context.Environment)
- });
-
- var cakeVersion = typeof(ICakeContext).Assembly.GetName().Version.ToString();
-
- Information(Figlet("BTProgressHUD"));
- Information("Building version {0}, ({1}, {2}) using version {3} of Cake.",
- versionInfo.SemVer,
- configuration,
- target,
- cakeVersion);
-});
-
-Task("Clean")
- .Does(() =>
-{
- CleanDirectories("./BTProgressHUD/bin");
- CleanDirectories("./BTProgressHUD/obj");
-
- EnsureDirectoryExists(artifactsDir);
-});
-
-Task("Restore")
- .Does(() =>
-{
- DotNetRestore(sln.ToString());
-});
-
-Task("Build")
- .IsDependentOn("Clean")
- .IsDependentOn("Restore")
- .Does(() =>
-{
- var msBuildSettings = new DotNetMSBuildSettings
- {
- Version = versionInfo.SemVer,
- PackageVersion = versionInfo.SemVer,
- InformationalVersion = versionInfo.InformationalVersion
- };
-
- var settings = new DotNetBuildSettings
- {
- Configuration = configuration,
- MSBuildSettings = msBuildSettings
- };
-
- DotNetBuild(sln.ToString(), settings);
-});
-
-Task("CopyArtifacts")
- .IsDependentOn("Build")
- .Does(() =>
-{
- var nugetFiles = GetFiles("BTProgressHUD/bin/" + configuration + "/**/*.nupkg");
- CopyFiles(nugetFiles, artifactsDir);
- CopyFileToDirectory(gitVersionLog, artifactsDir);
-});
-
-Task("Default")
- .IsDependentOn("CopyArtifacts");
-
-RunTarget(target);
diff --git a/build/Build.csproj b/build/Build.csproj
new file mode 100644
index 0000000..593d009
--- /dev/null
+++ b/build/Build.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net9.0
+ $(MSBuildProjectDirectory)
+
+ false
+
+
+
+
+
+
+
+
diff --git a/build/Program.cs b/build/Program.cs
new file mode 100644
index 0000000..6b43b03
--- /dev/null
+++ b/build/Program.cs
@@ -0,0 +1,193 @@
+using Cake.Common;
+using Cake.Common.Diagnostics;
+using Cake.Common.IO;
+using Cake.Common.Tools.DotNet;
+using Cake.Common.Tools.DotNet.Build;
+using Cake.GitVersioning;
+using Cake.Core;
+using Cake.Core.IO;
+using Cake.Frosting;
+using Nerdbank.GitVersioning;
+using Spectre.Console;
+using Cake.Common.Tools.DotNet.MSBuild;
+using Cake.Common.Build;
+using Cake.Core.Diagnostics;
+using Cake.Common.Tools.DotNet.Tool;
+using Cake.Common.Tools.DotNet.Run;
+
+namespace Build;
+
+public static class Program
+{
+ public static int Main(string[] args)
+ {
+ return new CakeHost()
+ .UseContext()
+ .Run(args);
+ }
+}
+
+public class BuildContext : FrostingContext
+{
+ public string AppFileRoot { get; }
+ public string ProjectName { get; set; } = "BTProgressHUD";
+ public string Target { get; set; }
+ public string BuildConfiguration { get; set; }
+ public string ArtifactsDir { get; set; }
+ public DirectoryPath OutputDir { get; set; }
+ public VersionOracle VersionInfo { get; set; }
+ public FilePath ProjectPath { get; set; }
+ public DotNetVerbosity VerbosityDotNet { get; set; }
+
+ public BuildContext(ICakeContext context)
+ : base(context)
+ {
+ AppFileRoot = context.Argument("root", "..");
+ Target = context.Argument("target", "Default");
+ BuildConfiguration = context.Argument("configuration", "Release");
+ ArtifactsDir = context.Argument("artifactsDir", $"{AppFileRoot}/artifacts");
+ OutputDir = new DirectoryPath(ArtifactsDir);
+
+ ProjectPath = new FilePath($"{AppFileRoot}/{ProjectName}/{ProjectName}.csproj");
+
+ VersionInfo = context.GitVersioningGetVersion();
+
+ var cakeVersion = typeof(ICakeContext).Assembly.GetName().Version.ToString();
+
+ AnsiConsole.Write(new FigletText(ProjectName));
+ context.Information("Building version {0}, ({1}, {2}) using version {3} of Cake.",
+ VersionInfo.SemVer2,
+ BuildConfiguration,
+ Target,
+ cakeVersion);
+
+ if (context.GitHubActions().Environment.PullRequest.IsPullRequest)
+ {
+ context.Information("PR HeadRef: {0}", context.GitHubActions().Environment.Workflow.HeadRef);
+ context.Information("PR BaseRef: {0}", context.GitHubActions().Environment.Workflow.BaseRef);
+ }
+
+ context.Information("RefName: {0}", context.GitHubActions().Environment.Workflow.RefName);
+
+ VerbosityDotNet = context.Log.Verbosity switch
+ {
+ Verbosity.Quiet => DotNetVerbosity.Quiet,
+ Verbosity.Normal => DotNetVerbosity.Normal,
+ Verbosity.Verbose => DotNetVerbosity.Detailed,
+ Verbosity.Diagnostic => DotNetVerbosity.Diagnostic,
+ _ => DotNetVerbosity.Minimal
+ };
+ }
+
+ public DotNetBuildSettings GetDefaultBuildSettings(DotNetMSBuildSettings msBuildSettings = null)
+ {
+ msBuildSettings ??= GetDefaultDotNetMSBuildSettings();
+
+ var settings = new DotNetBuildSettings
+ {
+ Configuration = BuildConfiguration,
+ MSBuildSettings = msBuildSettings,
+ Verbosity = VerbosityDotNet
+ };
+
+ return settings;
+ }
+
+ public DotNetMSBuildSettings GetDefaultDotNetMSBuildSettings()
+ {
+ var settings = new DotNetMSBuildSettings
+ {
+ Version = VersionInfo.SemVer2,
+ PackageVersion = VersionInfo.NuGetPackageVersion,
+ InformationalVersion = VersionInfo.AssemblyInformationalVersion
+ };
+
+ return settings;
+ }
+}
+
+[TaskName("Clean")]
+public sealed class CleanTask : FrostingTask
+{
+ public override void Run(BuildContext context)
+ {
+ context.CleanDirectories($"{context.AppFileRoot}/{context.ProjectName}*/**/bin");
+ context.CleanDirectories($"{context.AppFileRoot}/{context.ProjectName}*/**/obj");
+ context.CleanDirectories(context.OutputDir.FullPath);
+
+ context.EnsureDirectoryExists(context.OutputDir);
+ }
+}
+
+[TaskName("Restore")]
+[IsDependentOn(typeof(CleanTask))]
+public sealed class RestoreTask : FrostingTask
+{
+ public override void Run(BuildContext context)
+ {
+ context.DotNetRestore(context.ProjectPath.ToString());
+ }
+}
+
+
+[TaskName("Build")]
+[IsDependentOn(typeof(RestoreTask))]
+public sealed class BuildTask : FrostingTask
+{
+ public override void Run(BuildContext context)
+ {
+ var settings = context.GetDefaultBuildSettings();
+ context.DotNetBuild(context.ProjectPath.ToString(), settings);
+ }
+}
+
+[TaskName("GenerateSBOM")]
+[IsDependentOn(typeof(BuildTask))]
+public sealed class GenerateSbomTask : FrostingTask
+{
+ public override void Run(BuildContext context)
+ {
+ ProcessArgumentBuilder PrepareSbomArguments(ProcessArgumentBuilder args)
+ {
+ args.Append("generate");
+ args.Append("-b {0}", context.OutputDir.FullPath);
+ args.Append("-bc {0}", context.AppFileRoot);
+ args.Append("-nsb https://github.com/redth-org/BTProgressHUD");
+ args.Append("-ps redth-org");
+ args.Append("-pn BTProgressHUD");
+ args.Append("-V Verbose");
+ args.Append("-pv {0}", context.VersionInfo.SemVer2);
+ return args;
+ }
+
+ var settings = new DotNetToolSettings
+ {
+ ArgumentCustomization = PrepareSbomArguments
+ };
+
+ context.DotNetTool("sbom-tool", settings);
+ }
+}
+
+[TaskName("CopyPackages")]
+[IsDependentOn(typeof(BuildTask))]
+public sealed class CopyPackagesTask : FrostingTask
+{
+ public override void Run(BuildContext context)
+ {
+ var packagesDir = context.OutputDir.Combine("NuGet/");
+ context.EnsureDirectoryExists(packagesDir);
+
+ var nugetFiles = context.GetFiles($"{context.AppFileRoot}/{context.ProjectName}*/**/bin/{context.BuildConfiguration}/**/*.nupkg");
+ context.CopyFiles(nugetFiles, packagesDir);
+ }
+}
+
+[TaskName("Default")]
+[IsDependentOn(typeof(CleanTask))]
+[IsDependentOn(typeof(BuildTask))]
+[IsDependentOn(typeof(GenerateSbomTask))]
+[IsDependentOn(typeof(CopyPackagesTask))]
+public sealed class DefaultTask : FrostingTask
+{
+}
diff --git a/version.json b/version.json
new file mode 100644
index 0000000..77d747c
--- /dev/null
+++ b/version.json
@@ -0,0 +1,9 @@
+{
+ "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json",
+ "version": "2.2",
+ "publicReleaseRefSpec": [
+ "^refs/heads/main$",
+ "^refs/tags/\\d+\\.\\d+",
+ "^refs/tags/v\\d+\\.\\d+"
+ ]
+}
\ No newline at end of file