From e84e0a26b166627d4a3ccd7ccdfe6146e1c6a006 Mon Sep 17 00:00:00 2001
From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com>
Date: Sat, 15 Nov 2025 16:56:21 +1000
Subject: [PATCH] Add macos and linux publishing
---
Directory.Packages.props | 2 +-
iac/Deploy/Program.cs | 2 ++
iac/Deploy/Steps/CreateGithubRelease.cs | 22 ++++++++++++++++++
iac/Deploy/Steps/CreateLinuxRelease.cs | 30 ++++++++++++++++++++++++
iac/Deploy/Steps/CreateMacosRelease.cs | 31 +++++++++++++++++++++++++
5 files changed, 86 insertions(+), 1 deletion(-)
create mode 100644 iac/Deploy/Steps/CreateLinuxRelease.cs
create mode 100644 iac/Deploy/Steps/CreateMacosRelease.cs
diff --git a/Directory.Packages.props b/Directory.Packages.props
index b6e30df..6d8394d 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -50,7 +50,7 @@
-
+
diff --git a/iac/Deploy/Program.cs b/iac/Deploy/Program.cs
index 89f9596..fbe1597 100644
--- a/iac/Deploy/Program.cs
+++ b/iac/Deploy/Program.cs
@@ -24,6 +24,8 @@ builder.Services.AddParallelPipelines(
builder.Services
.AddStep()
.AddStep()
+ .AddStep()
+ .AddStep()
.AddStep()
;
diff --git a/iac/Deploy/Steps/CreateGithubRelease.cs b/iac/Deploy/Steps/CreateGithubRelease.cs
index 7133495..1e47641 100644
--- a/iac/Deploy/Steps/CreateGithubRelease.cs
+++ b/iac/Deploy/Steps/CreateGithubRelease.cs
@@ -9,6 +9,8 @@ using ParallelPipelines.Host.Helpers;
namespace Deploy.Steps;
[DependsOnStep]
+[DependsOnStep]
+[DependsOnStep]
public class CreateGithubRelease(IPipelineContext pipelineContext) : IStep
{
public async Task RunStep(CancellationToken cancellationToken)
@@ -47,6 +49,26 @@ public class CreateGithubRelease(IPipelineContext pipelineContext) : IStep
RawData = stream
};
var asset = await github.Repository.Release.UploadAsset(release, upload, cancellationToken);
+
+ var linuxReleaseTarball = await PipelineFileHelper.GitRootDirectory.GetFile("./artifacts/publish-godot/sharpide-linux-x64.tar.gz");
+ await using var linuxStream = linuxReleaseTarball.OpenRead();
+ var linuxUpload = new ReleaseAssetUpload
+ {
+ FileName = $"sharpide-linux-x64-{versionString}.tar.gz",
+ ContentType = "application/gzip",
+ RawData = linuxStream
+ };
+ var linuxAsset = await github.Repository.Release.UploadAsset(release, linuxUpload, cancellationToken);
+
+ var macosReleaseDmg = await PipelineFileHelper.GitRootDirectory.GetFile("./artifacts/publish-godot/sharpide-osx-universal.dmg");
+ await using var macosStream = macosReleaseDmg.OpenRead();
+ var macosUpload = new ReleaseAssetUpload
+ {
+ FileName = $"sharpide-osx-universal-{versionString}.dmg",
+ ContentType = "application/octet-stream",
+ RawData = macosStream
+ };
+ var macosAsset = await github.Repository.Release.UploadAsset(release, macosUpload, cancellationToken);
return null;
}
}
diff --git a/iac/Deploy/Steps/CreateLinuxRelease.cs b/iac/Deploy/Steps/CreateLinuxRelease.cs
new file mode 100644
index 0000000..385c4a1
--- /dev/null
+++ b/iac/Deploy/Steps/CreateLinuxRelease.cs
@@ -0,0 +1,30 @@
+using CliWrap.Buffered;
+using ParallelPipelines.Application.Attributes;
+using ParallelPipelines.Domain.Entities;
+using ParallelPipelines.Host.Helpers;
+
+namespace Deploy.Steps;
+
+[DependsOnStep]
+public class CreateLinuxRelease : IStep
+{
+ public async Task RunStep(CancellationToken cancellationToken)
+ {
+ var godotPublishDirectory = await PipelineFileHelper.GitRootDirectory.GetDirectory("./artifacts/publish-godot");
+ godotPublishDirectory.Create();
+ var linuxPublishDirectory = await godotPublishDirectory.GetDirectory("./linux");
+ linuxPublishDirectory.Create();
+
+ var godotProjectFile = await PipelineFileHelper.GitRootDirectory.GetFile("./src/SharpIDE.Godot/project.godot");
+
+ var godotExportResult = await PipelineCliHelper.RunCliCommandAsync(
+ "godot",
+ $"--headless --verbose --export-release Windows --project {godotProjectFile.GetFullNameUnix()}",
+ cancellationToken
+ );
+
+ var linuxTarballFile = await linuxPublishDirectory.TarballDirectoryToFile($"{PipelineFileHelper.GitRootDirectory.FullName}/artifacts/publish-godot/sharpide-linux-x64.tar.gz");
+
+ return [godotExportResult];
+ }
+}
diff --git a/iac/Deploy/Steps/CreateMacosRelease.cs b/iac/Deploy/Steps/CreateMacosRelease.cs
new file mode 100644
index 0000000..1e79fd6
--- /dev/null
+++ b/iac/Deploy/Steps/CreateMacosRelease.cs
@@ -0,0 +1,31 @@
+using CliWrap.Buffered;
+using ParallelPipelines.Application.Attributes;
+using ParallelPipelines.Domain.Entities;
+using ParallelPipelines.Host.Helpers;
+
+namespace Deploy.Steps;
+
+[DependsOnStep]
+public class CreateMacosRelease : IStep
+{
+ public async Task RunStep(CancellationToken cancellationToken)
+ {
+ var godotPublishDirectory = await PipelineFileHelper.GitRootDirectory.GetDirectory("./artifacts/publish-godot");
+ godotPublishDirectory.Create();
+ var macosPublishDirectory = await godotPublishDirectory.GetDirectory("./osx");
+ macosPublishDirectory.Create();
+
+ var godotProjectFile = await PipelineFileHelper.GitRootDirectory.GetFile("./src/SharpIDE.Godot/project.godot");
+
+ var godotExportResult = await PipelineCliHelper.RunCliCommandAsync(
+ "godot",
+ $"--headless --verbose --export-release macOS --project {godotProjectFile.GetFullNameUnix()}",
+ cancellationToken
+ );
+
+ var macosDmgFile = await macosPublishDirectory.GetFile("SharpIDE.dmg");
+ macosDmgFile.MoveTo($"{PipelineFileHelper.GitRootDirectory.FullName}/artifacts/publish-godot/sharpide-osx-universal.dmg");
+
+ return [godotExportResult];
+ }
+}