1
2
3
4
5
6 package github
7
8 import (
9 "context"
10 "fmt"
11 "time"
12 )
13
14
15
16
17
18
19
20
21 type WebHookPayload struct {
22 After *string `json:"after,omitempty"`
23 Before *string `json:"before,omitempty"`
24 Commits []*WebHookCommit `json:"commits,omitempty"`
25 Compare *string `json:"compare,omitempty"`
26 Created *bool `json:"created,omitempty"`
27 Deleted *bool `json:"deleted,omitempty"`
28 Forced *bool `json:"forced,omitempty"`
29 HeadCommit *WebHookCommit `json:"head_commit,omitempty"`
30 Pusher *User `json:"pusher,omitempty"`
31 Ref *string `json:"ref,omitempty"`
32 Repo *Repository `json:"repository,omitempty"`
33 Sender *User `json:"sender,omitempty"`
34 }
35
36 func (w WebHookPayload) String() string {
37 return Stringify(w)
38 }
39
40
41
42 type WebHookCommit struct {
43 Added []string `json:"added,omitempty"`
44 Author *WebHookAuthor `json:"author,omitempty"`
45 Committer *WebHookAuthor `json:"committer,omitempty"`
46 Distinct *bool `json:"distinct,omitempty"`
47 ID *string `json:"id,omitempty"`
48 Message *string `json:"message,omitempty"`
49 Modified []string `json:"modified,omitempty"`
50 Removed []string `json:"removed,omitempty"`
51 Timestamp *time.Time `json:"timestamp,omitempty"`
52 }
53
54 func (w WebHookCommit) String() string {
55 return Stringify(w)
56 }
57
58
59
60 type WebHookAuthor struct {
61 Email *string `json:"email,omitempty"`
62 Name *string `json:"name,omitempty"`
63 Username *string `json:"username,omitempty"`
64 }
65
66 func (w WebHookAuthor) String() string {
67 return Stringify(w)
68 }
69
70
71 type Hook struct {
72 CreatedAt *time.Time `json:"created_at,omitempty"`
73 UpdatedAt *time.Time `json:"updated_at,omitempty"`
74 URL *string `json:"url,omitempty"`
75 ID *int64 `json:"id,omitempty"`
76
77
78
79 Config map[string]interface{} `json:"config,omitempty"`
80 Events []string `json:"events,omitempty"`
81 Active *bool `json:"active,omitempty"`
82 }
83
84 func (h Hook) String() string {
85 return Stringify(h)
86 }
87
88
89
90
91
92
93 type createHookRequest struct {
94
95 Name string `json:"name"`
96 Config map[string]interface{} `json:"config,omitempty"`
97 Events []string `json:"events,omitempty"`
98 Active *bool `json:"active,omitempty"`
99 }
100
101
102
103
104
105
106
107
108 func (s *RepositoriesService) CreateHook(ctx context.Context, owner, repo string, hook *Hook) (*Hook, *Response, error) {
109 u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo)
110
111 hookReq := &createHookRequest{
112 Name: "web",
113 Events: hook.Events,
114 Active: hook.Active,
115 Config: hook.Config,
116 }
117
118 req, err := s.client.NewRequest("POST", u, hookReq)
119 if err != nil {
120 return nil, nil, err
121 }
122
123 h := new(Hook)
124 resp, err := s.client.Do(ctx, req, h)
125 if err != nil {
126 return nil, resp, err
127 }
128
129 return h, resp, nil
130 }
131
132
133
134
135 func (s *RepositoriesService) ListHooks(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Hook, *Response, error) {
136 u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo)
137 u, err := addOptions(u, opts)
138 if err != nil {
139 return nil, nil, err
140 }
141
142 req, err := s.client.NewRequest("GET", u, nil)
143 if err != nil {
144 return nil, nil, err
145 }
146
147 var hooks []*Hook
148 resp, err := s.client.Do(ctx, req, &hooks)
149 if err != nil {
150 return nil, resp, err
151 }
152
153 return hooks, resp, nil
154 }
155
156
157
158
159 func (s *RepositoriesService) GetHook(ctx context.Context, owner, repo string, id int64) (*Hook, *Response, error) {
160 u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
161 req, err := s.client.NewRequest("GET", u, nil)
162 if err != nil {
163 return nil, nil, err
164 }
165 h := new(Hook)
166 resp, err := s.client.Do(ctx, req, h)
167 if err != nil {
168 return nil, resp, err
169 }
170
171 return h, resp, nil
172 }
173
174
175
176
177 func (s *RepositoriesService) EditHook(ctx context.Context, owner, repo string, id int64, hook *Hook) (*Hook, *Response, error) {
178 u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
179 req, err := s.client.NewRequest("PATCH", u, hook)
180 if err != nil {
181 return nil, nil, err
182 }
183 h := new(Hook)
184 resp, err := s.client.Do(ctx, req, h)
185 if err != nil {
186 return nil, resp, err
187 }
188
189 return h, resp, nil
190 }
191
192
193
194
195 func (s *RepositoriesService) DeleteHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
196 u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id)
197 req, err := s.client.NewRequest("DELETE", u, nil)
198 if err != nil {
199 return nil, err
200 }
201 return s.client.Do(ctx, req, nil)
202 }
203
204
205
206
207 func (s *RepositoriesService) PingHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
208 u := fmt.Sprintf("repos/%v/%v/hooks/%d/pings", owner, repo, id)
209 req, err := s.client.NewRequest("POST", u, nil)
210 if err != nil {
211 return nil, err
212 }
213 return s.client.Do(ctx, req, nil)
214 }
215
216
217
218
219 func (s *RepositoriesService) TestHook(ctx context.Context, owner, repo string, id int64) (*Response, error) {
220 u := fmt.Sprintf("repos/%v/%v/hooks/%d/tests", owner, repo, id)
221 req, err := s.client.NewRequest("POST", u, nil)
222 if err != nil {
223 return nil, err
224 }
225 return s.client.Do(ctx, req, nil)
226 }
227
View as plain text