@@ -26,6 +26,7 @@ type RepositoryRelease struct {
26
26
Draft * bool `json:"draft,omitempty"`
27
27
Prerelease * bool `json:"prerelease,omitempty"`
28
28
DiscussionCategoryName * string `json:"discussion_category_name,omitempty"`
29
+ GenerateReleaseNotes * bool `json:"generate_release_notes,omitempty"`
29
30
30
31
// The following fields are not used in CreateRelease or EditRelease:
31
32
ID * int64 `json:"id,omitempty"`
@@ -46,6 +47,19 @@ func (r RepositoryRelease) String() string {
46
47
return Stringify (r )
47
48
}
48
49
50
+ // RepositoryReleaseNotes represents a GitHub-generated release notes.
51
+ type RepositoryReleaseNotes struct {
52
+ Name string `json:"name"`
53
+ Body string `json:"body"`
54
+ }
55
+
56
+ // GenerateNotesOptions represents the options to generate release notes.
57
+ type GenerateNotesOptions struct {
58
+ TagName string `json:"tag_name"`
59
+ PreviousTagName * string `json:"previous_tag_name,omitempty"`
60
+ TargetCommitish * string `json:"target_commitish,omitempty"`
61
+ }
62
+
49
63
// ReleaseAsset represents a GitHub release asset in a repository.
50
64
type ReleaseAsset struct {
51
65
ID * int64 `json:"id,omitempty"`
@@ -114,6 +128,25 @@ func (s *RepositoriesService) GetReleaseByTag(ctx context.Context, owner, repo,
114
128
return s .getSingleRelease (ctx , u )
115
129
}
116
130
131
+ // GenerateReleaseNotes generates the release notes for the given tag.
132
+ // TODO: api docs
133
+ // GitHub API docs:
134
+ func (s * RepositoriesService ) GenerateReleaseNotes (ctx context.Context , owner , repo string , opts * GenerateNotesOptions ) (* RepositoryReleaseNotes , * Response , error ) {
135
+ u := fmt .Sprintf ("repos/%s/%s/releases/generate-notes" , owner , repo )
136
+ req , err := s .client .NewRequest ("POST" , u , opts )
137
+ if err != nil {
138
+ return nil , nil , err
139
+ }
140
+
141
+ r := new (RepositoryReleaseNotes )
142
+ resp , err := s .client .Do (ctx , req , r )
143
+ if err != nil {
144
+ return nil , resp , err
145
+ }
146
+
147
+ return r , resp , nil
148
+ }
149
+
117
150
func (s * RepositoriesService ) getSingleRelease (ctx context.Context , url string ) (* RepositoryRelease , * Response , error ) {
118
151
req , err := s .client .NewRequest ("GET" , url , nil )
119
152
if err != nil {
@@ -141,6 +174,7 @@ type repositoryReleaseRequest struct {
141
174
Body * string `json:"body,omitempty"`
142
175
Draft * bool `json:"draft,omitempty"`
143
176
Prerelease * bool `json:"prerelease,omitempty"`
177
+ GenerateReleaseNotes * bool `json:"generate_release_notes,omitempty"`
144
178
DiscussionCategoryName * string `json:"discussion_category_name,omitempty"`
145
179
}
146
180
@@ -161,6 +195,7 @@ func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo str
161
195
Draft : release .Draft ,
162
196
Prerelease : release .Prerelease ,
163
197
DiscussionCategoryName : release .DiscussionCategoryName ,
198
+ GenerateReleaseNotes : release .GenerateReleaseNotes ,
164
199
}
165
200
166
201
req , err := s .client .NewRequest ("POST" , u , releaseReq )
@@ -193,6 +228,7 @@ func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo strin
193
228
Draft : release .Draft ,
194
229
Prerelease : release .Prerelease ,
195
230
DiscussionCategoryName : release .DiscussionCategoryName ,
231
+ GenerateReleaseNotes : release .GenerateReleaseNotes ,
196
232
}
197
233
198
234
req , err := s .client .NewRequest ("PATCH" , u , releaseReq )
0 commit comments