From 28576b862e26a1d89e3e2475380f4b92759264b8 Mon Sep 17 00:00:00 2001 From: Jasper Arildslund Date: Tue, 1 Aug 2023 15:01:39 +0200 Subject: [PATCH] [feat]: Support make_latest in create and update release --- .../Clients/ReleasesClientTests.cs | 39 ++++++++++++++++++- Octokit/Models/Request/MakeLatestQualifier.cs | 14 +++++++ Octokit/Models/Request/NewRelease.cs | 10 +++++ Octokit/Models/Request/ReleaseUpdate.cs | 9 +++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 Octokit/Models/Request/MakeLatestQualifier.cs diff --git a/Octokit.Tests.Integration/Clients/ReleasesClientTests.cs b/Octokit.Tests.Integration/Clients/ReleasesClientTests.cs index 258ec656f9..10b6cd08d8 100644 --- a/Octokit.Tests.Integration/Clients/ReleasesClientTests.cs +++ b/Octokit.Tests.Integration/Clients/ReleasesClientTests.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; @@ -55,6 +55,21 @@ public async Task SendsCreateToCorrectUrlWithRepositoryId() Assert.NotNull(release); } + [IntegrationTest] + public async Task CreateReleaseAsLatest() + { + var firstReleaseRequest = new NewRelease("0.1") { MakeLatest = MakeLatestQualifier.False }; + await _releaseClient.Create(_context.Repository.Id, firstReleaseRequest); + + Assert.ThrowsAsync(async () => await _releaseClient.GetLatest(_context.RepositoryOwner, _context.RepositoryName)); + + var secondReleaseRequest = new NewRelease("0.2") { MakeLatest = MakeLatestQualifier.True }; + var secondRelease = await _releaseClient.Create(_context.Repository.Id, secondReleaseRequest); + + var latestRelease = await _releaseClient.GetLatest(_context.RepositoryOwner, _context.RepositoryName); + Assert.Equal(secondRelease.Id, latestRelease.Id); + } + public void Dispose() { _context.Dispose(); @@ -444,6 +459,28 @@ public async Task CanChangeCommitIshOfReleaseWithRepositoryId() Assert.Equal(newHead.Object.Sha, updatedRelease.TargetCommitish); } + [IntegrationTest] + public async Task CanMakeReleaseLatest() + { + var firstReleaseRequest = new NewRelease("0.1"); + var firstRelease = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, firstReleaseRequest); + + var secondReleaseRequest = new NewRelease("0.2") { Draft = true }; + var secondRelease = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, secondReleaseRequest); + + var latestRelease = await _releaseClient.GetLatest(_context.RepositoryOwner, _context.RepositoryName); + Assert.Equal(firstRelease.Id, latestRelease.Id); + + var editRelease = secondRelease.ToUpdate(); + editRelease.Draft = false; + editRelease.MakeLatest = MakeLatestQualifier.True; + + await _releaseClient.Edit(_context.RepositoryOwner, _context.RepositoryName, secondRelease.Id, editRelease); + + latestRelease = await _releaseClient.GetLatest(_context.RepositoryOwner, _context.RepositoryName); + Assert.Equal(secondRelease.Id, latestRelease.Id); + } + public void Dispose() { _context.Dispose(); diff --git a/Octokit/Models/Request/MakeLatestQualifier.cs b/Octokit/Models/Request/MakeLatestQualifier.cs new file mode 100644 index 0000000000..ae4fbe24f0 --- /dev/null +++ b/Octokit/Models/Request/MakeLatestQualifier.cs @@ -0,0 +1,14 @@ +using Octokit.Internal; + +namespace Octokit +{ + public enum MakeLatestQualifier + { + [Parameter(Value = "true")] + True = 1, + [Parameter(Value = "false")] + False = 2, + [Parameter(Value = "legacy")] + Legacy = 3, + } +} diff --git a/Octokit/Models/Request/NewRelease.cs b/Octokit/Models/Request/NewRelease.cs index 050be78837..8f412a2c3c 100644 --- a/Octokit/Models/Request/NewRelease.cs +++ b/Octokit/Models/Request/NewRelease.cs @@ -84,6 +84,16 @@ public NewRelease(string tagName) /// public bool GenerateReleaseNotes { get; set; } + /// + /// Specifies whether this release should be set as the latest release for the repository. + /// Drafts and prereleases cannot be set as latest. Defaults to true for newly published releases. + /// + /// + /// True set release as latest; + /// Legacy specifies that the latest release should be determined based on the release creation date and higher semantic version. + /// + public MakeLatestQualifier? MakeLatest { get; set; } + internal string DebuggerDisplay { get diff --git a/Octokit/Models/Request/ReleaseUpdate.cs b/Octokit/Models/Request/ReleaseUpdate.cs index 9bf687bb55..e12a108348 100644 --- a/Octokit/Models/Request/ReleaseUpdate.cs +++ b/Octokit/Models/Request/ReleaseUpdate.cs @@ -63,6 +63,15 @@ public class ReleaseUpdate /// public bool? Prerelease { get; set; } + /// + /// Specifies whether this release should be set as the latest release for the repository. + /// Drafts and prereleases cannot be set as latest. Defaults to true for newly published releases. + /// + /// + /// True set release as latest; + /// Legacy specifies that the latest release should be determined based on the release creation date and higher semantic version. + /// + public MakeLatestQualifier? MakeLatest { get; set; } internal string DebuggerDisplay { get