Publish win-arm64 release (#28)

This commit is contained in:
Matt Parker
2025-12-10 23:59:46 +10:00
committed by GitHub
parent 441bc18776
commit ed4c3c21e6
6 changed files with 127 additions and 32 deletions

View File

@@ -24,6 +24,7 @@ builder.Services.AddParallelPipelines(
builder.Services
.AddStep<RestoreAndBuildStep>()
.AddStep<CreateWindowsRelease>()
.AddStep<CreateWindowsArm64Release>()
.AddStep<CreateLinuxRelease>()
.AddStep<CreateMacosRelease>()
.AddStep<CreateGithubRelease>()

View File

@@ -9,6 +9,7 @@ using ParallelPipelines.Host.Helpers;
namespace Deploy.Steps;
[DependsOnStep<CreateWindowsRelease>]
[DependsOnStep<CreateWindowsArm64Release>]
[DependsOnStep<CreateLinuxRelease>]
[DependsOnStep<CreateMacosRelease>]
public class CreateGithubRelease(IPipelineContext pipelineContext) : IStep
@@ -40,35 +41,26 @@ public class CreateGithubRelease(IPipelineContext pipelineContext) : IStep
var repo = "SharpIDE";
var release = await github.Repository.Release.Create(owner, repo, newRelease);
var windowsReleaseZip = await PipelineFileHelper.GitRootDirectory.GetFile("./artifacts/publish-godot/sharpide-win-x64.zip");
await using var stream = windowsReleaseZip.OpenRead();
var upload = new ReleaseAssetUpload
{
FileName = $"sharpide-win-x64-{versionString}.zip",
ContentType = "application/octet-stream",
RawData = stream
};
var asset = await github.Repository.Release.UploadAsset(release, upload, cancellationToken);
var win64Release = await UploadAssetToRelease(github, release, "./artifacts/publish-godot/sharpide-win-x64.zip", $"sharpide-win-x64-{versionString}.zip", cancellationToken);
var winArm64Release = await UploadAssetToRelease(github, release, "./artifacts/publish-godot/sharpide-win-arm64.zip", $"sharpide-win-arm64-{versionString}.zip", cancellationToken);
var linuxRelease = await UploadAssetToRelease(github, release, "./artifacts/publish-godot/sharpide-linux-x64.tar.gz", $"sharpide-linux-x64-{versionString}.tar.gz", cancellationToken);
var macosRelease = await UploadAssetToRelease(github, release, "./artifacts/publish-godot/sharpide-osx-universal.zip", $"sharpide-osx-universal-{versionString}.zip", 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 macosReleaseZip = await PipelineFileHelper.GitRootDirectory.GetFile("./artifacts/publish-godot/sharpide-osx-universal.zip");
await using var macosStream = macosReleaseZip.OpenRead();
var macosUpload = new ReleaseAssetUpload
{
FileName = $"sharpide-osx-universal-{versionString}.zip",
ContentType = "application/octet-stream",
RawData = macosStream
};
var macosAsset = await github.Repository.Release.UploadAsset(release, macosUpload, cancellationToken);
return null;
}
private static async Task<ReleaseAsset> UploadAssetToRelease(GitHubClient github, Release release, string relativeFilePath, string releaseFileName, CancellationToken cancellationToken)
{
var releaseArchive = await PipelineFileHelper.GitRootDirectory.GetFile(relativeFilePath);
await using var releaseZipStream = releaseArchive.OpenRead();
var upload = new ReleaseAssetUpload
{
FileName = releaseFileName,
ContentType = "application/octet-stream",
RawData = releaseZipStream
};
var asset = await github.Repository.Release.UploadAsset(release, upload, cancellationToken);
return asset;
}
}

View File

@@ -6,7 +6,7 @@ using ParallelPipelines.Host.Helpers;
namespace Deploy.Steps;
[DependsOnStep<RestoreAndBuildStep>]
[DependsOnStep<CreateWindowsRelease>]
[DependsOnStep<CreateWindowsArm64Release>]
public class CreateMacosRelease : IStep
{
public async Task<BufferedCommandResult?[]?> RunStep(CancellationToken cancellationToken)

View File

@@ -0,0 +1,31 @@
using CliWrap.Buffered;
using ParallelPipelines.Application.Attributes;
using ParallelPipelines.Domain.Entities;
using ParallelPipelines.Host.Helpers;
namespace Deploy.Steps;
[DependsOnStep<RestoreAndBuildStep>]
[DependsOnStep<CreateWindowsRelease>]
public class CreateWindowsArm64Release : IStep
{
public async Task<BufferedCommandResult?[]?> RunStep(CancellationToken cancellationToken)
{
var godotPublishDirectory = await PipelineFileHelper.GitRootDirectory.GetDirectory("./artifacts/publish-godot");
godotPublishDirectory.Create();
var windowsPublishDirectory = await godotPublishDirectory.GetDirectory("./win-arm64");
windowsPublishDirectory.Create();
var godotProjectFile = await PipelineFileHelper.GitRootDirectory.GetFile("./src/SharpIDE.Godot/project.godot");
var godotExportResult = await PipelineCliHelper.RunCliCommandAsync(
"godot",
$"--headless --verbose --export-release Windows-arm64 --project {godotProjectFile.GetFullNameUnix()}",
cancellationToken
);
var windowsZipFile = await windowsPublishDirectory.ZipDirectoryToFile($"{PipelineFileHelper.GitRootDirectory.FullName}/artifacts/publish-godot/sharpide-win-arm64.zip");
return [godotExportResult];
}
}

View File

@@ -19,7 +19,7 @@ public class CreateWindowsRelease : IStep
var godotExportResult = await PipelineCliHelper.RunCliCommandAsync(
"godot",
$"--headless --verbose --export-release Windows --project {godotProjectFile.GetFullNameUnix()}",
$"--headless --verbose --export-release Windows-x64 --project {godotProjectFile.GetFullNameUnix()}",
cancellationToken
);