1
2
3
4
5
6 package github
7
8 import (
9 "context"
10 "encoding/json"
11 "fmt"
12 )
13
14
15
16
17
18
19 type HookDelivery struct {
20 ID *int64 `json:"id,omitempty"`
21 GUID *string `json:"guid,omitempty"`
22 DeliveredAt *Timestamp `json:"delivered_at,omitempty"`
23 Redelivery *bool `json:"redelivery,omitempty"`
24 Duration *float64 `json:"duration,omitempty"`
25 Status *string `json:"status,omitempty"`
26 StatusCode *int `json:"status_code,omitempty"`
27 Event *string `json:"event,omitempty"`
28 Action *string `json:"action,omitempty"`
29 InstallationID *int64 `json:"installation_id,omitempty"`
30 RepositoryID *int64 `json:"repository_id,omitempty"`
31
32
33 Request *HookRequest `json:"request,omitempty"`
34
35 Response *HookResponse `json:"response,omitempty"`
36 }
37
38 func (d HookDelivery) String() string {
39 return Stringify(d)
40 }
41
42
43
44 type HookRequest struct {
45 Headers map[string]string `json:"headers,omitempty"`
46 RawPayload *json.RawMessage `json:"payload,omitempty"`
47 }
48
49 func (r HookRequest) String() string {
50 return Stringify(r)
51 }
52
53
54
55 type HookResponse struct {
56 Headers map[string]string `json:"headers,omitempty"`
57 RawPayload *json.RawMessage `json:"payload,omitempty"`
58 }
59
60 func (r HookResponse) String() string {
61 return Stringify(r)
62 }
63
64
65
66
67 func (s *RepositoriesService) ListHookDeliveries(ctx context.Context, owner, repo string, id int64, opts *ListCursorOptions) ([]*HookDelivery, *Response, error) {
68 u := fmt.Sprintf("repos/%v/%v/hooks/%v/deliveries", owner, repo, id)
69 u, err := addOptions(u, opts)
70 if err != nil {
71 return nil, nil, err
72 }
73
74 req, err := s.client.NewRequest("GET", u, nil)
75 if err != nil {
76 return nil, nil, err
77 }
78
79 deliveries := []*HookDelivery{}
80 resp, err := s.client.Do(ctx, req, &deliveries)
81 if err != nil {
82 return nil, resp, err
83 }
84
85 return deliveries, resp, nil
86 }
87
88
89
90
91 func (s *RepositoriesService) GetHookDelivery(ctx context.Context, owner, repo string, hookID, deliveryID int64) (*HookDelivery, *Response, error) {
92 u := fmt.Sprintf("repos/%v/%v/hooks/%v/deliveries/%v", owner, repo, hookID, deliveryID)
93 req, err := s.client.NewRequest("GET", u, nil)
94 if err != nil {
95 return nil, nil, err
96 }
97
98 h := new(HookDelivery)
99 resp, err := s.client.Do(ctx, req, h)
100 if err != nil {
101 return nil, resp, err
102 }
103
104 return h, resp, nil
105 }
106
107
108
109
110 func (s *RepositoriesService) RedeliverHookDelivery(ctx context.Context, owner, repo string, hookID, deliveryID int64) (*HookDelivery, *Response, error) {
111 u := fmt.Sprintf("repos/%v/%v/hooks/%v/deliveries/%v/attempts", owner, repo, hookID, deliveryID)
112 req, err := s.client.NewRequest("POST", u, nil)
113 if err != nil {
114 return nil, nil, err
115 }
116
117 h := new(HookDelivery)
118 resp, err := s.client.Do(ctx, req, h)
119 if err != nil {
120 return nil, resp, err
121 }
122
123 return h, resp, nil
124 }
125
126
127
128 func (d *HookDelivery) ParseRequestPayload() (interface{}, error) {
129 eType, ok := eventTypeMapping[*d.Event]
130 if !ok {
131 return nil, fmt.Errorf("unsupported event type %q", *d.Event)
132 }
133
134 e := &Event{Type: &eType, RawPayload: d.Request.RawPayload}
135 return e.ParsePayload()
136 }
137
View as plain text