@@ -19,24 +19,26 @@ import (
19
19
20
20
// RepositoryRelease represents a GitHub release in a repository.
21
21
type RepositoryRelease struct {
22
- ID * int64 `json:"id,omitempty"`
23
- TagName * string `json:"tag_name,omitempty"`
24
- TargetCommitish * string `json:"target_commitish,omitempty"`
25
- Name * string `json:"name,omitempty"`
26
- Body * string `json:"body,omitempty"`
27
- Draft * bool `json:"draft,omitempty"`
28
- Prerelease * bool `json:"prerelease,omitempty"`
29
- CreatedAt * Timestamp `json:"created_at,omitempty"`
30
- PublishedAt * Timestamp `json:"published_at,omitempty"`
31
- URL * string `json:"url,omitempty"`
32
- HTMLURL * string `json:"html_url,omitempty"`
33
- AssetsURL * string `json:"assets_url,omitempty"`
34
- Assets []ReleaseAsset `json:"assets,omitempty"`
35
- UploadURL * string `json:"upload_url,omitempty"`
36
- ZipballURL * string `json:"zipball_url,omitempty"`
37
- TarballURL * string `json:"tarball_url,omitempty"`
38
- Author * User `json:"author,omitempty"`
39
- NodeID * string `json:"node_id,omitempty"`
22
+ TagName * string `json:"tag_name,omitempty"`
23
+ TargetCommitish * string `json:"target_commitish,omitempty"`
24
+ Name * string `json:"name,omitempty"`
25
+ Body * string `json:"body,omitempty"`
26
+ Draft * bool `json:"draft,omitempty"`
27
+ Prerelease * bool `json:"prerelease,omitempty"`
28
+
29
+ // The following fields are not used in CreateRelease or EditRelease:
30
+ ID * int64 `json:"id,omitempty"`
31
+ CreatedAt * Timestamp `json:"created_at,omitempty"`
32
+ PublishedAt * Timestamp `json:"published_at,omitempty"`
33
+ URL * string `json:"url,omitempty"`
34
+ HTMLURL * string `json:"html_url,omitempty"`
35
+ AssetsURL * string `json:"assets_url,omitempty"`
36
+ Assets []ReleaseAsset `json:"assets,omitempty"`
37
+ UploadURL * string `json:"upload_url,omitempty"`
38
+ ZipballURL * string `json:"zipball_url,omitempty"`
39
+ TarballURL * string `json:"tarball_url,omitempty"`
40
+ Author * User `json:"author,omitempty"`
41
+ NodeID * string `json:"node_id,omitempty"`
40
42
}
41
43
42
44
func (r RepositoryRelease ) String () string {
@@ -125,13 +127,40 @@ func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string)
125
127
return release , resp , nil
126
128
}
127
129
130
+ // repositoryReleaseRequest is a subset of RepositoryRelease and
131
+ // is used internally by CreateRelease and EditRelease to pass
132
+ // only the known fields for these endpoints.
133
+ //
134
+ // See https://github.com/google/go-github/issues/992 for more
135
+ // information.
136
+ type repositoryReleaseRequest struct {
137
+ TagName * string `json:"tag_name,omitempty"`
138
+ TargetCommitish * string `json:"target_commitish,omitempty"`
139
+ Name * string `json:"name,omitempty"`
140
+ Body * string `json:"body,omitempty"`
141
+ Draft * bool `json:"draft,omitempty"`
142
+ Prerelease * bool `json:"prerelease,omitempty"`
143
+ }
144
+
128
145
// CreateRelease adds a new release for a repository.
129
146
//
147
+ // Note that only a subset of the release fields are used.
148
+ // See RepositoryRelease for more information.
149
+ //
130
150
// GitHub API docs: https://developer.github.com/v3/repos/releases/#create-a-release
131
151
func (s * RepositoriesService ) CreateRelease (ctx context.Context , owner , repo string , release * RepositoryRelease ) (* RepositoryRelease , * Response , error ) {
132
152
u := fmt .Sprintf ("repos/%s/%s/releases" , owner , repo )
133
153
134
- req , err := s .client .NewRequest ("POST" , u , release )
154
+ releaseReq := & repositoryReleaseRequest {
155
+ TagName : release .TagName ,
156
+ TargetCommitish : release .TargetCommitish ,
157
+ Name : release .Name ,
158
+ Body : release .Body ,
159
+ Draft : release .Draft ,
160
+ Prerelease : release .Prerelease ,
161
+ }
162
+
163
+ req , err := s .client .NewRequest ("POST" , u , releaseReq )
135
164
if err != nil {
136
165
return nil , nil , err
137
166
}
@@ -146,11 +175,23 @@ func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo str
146
175
147
176
// EditRelease edits a repository release.
148
177
//
178
+ // Note that only a subset of the release fields are used.
179
+ // See RepositoryRelease for more information.
180
+ //
149
181
// GitHub API docs: https://developer.github.com/v3/repos/releases/#edit-a-release
150
182
func (s * RepositoriesService ) EditRelease (ctx context.Context , owner , repo string , id int64 , release * RepositoryRelease ) (* RepositoryRelease , * Response , error ) {
151
183
u := fmt .Sprintf ("repos/%s/%s/releases/%d" , owner , repo , id )
152
184
153
- req , err := s .client .NewRequest ("PATCH" , u , release )
185
+ releaseReq := & repositoryReleaseRequest {
186
+ TagName : release .TagName ,
187
+ TargetCommitish : release .TargetCommitish ,
188
+ Name : release .Name ,
189
+ Body : release .Body ,
190
+ Draft : release .Draft ,
191
+ Prerelease : release .Prerelease ,
192
+ }
193
+
194
+ req , err := s .client .NewRequest ("PATCH" , u , releaseReq )
154
195
if err != nil {
155
196
return nil , nil , err
156
197
}
0 commit comments