-
Notifications
You must be signed in to change notification settings - Fork 0
/
github_webhook.go
114 lines (109 loc) · 3.6 KB
/
github_webhook.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"fmt"
"net/http"
"github.com/google/go-github/github"
)
type GithubWebhook struct {
sender SenderInterface
}
func NewGithubWebhook(sender SenderInterface) *GithubWebhook {
LoadConfig()
CreateLogger(Conf.Server.LogFile, Conf.Server.LogLevel, Conf.Server.LogIsJSONFormat)
return &GithubWebhook{sender: sender}
}
func (gwh *GithubWebhook) githubWebhook(req *http.Request) {
payload, err1 := github.ValidatePayload(req, []byte(Conf.Server.WebhookSecretKey))
if err1 != nil {
Zerologger.Error().Err(err1).Msg("failed ValidatePayload")
return
}
event, err2 := github.ParseWebHook(github.WebHookType(req), payload)
if err2 != nil {
Zerologger.Error().Err(err2).Msg("failed ParseWebHook")
return
}
webhookType := github.WebHookType(req)
switch event := event.(type) {
case *github.CommitCommentEvent:
gwh.githubCommitCommentEvent(event)
case *github.PushEvent:
gwh.githubPushEvent(event)
case *github.PullRequestEvent:
gwh.githubPullRequestEvent(event)
case *github.PullRequestReviewEvent:
gwh.githubPullRequestReviewEvent(event)
case *github.PullRequestReviewCommentEvent:
gwh.githubPullRequestReviewCommentEvent(event)
case *github.CreateEvent:
gwh.githubCreateEvent(event)
case *github.ReleaseEvent:
gwh.githubReleaseEvent(event)
default:
Zerologger.Info().Msgf("github WebHookType:%v", webhookType)
}
}
func (gwh *GithubWebhook) githubCommitCommentEvent(event *github.CommitCommentEvent) {
msg := fmt.Sprintf("[CommitComment] action:%v sender:%v(%v) comment:%v link:%v",
event.GetAction(),
event.Sender.GetLogin(),
event.Sender.GetName(),
event.GetComment(),
event.Comment.HTMLURL)
gwh.sender.SendMessage(msg)
}
func (gwh *GithubWebhook) githubPushEvent(event *github.PushEvent) {
msg := fmt.Sprintf("[Push] commit:%v sender:%v(%v) pusher:%v link:%v",
*event.HeadCommit.Message,
event.Sender.GetLogin(),
event.Sender.GetName(),
event.Pusher.GetName(),
event.Repo.GetHTMLURL())
gwh.sender.SendMessage(msg)
}
func (gwh *GithubWebhook) githubPullRequestEvent(event *github.PullRequestEvent) {
msg := fmt.Sprintf("[PullRequest] action:%v sender:%v(%v) number:%v link:%v",
event.GetAction(),
event.Sender.GetLogin(),
event.Sender.GetName(),
event.GetNumber(),
*event.PullRequest.HTMLURL)
gwh.sender.SendMessage(msg)
}
func (gwh *GithubWebhook) githubPullRequestReviewEvent(event *github.PullRequestReviewEvent) {
msg := fmt.Sprintf("[PullRequestReview] action:%v sender:%v(%v) review:%v link:%v",
event.GetAction(),
event.Sender.GetLogin(),
event.Sender.GetName(),
event.GetReview().String(),
event.GetReview().GetHTMLURL())
gwh.sender.SendMessage(msg)
}
func (gwh *GithubWebhook) githubPullRequestReviewCommentEvent(event *github.PullRequestReviewCommentEvent) {
msg := fmt.Sprintf("[PullRequestReviewComment] action:%v sender:%v(%v) comment:%v link:%v",
event.GetAction(),
event.Sender.GetLogin(),
event.Sender.GetName(),
event.Comment.String(),
event.GetComment().GetURL())
gwh.sender.SendMessage(msg)
}
func (gwh *GithubWebhook) githubCreateEvent(event *github.CreateEvent) {
msg := fmt.Sprintf("[Create] type:%v sender:%v(%v) description:%v link:%v",
*(event.RefType),
event.Sender.GetLogin(),
event.Sender.GetName(),
*(event.Description),
event.Repo.GetHTMLURL())
gwh.sender.SendMessage(msg)
}
func (gwh *GithubWebhook) githubReleaseEvent(event *github.ReleaseEvent) {
msg := fmt.Sprintf("[Release] action:%v sender:%v(%v) name:%v tag:%v link:%v",
event.GetAction(),
event.Sender.GetLogin(),
event.Sender.GetName(),
*(event.GetRelease().Name),
*(event.GetRelease().TagName),
*(event.GetRelease().URL))
gwh.sender.SendMessage(msg)
}