Skip to content

Commit 3d0fea9

Browse files
committed
Add support for generating release notes automatically
1 parent f20ac29 commit 3d0fea9

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

OctoKit/Releases.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public extension Octokit {
114114
/// - body: Text describing the contents of the tag.
115115
/// - prerelease: `true` to create a draft (unpublished) release, `false` to create a published one. Default: `false`.
116116
/// - draft: `true` to identify the release as a prerelease. `false` to identify the release as a full release. Default: `false`.
117+
/// - generateReleaseNotes: Whether to automatically generate the name and body for this release. If name is specified, the specified name will be used; otherwise, a name will be automatically generated. If body is specified, the body will be pre-pended to the automatically generated notes. Default: `false`.
117118
/// - completion: Callback for the outcome of the created release.
118119
@discardableResult
119120
func postRelease(_ session: RequestKitURLSession = URLSession.shared,
@@ -125,9 +126,10 @@ public extension Octokit {
125126
body: String? = nil,
126127
prerelease: Bool = false,
127128
draft: Bool = false,
129+
generateReleaseNotes: Bool = false,
128130
completion: @escaping (_ response: Result<Release, Error>) -> Void) -> URLSessionDataTaskProtocol?
129131
{
130-
let router = ReleaseRouter.postRelease(configuration, owner, repository, tagName, targetCommitish, name, body, prerelease, draft)
132+
let router = ReleaseRouter.postRelease(configuration, owner, repository, tagName, targetCommitish, name, body, prerelease, draft, generateReleaseNotes)
131133
let decoder = JSONDecoder()
132134
decoder.dateDecodingStrategy = .formatted(Time.rfc3339DateFormatter)
133135

@@ -166,14 +168,14 @@ public extension Octokit {
166168
enum ReleaseRouter: JSONPostRouter {
167169
case listReleases(Configuration, String, String, Int)
168170
case getReleaseByTag(Configuration, String, String, String)
169-
case postRelease(Configuration, String, String, String, String?, String?, String?, Bool, Bool)
171+
case postRelease(Configuration, String, String, String, String?, String?, String?, Bool, Bool, Bool)
170172
case deleteRelease(Configuration, String, String, Int)
171173

172174
var configuration: Configuration {
173175
switch self {
174176
case let .listReleases(config, _, _, _): return config
175177
case let .getReleaseByTag(config, _, _, _): return config
176-
case let .postRelease(config, _, _, _, _, _, _, _, _): return config
178+
case let .postRelease(config, _, _, _, _, _, _, _, _, _): return config
177179
case let .deleteRelease(config, _, _, _): return config
178180
}
179181
}
@@ -206,11 +208,12 @@ enum ReleaseRouter: JSONPostRouter {
206208
return ["per_page": "\(perPage)"]
207209
case .getReleaseByTag:
208210
return [:]
209-
case let .postRelease(_, _, _, tagName, targetCommitish, name, body, prerelease, draft):
211+
case let .postRelease(_, _, _, tagName, targetCommitish, name, body, prerelease, draft, generateReleaseNotes):
210212
var params: [String: Any] = [
211213
"tag_name": tagName,
212214
"prerelease": prerelease,
213-
"draft": draft
215+
"draft": draft,
216+
"generate_release_notes": generateReleaseNotes
214217
]
215218
if let targetCommitish = targetCommitish {
216219
params["target_commitish"] = targetCommitish
@@ -233,7 +236,7 @@ enum ReleaseRouter: JSONPostRouter {
233236
return "repos/\(owner)/\(repo)/releases"
234237
case let .getReleaseByTag(_, owner, repo, tag):
235238
return "repos/\(owner)/\(repo)/releases/tags/\(tag)"
236-
case let .postRelease(_, owner, repo, _, _, _, _, _, _):
239+
case let .postRelease(_, owner, repo, _, _, _, _, _, _, _):
237240
return "repos/\(owner)/\(repo)/releases"
238241
case let .deleteRelease(_, owner, repo, releaseId):
239242
return "repos/\(owner)/\(repo)/releases/\(releaseId)"

0 commit comments

Comments
 (0)