Skip to content

Commit eaea3ae

Browse files
committed
* [feat] standardize naming and enhance pull request events
Signed-off-by: ysicing <[email protected]>
1 parent 03f7306 commit eaea3ae

File tree

3 files changed

+46
-12
lines changed

3 files changed

+46
-12
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Gitfox Library Webhooks
1+
# GitFox Library Webhooks
22

3-
Library webhooks allows for easy receiving and parsing of Gitfox Webhook Events
3+
Library webhooks allows for easy receiving and parsing of GitFox Webhook Events
44

55
## Installation
66

@@ -28,7 +28,7 @@ import (
2828
)
2929

3030
func main() {
31-
hook, _ := gitfox.New(gitfox.Options.Secret("MyGitfoxSecret...?"))
31+
hook, _ := gitfox.New(gitfox.Options.Secret("MyGitFoxSecret...?"))
3232

3333
http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
3434
payload, err := hook.Parse(r, gitfox.BranchUpdatedEvent)

gitfox/gitfox.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import (
2121
var (
2222
ErrEventNotSpecifiedToParse = errors.New("no Event specified to parse")
2323
ErrInvalidHTTPMethod = errors.New("invalid HTTP Method")
24-
ErrMissingGitfoxEventHeader = errors.New("missing X-Gitfox-Event Header")
25-
ErrMissingGitfoxTriggerHeader = errors.New("missing X-Gitfox-Trigger Header")
26-
ErrMissingGitfoxWebhookParentTypeHeader = errors.New("missing Webhook-Parent-Type Header")
27-
ErrMissingGitfoxSignatureHeader = errors.New("missing X-Gitfox-Signature Header")
24+
ErrMissingGitFoxEventHeader = errors.New("missing X-Gitfox-Event Header")
25+
ErrMissingGitFoxTriggerHeader = errors.New("missing X-Gitfox-Trigger Header")
26+
ErrMissingGitFoxWebhookParentTypeHeader = errors.New("missing Webhook-Parent-Type Header")
27+
ErrMissingGitFoxSignatureHeader = errors.New("missing X-Gitfox-Signature Header")
2828
ErrEventNotFound = errors.New("event not defined to be parsed")
2929
ErrParsingPayload = errors.New("error parsing payload")
3030
ErrHMACVerificationFailed = errors.New("HMAC verification failed")
@@ -50,6 +50,7 @@ const (
5050
PullReqReviewerCreatedEvent HookEventType = "pullreq_reviewer_created"
5151
PullReqReviewerDeletedEvent HookEventType = "pullreq_reviewer_deleted"
5252
PullReqReviewSubmittedEvent HookEventType = "pullreq_review_submitted"
53+
PullReqUpdatedEvent HookEventType = "pullreq_updated"
5354
)
5455

5556
// Option is a configuration option for the webhook
@@ -100,7 +101,7 @@ func (hook Webhook) Parse(r *http.Request, events ...HookEventType) (interface{}
100101
}
101102
event := r.Header.Get("X-Gitfox-Trigger")
102103
if len(event) == 0 {
103-
return nil, ErrMissingGitfoxTriggerHeader
104+
return nil, ErrMissingGitFoxTriggerHeader
104105
}
105106
gitfoxEvent := HookEventType(event)
106107
var found bool
@@ -122,7 +123,7 @@ func (hook Webhook) Parse(r *http.Request, events ...HookEventType) (interface{}
122123
if len(hook.secret) > 0 {
123124
signature := r.Header.Get("X-Gitfox-Signature")
124125
if len(signature) == 0 {
125-
return nil, ErrMissingGitfoxSignatureHeader
126+
return nil, ErrMissingGitFoxSignatureHeader
126127
}
127128
sig256 := hmac.New(sha256.New, []byte(hook.secret))
128129
_, _ = io.Writer(sig256).Write([]byte(payload))
@@ -181,6 +182,10 @@ func (hook Webhook) Parse(r *http.Request, events ...HookEventType) (interface{}
181182
var pl PullReqMergedPayload
182183
err = json.Unmarshal([]byte(payload), &pl)
183184
return pl, err
185+
case PullReqUpdatedEvent:
186+
var pl PullReqUpdatedPayload
187+
err = json.Unmarshal([]byte(payload), &pl)
188+
return pl, err
184189
case PullReqReviewerCreatedEvent:
185190
var pl PullReqReviewerCreatedPayload
186191
err = json.Unmarshal([]byte(payload), &pl)

gitfox/types.go

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,19 @@ type ReferencePayload struct {
6767
ReferenceUpdateSegment
6868
}
6969

70+
// BaseSegment is the common segment for all payloads.
7071
type BaseSegment struct {
7172
Trigger string `json:"trigger"`
7273
Repo Repo `json:"repo"`
7374
Principal PrincipalInfo `json:"principal"`
7475
}
7576

77+
// ReferenceSegment contains the reference info for webhooks.
7678
type ReferenceSegment struct {
7779
Ref ReferenceInfo `json:"ref"`
7880
}
7981

82+
// ReferenceDetailsSegment contains extra details for reference related payloads for webhooks.
8083
type ReferenceDetailsSegment struct {
8184
SHA string `json:"sha"`
8285

@@ -89,6 +92,7 @@ type ReferenceDetailsSegment struct {
8992
Commit *CommitInfo `json:"commit,omitempty"`
9093
}
9194

95+
// ReferenceUpdateSegment contains extra details for reference update related payloads for webhooks.
9296
type ReferenceUpdateSegment struct {
9397
OldSHA string `json:"old_sha"`
9498
Forced bool `json:"forced"`
@@ -174,14 +178,39 @@ type PullReqReviewerChangedPayload struct {
174178
ReviewerSegment
175179
}
176180

181+
// ReviewerSegment contains details for all reviewer related payloads for webhooks.
177182
type ReviewerSegment struct {
178183
Reviewer PrincipalInfo `json:"reviewer"`
179184
}
180185

186+
type PullReqReviewSegment struct {
187+
ReviewDecision string `json:"review_decision"`
188+
ReviewerInfo PrincipalInfo `json:"reviewer"`
189+
}
190+
181191
type PullReqReviewSubmittedPayload struct {
182192
BaseSegment
183193
PullReqSegment
184-
Author *PrincipalInfo
185-
Reviewer *PrincipalInfo
186-
Decision string
194+
PullReqTargetReferenceSegment
195+
ReferenceSegment
196+
PullReqReviewSegment
197+
}
198+
199+
// PullReqUpdateSegment contains details what has been updated in the pull request.
200+
type PullReqUpdateSegment struct {
201+
TitleChanged bool `json:"title_changed"`
202+
TitleOld string `json:"title_old"`
203+
TitleNew string `json:"title_new"`
204+
DescriptionChanged bool `json:"description_changed"`
205+
DescriptionOld string `json:"description_old"`
206+
DescriptionNew string `json:"description_new"`
207+
}
208+
209+
// PullReqUpdatedPayload describes the body of the pullreq updated trigger.
210+
type PullReqUpdatedPayload struct {
211+
BaseSegment
212+
PullReqSegment
213+
PullReqTargetReferenceSegment
214+
ReferenceSegment
215+
PullReqUpdateSegment
187216
}

0 commit comments

Comments
 (0)