Use correct methods and URL to generate release notes (#2592)

This commit is contained in:
Riccardo De Agostini
2022-10-07 20:06:53 +02:00
committed by GitHub
parent 971fa50d6e
commit fa29939f50
4 changed files with 37 additions and 10 deletions

View File

@@ -31,7 +31,7 @@ namespace Octokit.Tests.Clients
await releasesClient.GenerateReleaseNotes("fake", "repo", data);
client.Received().Post<GeneratedReleaseNotes>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/releases"),
client.Received().Post<GeneratedReleaseNotes>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/releases/generate-notes"),
data,
"application/vnd.github.v3");
}
@@ -45,7 +45,7 @@ namespace Octokit.Tests.Clients
await releasesClient.GenerateReleaseNotes(1, data);
client.Received().Post<GeneratedReleaseNotes>(Arg.Is<Uri>(u => u.ToString() == "repositories/1/releases"),
client.Received().Post<GeneratedReleaseNotes>(Arg.Is<Uri>(u => u.ToString() == "repositories/1/releases/generate-notes"),
data,
"application/vnd.github.v3");
}

View File

@@ -30,14 +30,14 @@ namespace Octokit
/// <param name="name">The repository's name</param>
/// <param name="data">The request for generating release notes</param>
/// <exception cref="ApiException">Thrown when a general API error occurs.</exception>
[ManualRoute("GET", "/repos/{owner}/{repo}/releases")]
[ManualRoute("POST", "/repos/{owner}/{repo}/releases/generate-notes")]
public Task<GeneratedReleaseNotes> GenerateReleaseNotes(string owner, string name, GenerateReleaseNotesRequest data)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(data, nameof(data));
var endpoint = ApiUrls.Releases(owner, name);
var endpoint = ApiUrls.ReleasesGenerateNotes(owner, name);
return ApiConnection.Post<GeneratedReleaseNotes>(endpoint, data, AcceptHeaders.StableVersion);
}
@@ -50,12 +50,12 @@ namespace Octokit
/// <param name="repositoryId">The Id of the repository</param>
/// <param name="data">The request for generating release notes</param>
/// <exception cref="ApiException">Thrown when a general API error occurs.</exception>
[ManualRoute("GET", "/repos/{owner}/{repo}/releases")]
[ManualRoute("POST", "/repositories/{id}/releases/generate-notes")]
public Task<GeneratedReleaseNotes> GenerateReleaseNotes(long repositoryId, GenerateReleaseNotesRequest data)
{
Ensure.ArgumentNotNull(data, nameof(data));
var endpoint = ApiUrls.Releases(repositoryId);
var endpoint = ApiUrls.ReleasesGenerateNotes(repositoryId);
return ApiConnection.Post<GeneratedReleaseNotes>(endpoint, data, AcceptHeaders.StableVersion);
}

View File

@@ -191,6 +191,17 @@ namespace Octokit
return "repos/{0}/{1}/releases".FormatUri(owner, name);
}
/// <summary>
/// Returns the <see cref="Uri"/> that generates release notes for the specified repository.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <returns>The <see cref="Uri"/> that generates release notes for the specified repository.</returns>
public static Uri ReleasesGenerateNotes(string owner, string name)
{
return "repos/{0}/{1}/releases/generate-notes".FormatUri(owner, name);
}
/// <summary>
/// Returns the <see cref="Uri"/> that returns a single release for the specified repository
/// </summary>
@@ -3441,6 +3452,16 @@ namespace Octokit
return "repositories/{0}/releases".FormatUri(repositoryId);
}
/// <summary>
/// Returns the <see cref="Uri"/> that generates release notes for the specified repository.
/// </summary>
/// <param name="repositoryId">The Id of the repository</param>
/// <returns>The <see cref="Uri"/> that generates release notes for the specified repository.</returns>
public static Uri ReleasesGenerateNotes(long repositoryId)
{
return "repositories/{0}/releases/generate-notes".FormatUri(repositoryId);
}
/// <summary>
/// Returns the <see cref="Uri"/> that returns a single release for the specified repository
/// </summary>

View File

@@ -30,19 +30,25 @@ Console.WriteLine("Created release id {0}", result.Id);
Note that the `Draft` flag is used to indicate when a release should be published to the world, whereas the `PreRelease` flag is used to indicate whether a release is unofficial or preview release.
#### Generate release notes
### Generate release notes
Additionally, you can ask GitHub to generate a name and body before creating a new release.
GitHub can generate a name and body for a new release [automatically](https://github.blog/2021-10-04-beta-github-releases-improving-release-experience/#introducing-auto-generated-release-notes), based upon merged pull requests.
[This is an example](https://github.com/MylesBorins/release-notes-test/releases/tag/v2.0.0) of automatically generated text.
```csharp
var generationRequest = new GenerateReleaseNotesRequest("v2.0.0");
var newTag = "v1.5.7";
var generationRequest = new GenerateReleaseNotesRequest(newTag);
generationRequest.TargetCommitish = "main"; // Optional, can be a branch, tag, or SHA; defaults to the main branch.
generationRequest.PreviousTagName = "v1.5.6"; // Optional; default is automagically determined, based on existing tags.
var releaseNotes = await client.Repository.Release.GenerateReleaseNotes("octokit", "octokit.net", generationRequest);
var newRelease = new NewRelease("v1.0.0");
var newRelease = new NewRelease(newTag); // Use the same tag as before, because it now appears in generated text.
newRelease.Name = releaseNotes.Name;
newRelease.Body = releaseNotes.Body;
```
This feature can be customized at the repository level, by following [these instructions](https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuring-automatically-generated-release-notes).
### Update
Once the release is ready for the public, you can apply an update to the release: