From 1e158cf89cd1a4590c71c251242b7a805973ca3c Mon Sep 17 00:00:00 2001 From: "harry.cpp" Date: Fri, 27 Oct 2023 13:09:16 +0200 Subject: [PATCH] Switch to CAKE Frosting for CI --- .gitignore | 2 + MonoGame.Library.SDL.sln | 28 ++++++ build.cake | 97 ------------------- build.ps1 | 2 + build.sh | 1 + build/Build.csproj | 24 +++++ build/BuildLinuxTask.cs | 30 ++++++ build/BuildMacOSTask.cs | 21 ++++ build/BuildWindowsTask.cs | 21 ++++ build/PackageTask.cs | 26 +++++ build/Program.cs | 32 ++++++ .../MonoGame.Library.SDL.csproj | 6 +- 12 files changed, 190 insertions(+), 100 deletions(-) create mode 100644 MonoGame.Library.SDL.sln delete mode 100644 build.cake create mode 100644 build.ps1 create mode 100755 build.sh create mode 100644 build/Build.csproj create mode 100644 build/BuildLinuxTask.cs create mode 100644 build/BuildMacOSTask.cs create mode 100644 build/BuildWindowsTask.cs create mode 100644 build/PackageTask.cs create mode 100644 build/Program.cs rename MonoGame.Library.SDL.csproj => src/MonoGame.Library.SDL.csproj (77%) diff --git a/.gitignore b/.gitignore index b84edc7..9cd1809 100644 --- a/.gitignore +++ b/.gitignore @@ -403,3 +403,5 @@ tools/ # Artifacts artifacts/ artifacts-*/ + +.idea diff --git a/MonoGame.Library.SDL.sln b/MonoGame.Library.SDL.sln new file mode 100644 index 0000000..c48dc40 --- /dev/null +++ b/MonoGame.Library.SDL.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Library.SDL", "src\MonoGame.Library.SDL.csproj", "{F9BD9E87-2B0B-4CB8-9C39-3FACD66E14AF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Build", "build\Build.csproj", "{8363325E-56EB-4B87-B170-C28237FB80CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F9BD9E87-2B0B-4CB8-9C39-3FACD66E14AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9BD9E87-2B0B-4CB8-9C39-3FACD66E14AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9BD9E87-2B0B-4CB8-9C39-3FACD66E14AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9BD9E87-2B0B-4CB8-9C39-3FACD66E14AF}.Release|Any CPU.Build.0 = Release|Any CPU + {8363325E-56EB-4B87-B170-C28237FB80CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8363325E-56EB-4B87-B170-C28237FB80CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8363325E-56EB-4B87-B170-C28237FB80CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8363325E-56EB-4B87-B170-C28237FB80CC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/build.cake b/build.cake deleted file mode 100644 index 90086a3..0000000 --- a/build.cake +++ /dev/null @@ -1,97 +0,0 @@ -#addin nuget:?package=Cake.FileHelpers&version=5.0.0 - -var target = Argument("target", "Build"); -var artifactsDir = "artifacts"; - -////////////////////////////////////////////////////////////////////// -// TASKS -////////////////////////////////////////////////////////////////////// - -Task("BuildWindows") - .WithCriteria(() => IsRunningOnWindows()) - .Does(() => -{ - // Build - var buildDir = "sdl/build"; - CreateDirectory(buildDir); - StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "-A x64 ../" }); - StartProcess("msbuild", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "SDL2.sln /p:Configuration=Release" }); - - // Copy artifact - CreateDirectory(artifactsDir); - CopyFile("sdl/build/Release/SDL2.dll", $"{artifactsDir}/SDL2.dll"); -}); - -Task("BuildMacOS") - .WithCriteria(() => IsRunningOnMacOs()) - .Does(() => -{ - // Build - var buildDir = "sdl/build"; - CreateDirectory(buildDir); - StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "../ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 -DCMAKE_BUILD_TYPE=Release" }); - StartProcess("make", new ProcessSettings { WorkingDirectory = buildDir }); - - // Copy artifact - CreateDirectory(artifactsDir); - CopyFile("sdl/build/libSDL2-2.0.0.dylib", $"{artifactsDir}/libSDL2-2.0.0.dylib"); -}); - -Task("BuildLinux") - .WithCriteria(() => IsRunningOnLinux()) - .Does(() => -{ - // Build - var buildDir = "sdl/build"; - CreateDirectory(buildDir); - StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "../ -DCMAKE_BUILD_TYPE=Release" }); - StartProcess("make", new ProcessSettings { WorkingDirectory = buildDir }); - - // Copy artifact - CreateDirectory(artifactsDir); - foreach (var filePath in GetFiles(buildDir + "/*")) - { - if (filePath.GetFilename().ToString().StartsWith("libSDL2-2.0.so.0.")) - { - CopyFile(filePath, $"{artifactsDir}/libSDL2-2.0.so.0"); - return; - } - } - - throw new Exception("Failed to locate the artifact file of libSDL2-2.0.so :/"); -}); - -Task("Package") - .Does(() => -{ - var sdlMajor = FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_MAJOR_VERSION +(?\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline); - var sdlMinor = FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_MINOR_VERSION +(?\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline); - var sdlPatch = FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_PATCHLEVEL +(?\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline); - var sdlVersion = $"{sdlMajor}.{sdlMinor}.{sdlPatch}"; - - var dnMsBuildSettings = new DotNetMSBuildSettings(); - dnMsBuildSettings.WithProperty("Version", sdlVersion + "." + EnvironmentVariable("GITHUB_RUN_NUMBER")); - dnMsBuildSettings.WithProperty("RepositoryUrl", "https://github.com/" + EnvironmentVariable("GITHUB_REPOSITORY")); - - var dnPackSettings = new DotNetPackSettings(); - dnPackSettings.MSBuildSettings = dnMsBuildSettings; - dnPackSettings.Verbosity = DotNetVerbosity.Minimal; - dnPackSettings.Configuration = "Release"; - - DotNetPack("MonoGame.Library.SDL.csproj", dnPackSettings); -}); - -////////////////////////////////////////////////////////////////////// -// TASK TARGETS -////////////////////////////////////////////////////////////////////// - -Task("Build") - .IsDependentOn("BuildWindows") - .IsDependentOn("BuildMacOS") - .IsDependentOn("BuildLinux"); - -////////////////////////////////////////////////////////////////////// -// EXECUTION -////////////////////////////////////////////////////////////////////// - -RunTarget(target); \ No newline at end of file diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..2c6bffa --- /dev/null +++ b/build.ps1 @@ -0,0 +1,2 @@ +dotnet run --project build/Build.csproj -- $args +exit $LASTEXITCODE; \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..dfd6b85 --- /dev/null +++ b/build.sh @@ -0,0 +1 @@ +dotnet run --project ./build/Build.csproj -- "$@" diff --git a/build/Build.csproj b/build/Build.csproj new file mode 100644 index 0000000..77721f3 --- /dev/null +++ b/build/Build.csproj @@ -0,0 +1,24 @@ + + + Exe + net7.0 + $(MSBuildProjectDirectory) + enable + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/BuildLinuxTask.cs b/build/BuildLinuxTask.cs new file mode 100644 index 0000000..c655498 --- /dev/null +++ b/build/BuildLinuxTask.cs @@ -0,0 +1,30 @@ + +namespace BuildScripts; + +[TaskName("Build Linux")] +public sealed class BuildLinuxTask : FrostingTask +{ + public override bool ShouldRun(BuildContext context) => context.IsRunningOnLinux(); + + public override void Run(BuildContext context) + { + // Build + var buildDir = "sdl/build"; + context.CreateDirectory(buildDir); + context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "../ -DCMAKE_BUILD_TYPE=Release" }); + context.StartProcess("make", new ProcessSettings { WorkingDirectory = buildDir }); + + // Copy artifact + context.CreateDirectory(context.ArtifactsDir); + foreach (var filePath in context.GetFiles(buildDir + "/*")) + { + if (filePath.GetFilename().ToString().StartsWith("libSDL2-2.0.so.0.")) + { + context.CopyFile(filePath, $"{context.ArtifactsDir}/libSDL2-2.0.so.0"); + return; + } + } + + throw new Exception("Failed to locate the artifact file of libSDL2-2.0.so :/"); + } +} diff --git a/build/BuildMacOSTask.cs b/build/BuildMacOSTask.cs new file mode 100644 index 0000000..e75f4f6 --- /dev/null +++ b/build/BuildMacOSTask.cs @@ -0,0 +1,21 @@ + +namespace BuildScripts; + +[TaskName("Build macOS")] +public sealed class BuildMacOSTask : FrostingTask +{ + public override bool ShouldRun(BuildContext context) => context.IsRunningOnMacOs(); + + public override void Run(BuildContext context) + { + // Build + var buildDir = "sdl/build"; + context.CreateDirectory(buildDir); + context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "../ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 -DCMAKE_BUILD_TYPE=Release" }); + context.StartProcess("make", new ProcessSettings { WorkingDirectory = buildDir }); + + // Copy artifact + context.CreateDirectory(context.ArtifactsDir); + context.CopyFile("sdl/build/libSDL2-2.0.0.dylib", $"{context.ArtifactsDir}/libSDL2-2.0.0.dylib"); + } +} diff --git a/build/BuildWindowsTask.cs b/build/BuildWindowsTask.cs new file mode 100644 index 0000000..a44959f --- /dev/null +++ b/build/BuildWindowsTask.cs @@ -0,0 +1,21 @@ + +namespace BuildScripts; + +[TaskName("Build Windows")] +public sealed class BuildWindowsTask : FrostingTask +{ + public override bool ShouldRun(BuildContext context) => context.IsRunningOnWindows(); + + public override void Run(BuildContext context) + { + // Build + var buildDir = "sdl/build"; + context.CreateDirectory(buildDir); + context.StartProcess("cmake", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "-A x64 ../" }); + context.StartProcess("msbuild", new ProcessSettings { WorkingDirectory = buildDir, Arguments = "SDL2.sln /p:Configuration=Release" }); + + // Copy artifact + context.CreateDirectory(context.ArtifactsDir); + context.CopyFile("sdl/build/Release/SDL2.dll", $"{context.ArtifactsDir}/SDL2.dll"); + } +} diff --git a/build/PackageTask.cs b/build/PackageTask.cs new file mode 100644 index 0000000..3e18e6e --- /dev/null +++ b/build/PackageTask.cs @@ -0,0 +1,26 @@ + +namespace BuildScripts; + +[TaskName("Package")] +public sealed class PackageTask : FrostingTask +{ + public override bool ShouldRun(BuildContext context) => context.IsRunningOnLinux(); + + public override void Run(BuildContext context) + { + var sdlMajor = context.FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_MAJOR_VERSION +(?\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline); + var sdlMinor = context.FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_MINOR_VERSION +(?\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline); + var sdlPatch = context.FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_PATCHLEVEL +(?\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline); + var sdlVersion = $"{sdlMajor}.{sdlMinor}.{sdlPatch}"; + var dnMsBuildSettings = new DotNetMSBuildSettings(); + dnMsBuildSettings.WithProperty("Version", sdlVersion + "." + context.EnvironmentVariable("GITHUB_RUN_NUMBER")); + dnMsBuildSettings.WithProperty("RepositoryUrl", "https://github.com/" + context.EnvironmentVariable("GITHUB_REPOSITORY")); + + context.DotNetPack("MonoGame.Library.SDL.csproj", new DotNetPackSettings + { + MSBuildSettings = dnMsBuildSettings, + Verbosity = DotNetVerbosity.Minimal, + Configuration = "Release" + }); + } +} diff --git a/build/Program.cs b/build/Program.cs new file mode 100644 index 0000000..af8a0b9 --- /dev/null +++ b/build/Program.cs @@ -0,0 +1,32 @@ + +namespace BuildScripts; + +public static class Program +{ + public static int Main(string[] args) + => new CakeHost() + .UseWorkingDirectory("../") + .UseContext() + .Run(args); + + public static string GetArgument(this ICakeArguments args, string argName, string defaultArgValue) + => args.HasArgument(argName) ? args.GetArgument(argName) : defaultArgValue; +} + +public class BuildContext : FrostingContext +{ + public string ArtifactsDir { get; } + + public BuildContext(ICakeContext context) : base(context) + { + ArtifactsDir = context.Arguments.GetArgument("artifactsDir", "artifacts"); + } +} + +[TaskName("Default")] +[IsDependentOn(typeof(BuildWindowsTask))] +[IsDependentOn(typeof(BuildMacOSTask))] +[IsDependentOn(typeof(BuildLinuxTask))] +public class DefaultTask : FrostingTask +{ +} diff --git a/MonoGame.Library.SDL.csproj b/src/MonoGame.Library.SDL.csproj similarity index 77% rename from MonoGame.Library.SDL.csproj rename to src/MonoGame.Library.SDL.csproj index d2fd70b..a3c0296 100644 --- a/MonoGame.Library.SDL.csproj +++ b/src/MonoGame.Library.SDL.csproj @@ -9,15 +9,15 @@ - + SDL2.dll runtimes\win-x64\native - + libSDL2-2.0.0.dylib runtimes\osx\native - + libSDL2-2.0.so.0 runtimes\linux-x64\native