@@ -26,6 +26,7 @@ type RepositoryRelease struct {
2626 Draft * bool `json:"draft,omitempty"`
2727 Prerelease * bool `json:"prerelease,omitempty"`
2828 DiscussionCategoryName * string `json:"discussion_category_name,omitempty"`
29+ GenerateReleaseNotes * bool `json:"generate_release_notes,omitempty"`
2930
3031 // The following fields are not used in CreateRelease or EditRelease:
3132 ID * int64 `json:"id,omitempty"`
@@ -46,6 +47,19 @@ func (r RepositoryRelease) String() string {
4647 return Stringify (r )
4748}
4849
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+
4963// ReleaseAsset represents a GitHub release asset in a repository.
5064type ReleaseAsset struct {
5165 ID * int64 `json:"id,omitempty"`
@@ -114,6 +128,25 @@ func (s *RepositoriesService) GetReleaseByTag(ctx context.Context, owner, repo,
114128 return s .getSingleRelease (ctx , u )
115129}
116130
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+
117150func (s * RepositoriesService ) getSingleRelease (ctx context.Context , url string ) (* RepositoryRelease , * Response , error ) {
118151 req , err := s .client .NewRequest ("GET" , url , nil )
119152 if err != nil {
@@ -141,6 +174,7 @@ type repositoryReleaseRequest struct {
141174 Body * string `json:"body,omitempty"`
142175 Draft * bool `json:"draft,omitempty"`
143176 Prerelease * bool `json:"prerelease,omitempty"`
177+ GenerateReleaseNotes * bool `json:"generate_release_notes,omitempty"`
144178 DiscussionCategoryName * string `json:"discussion_category_name,omitempty"`
145179}
146180
@@ -161,6 +195,7 @@ func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo str
161195 Draft : release .Draft ,
162196 Prerelease : release .Prerelease ,
163197 DiscussionCategoryName : release .DiscussionCategoryName ,
198+ GenerateReleaseNotes : release .GenerateReleaseNotes ,
164199 }
165200
166201 req , err := s .client .NewRequest ("POST" , u , releaseReq )
@@ -193,6 +228,7 @@ func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo strin
193228 Draft : release .Draft ,
194229 Prerelease : release .Prerelease ,
195230 DiscussionCategoryName : release .DiscussionCategoryName ,
231+ GenerateReleaseNotes : release .GenerateReleaseNotes ,
196232 }
197233
198234 req , err := s .client .NewRequest ("PATCH" , u , releaseReq )
0 commit comments