Skip to content

Commit

Permalink
Switch to CAKE Frosting for CI
Browse files Browse the repository at this point in the history
  • Loading branch information
harry-cpp committed Oct 27, 2023
1 parent 7080076 commit 1e158cf
Show file tree
Hide file tree
Showing 12 changed files with 190 additions and 100 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -403,3 +403,5 @@ tools/
# Artifacts
artifacts/
artifacts-*/

.idea
28 changes: 28 additions & 0 deletions 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
97 changes: 0 additions & 97 deletions build.cake

This file was deleted.

2 changes: 2 additions & 0 deletions build.ps1
@@ -0,0 +1,2 @@
dotnet run --project build/Build.csproj -- $args
exit $LASTEXITCODE;
1 change: 1 addition & 0 deletions build.sh
@@ -0,0 +1 @@
dotnet run --project ./build/Build.csproj -- "$@"
24 changes: 24 additions & 0 deletions build/Build.csproj
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Using Include="Cake.Frosting" />
<Using Include="Cake.Common.Tools.DotNet" />
<Using Include="Cake.Common.Tools.DotNet.MSBuild" />
<Using Include="Cake.Common.Tools.DotNet.Pack" />
<Using Include="Cake.Common.IO" />
<Using Include="Cake.Common" />
<Using Include="Cake.Core" />
<Using Include="Cake.Core.Diagnostics" />
<Using Include="Cake.Core.IO" />
<Using Include="Cake.FileHelpers" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Cake.FileHelpers" Version="6.1.3" />
<PackageReference Include="Cake.Frosting" Version="3.1.0" />
</ItemGroup>
</Project>
30 changes: 30 additions & 0 deletions build/BuildLinuxTask.cs
@@ -0,0 +1,30 @@

namespace BuildScripts;

[TaskName("Build Linux")]
public sealed class BuildLinuxTask : FrostingTask<BuildContext>
{
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 :/");
}
}
21 changes: 21 additions & 0 deletions build/BuildMacOSTask.cs
@@ -0,0 +1,21 @@

namespace BuildScripts;

[TaskName("Build macOS")]
public sealed class BuildMacOSTask : FrostingTask<BuildContext>
{
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");
}
}
21 changes: 21 additions & 0 deletions build/BuildWindowsTask.cs
@@ -0,0 +1,21 @@

namespace BuildScripts;

[TaskName("Build Windows")]
public sealed class BuildWindowsTask : FrostingTask<BuildContext>
{
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");
}
}
26 changes: 26 additions & 0 deletions build/PackageTask.cs
@@ -0,0 +1,26 @@

namespace BuildScripts;

[TaskName("Package")]
public sealed class PackageTask : FrostingTask<BuildContext>
{
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 +(?<ver>\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline);
var sdlMinor = context.FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_MINOR_VERSION +(?<ver>\d+)", 1, System.Text.RegularExpressions.RegexOptions.Singleline);
var sdlPatch = context.FindRegexMatchGroupInFile("sdl/include/SDL_version.h", @"#define SDL_PATCHLEVEL +(?<ver>\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"
});
}
}
32 changes: 32 additions & 0 deletions build/Program.cs
@@ -0,0 +1,32 @@

namespace BuildScripts;

public static class Program
{
public static int Main(string[] args)
=> new CakeHost()
.UseWorkingDirectory("../")
.UseContext<BuildContext>()
.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
{
}
Expand Up @@ -9,15 +9,15 @@
</PropertyGroup>

<ItemGroup>
<Content Include="artifacts-windows-x64\SDL2.dll">
<Content Include="..\artifacts-windows-x64\SDL2.dll">
<Link>SDL2.dll</Link>
<PackagePath>runtimes\win-x64\native</PackagePath>
</Content>
<Content Include="artifacts-macos\libSDL2-2.0.0.dylib">
<Content Include="..\artifacts-macos\libSDL2-2.0.0.dylib">
<Link>libSDL2-2.0.0.dylib</Link>
<PackagePath>runtimes\osx\native</PackagePath>
</Content>
<Content Include="artifacts-linux-x64\libSDL2-2.0.so.0">
<Content Include="..\artifacts-linux-x64\libSDL2-2.0.so.0">
<Link>libSDL2-2.0.so.0</Link>
<PackagePath>runtimes\linux-x64\native</PackagePath>
</Content>
Expand Down

0 comments on commit 1e158cf

Please sign in to comment.