Skip to content

Commit 402182c

Browse files
committed
basic impl of other webhook types
1 parent da2180e commit 402182c

File tree

11 files changed

+75
-0
lines changed

11 files changed

+75
-0
lines changed

services/webhook/dingtalk.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,12 @@ func (dc dingtalkConvertor) Status(p *api.CommitStatusPayload) (DingtalkPayload,
176176
return createDingtalkPayload(text, text, "Status Changed", p.TargetURL), nil
177177
}
178178

179+
func (dingtalkConvertor) WorkflowJob(p *api.WorkflowJobPayload) (DingtalkPayload, error) {
180+
text, _ := getWorkflowJobPayloadInfo(p, noneLinkFormatter, true)
181+
182+
return createDingtalkPayload(text, text, "Workflow Job", p.WorkflowJob.HTMLURL), nil
183+
}
184+
179185
func createDingtalkPayload(title, text, singleTitle, singleURL string) DingtalkPayload {
180186
return DingtalkPayload{
181187
MsgType: "actionCard",

services/webhook/discord.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,12 @@ func (d discordConvertor) Status(p *api.CommitStatusPayload) (DiscordPayload, er
271271
return d.createPayload(p.Sender, text, "", p.TargetURL, color), nil
272272
}
273273

274+
func (d discordConvertor) WorkflowJob(p *api.WorkflowJobPayload) (DiscordPayload, error) {
275+
text, color := getWorkflowJobPayloadInfo(p, noneLinkFormatter, false)
276+
277+
return d.createPayload(p.Sender, text, "", p.WorkflowJob.HTMLURL, color), nil
278+
}
279+
274280
func newDiscordRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
275281
meta := &DiscordMeta{}
276282
if err := json.Unmarshal([]byte(w.Meta), meta); err != nil {

services/webhook/feishu.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,12 @@ func (fc feishuConvertor) Status(p *api.CommitStatusPayload) (FeishuPayload, err
172172
return newFeishuTextPayload(text), nil
173173
}
174174

175+
func (feishuConvertor) WorkflowJob(p *api.WorkflowJobPayload) (FeishuPayload, error) {
176+
text, _ := getWorkflowJobPayloadInfo(p, noneLinkFormatter, true)
177+
178+
return newFeishuTextPayload(text), nil
179+
}
180+
175181
func newFeishuRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
176182
var pc payloadConvertor[FeishuPayload] = feishuConvertor{}
177183
return newJSONRequest(pc, w, t, true)

services/webhook/general.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,18 @@ func getStatusPayloadInfo(p *api.CommitStatusPayload, linkFormatter linkFormatte
319319
return text, color
320320
}
321321

322+
func getWorkflowJobPayloadInfo(p *api.WorkflowJobPayload, linkFormatter linkFormatter, withSender bool) (text string, color int) {
323+
refLink := linkFormatter(p.WorkflowJob.HTMLURL, fmt.Sprintf("%s(#%d)", p.WorkflowJob.Name, p.WorkflowJob.RunID)+"["+p.WorkflowJob.HeadSha+"]:"+p.WorkflowJob.Conclusion)
324+
325+
text = fmt.Sprintf("Workflow Job %s: %s", p.Action, refLink)
326+
color = greenColor
327+
if withSender {
328+
text += fmt.Sprintf(" by %s", linkFormatter(setting.AppURL+url.PathEscape(p.Sender.UserName), p.Sender.UserName))
329+
}
330+
331+
return text, color
332+
}
333+
322334
// ToHook convert models.Webhook to api.Hook
323335
// This function is not part of the convert package to prevent an import cycle
324336
func ToHook(repoLink string, w *webhook_model.Webhook) (*api.Hook, error) {

services/webhook/matrix.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,12 @@ func (m matrixConvertor) Status(p *api.CommitStatusPayload) (MatrixPayload, erro
251251
return m.newPayload(text)
252252
}
253253

254+
func (m matrixConvertor) WorkflowJob(p *api.WorkflowJobPayload) (MatrixPayload, error) {
255+
text, _ := getWorkflowJobPayloadInfo(p, htmlLinkFormatter, true)
256+
257+
return m.newPayload(text)
258+
}
259+
254260
var urlRegex = regexp.MustCompile(`<a [^>]*?href="([^">]*?)">(.*?)</a>`)
255261

256262
func getMessageBody(htmlText string) string {

services/webhook/msteams.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,20 @@ func (m msteamsConvertor) Status(p *api.CommitStatusPayload) (MSTeamsPayload, er
317317
), nil
318318
}
319319

320+
func (msteamsConvertor) WorkflowJob(p *api.WorkflowJobPayload) (MSTeamsPayload, error) {
321+
title, color := getWorkflowJobPayloadInfo(p, noneLinkFormatter, false)
322+
323+
return createMSTeamsPayload(
324+
p.Repository,
325+
p.Sender,
326+
title,
327+
"",
328+
p.WorkflowJob.HTMLURL,
329+
color,
330+
&MSTeamsFact{"WorkflowJob:", p.WorkflowJob.Name},
331+
), nil
332+
}
333+
320334
func createMSTeamsPayload(r *api.Repository, s *api.User, title, text, actionTarget string, color int, fact *MSTeamsFact) MSTeamsPayload {
321335
facts := make([]MSTeamsFact, 0, 2)
322336
if r != nil {

services/webhook/packagist.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ func (pc packagistConvertor) Status(_ *api.CommitStatusPayload) (PackagistPayloa
114114
return PackagistPayload{}, nil
115115
}
116116

117+
func (pc packagistConvertor) WorkflowJob(_ *api.WorkflowJobPayload) (PackagistPayload, error) {
118+
return PackagistPayload{}, nil
119+
}
120+
117121
func newPackagistRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
118122
meta := &PackagistMeta{}
119123
if err := json.Unmarshal([]byte(w.Meta), meta); err != nil {

services/webhook/payloader.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type payloadConvertor[T any] interface {
2929
Wiki(*api.WikiPayload) (T, error)
3030
Package(*api.PackagePayload) (T, error)
3131
Status(*api.CommitStatusPayload) (T, error)
32+
WorkflowJob(*api.WorkflowJobPayload) (T, error)
3233
}
3334

3435
func convertUnmarshalledJSON[T, P any](convert func(P) (T, error), data []byte) (t T, err error) {
@@ -80,6 +81,8 @@ func newPayload[T any](rc payloadConvertor[T], data []byte, event webhook_module
8081
return convertUnmarshalledJSON(rc.Package, data)
8182
case webhook_module.HookEventStatus:
8283
return convertUnmarshalledJSON(rc.Status, data)
84+
case webhook_module.HookEventWorkflowJob:
85+
return convertUnmarshalledJSON(rc.WorkflowJob, data)
8386
}
8487
return t, fmt.Errorf("newPayload unsupported event: %s", event)
8588
}

services/webhook/slack.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,12 @@ func (s slackConvertor) Status(p *api.CommitStatusPayload) (SlackPayload, error)
173173
return s.createPayload(text, nil), nil
174174
}
175175

176+
func (s slackConvertor) WorkflowJob(p *api.WorkflowJobPayload) (SlackPayload, error) {
177+
text, _ := getWorkflowJobPayloadInfo(p, SlackLinkFormatter, true)
178+
179+
return s.createPayload(text, nil), nil
180+
}
181+
176182
// Push implements payloadConvertor Push method
177183
func (s slackConvertor) Push(p *api.PushPayload) (SlackPayload, error) {
178184
// n new commits

services/webhook/telegram.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ func (t telegramConvertor) Status(p *api.CommitStatusPayload) (TelegramPayload,
180180
return createTelegramPayloadHTML(text), nil
181181
}
182182

183+
func (telegramConvertor) WorkflowJob(p *api.WorkflowJobPayload) (TelegramPayload, error) {
184+
text, _ := getWorkflowJobPayloadInfo(p, htmlLinkFormatter, true)
185+
186+
return createTelegramPayloadHTML(text), nil
187+
}
188+
183189
func createTelegramPayloadHTML(msgHTML string) TelegramPayload {
184190
// https://core.telegram.org/bots/api#formatting-options
185191
return TelegramPayload{

0 commit comments

Comments
 (0)