mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-22 21:35:21 +02:00
basic impl of other webhook types
This commit is contained in:
parent
da2180e029
commit
402182c72e
@ -176,6 +176,12 @@ func (dc dingtalkConvertor) Status(p *api.CommitStatusPayload) (DingtalkPayload,
|
|||||||
return createDingtalkPayload(text, text, "Status Changed", p.TargetURL), nil
|
return createDingtalkPayload(text, text, "Status Changed", p.TargetURL), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dingtalkConvertor) WorkflowJob(p *api.WorkflowJobPayload) (DingtalkPayload, error) {
|
||||||
|
text, _ := getWorkflowJobPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
|
return createDingtalkPayload(text, text, "Workflow Job", p.WorkflowJob.HTMLURL), nil
|
||||||
|
}
|
||||||
|
|
||||||
func createDingtalkPayload(title, text, singleTitle, singleURL string) DingtalkPayload {
|
func createDingtalkPayload(title, text, singleTitle, singleURL string) DingtalkPayload {
|
||||||
return DingtalkPayload{
|
return DingtalkPayload{
|
||||||
MsgType: "actionCard",
|
MsgType: "actionCard",
|
||||||
|
@ -271,6 +271,12 @@ func (d discordConvertor) Status(p *api.CommitStatusPayload) (DiscordPayload, er
|
|||||||
return d.createPayload(p.Sender, text, "", p.TargetURL, color), nil
|
return d.createPayload(p.Sender, text, "", p.TargetURL, color), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d discordConvertor) WorkflowJob(p *api.WorkflowJobPayload) (DiscordPayload, error) {
|
||||||
|
text, color := getWorkflowJobPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
|
return d.createPayload(p.Sender, text, "", p.WorkflowJob.HTMLURL, color), nil
|
||||||
|
}
|
||||||
|
|
||||||
func newDiscordRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
func newDiscordRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
||||||
meta := &DiscordMeta{}
|
meta := &DiscordMeta{}
|
||||||
if err := json.Unmarshal([]byte(w.Meta), meta); err != nil {
|
if err := json.Unmarshal([]byte(w.Meta), meta); err != nil {
|
||||||
|
@ -172,6 +172,12 @@ func (fc feishuConvertor) Status(p *api.CommitStatusPayload) (FeishuPayload, err
|
|||||||
return newFeishuTextPayload(text), nil
|
return newFeishuTextPayload(text), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (feishuConvertor) WorkflowJob(p *api.WorkflowJobPayload) (FeishuPayload, error) {
|
||||||
|
text, _ := getWorkflowJobPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
|
return newFeishuTextPayload(text), nil
|
||||||
|
}
|
||||||
|
|
||||||
func newFeishuRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
func newFeishuRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
||||||
var pc payloadConvertor[FeishuPayload] = feishuConvertor{}
|
var pc payloadConvertor[FeishuPayload] = feishuConvertor{}
|
||||||
return newJSONRequest(pc, w, t, true)
|
return newJSONRequest(pc, w, t, true)
|
||||||
|
@ -319,6 +319,18 @@ func getStatusPayloadInfo(p *api.CommitStatusPayload, linkFormatter linkFormatte
|
|||||||
return text, color
|
return text, color
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getWorkflowJobPayloadInfo(p *api.WorkflowJobPayload, linkFormatter linkFormatter, withSender bool) (text string, color int) {
|
||||||
|
refLink := linkFormatter(p.WorkflowJob.HTMLURL, fmt.Sprintf("%s(#%d)", p.WorkflowJob.Name, p.WorkflowJob.RunID)+"["+p.WorkflowJob.HeadSha+"]:"+p.WorkflowJob.Conclusion)
|
||||||
|
|
||||||
|
text = fmt.Sprintf("Workflow Job %s: %s", p.Action, refLink)
|
||||||
|
color = greenColor
|
||||||
|
if withSender {
|
||||||
|
text += fmt.Sprintf(" by %s", linkFormatter(setting.AppURL+url.PathEscape(p.Sender.UserName), p.Sender.UserName))
|
||||||
|
}
|
||||||
|
|
||||||
|
return text, color
|
||||||
|
}
|
||||||
|
|
||||||
// ToHook convert models.Webhook to api.Hook
|
// ToHook convert models.Webhook to api.Hook
|
||||||
// This function is not part of the convert package to prevent an import cycle
|
// This function is not part of the convert package to prevent an import cycle
|
||||||
func ToHook(repoLink string, w *webhook_model.Webhook) (*api.Hook, error) {
|
func ToHook(repoLink string, w *webhook_model.Webhook) (*api.Hook, error) {
|
||||||
|
@ -251,6 +251,12 @@ func (m matrixConvertor) Status(p *api.CommitStatusPayload) (MatrixPayload, erro
|
|||||||
return m.newPayload(text)
|
return m.newPayload(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m matrixConvertor) WorkflowJob(p *api.WorkflowJobPayload) (MatrixPayload, error) {
|
||||||
|
text, _ := getWorkflowJobPayloadInfo(p, htmlLinkFormatter, true)
|
||||||
|
|
||||||
|
return m.newPayload(text)
|
||||||
|
}
|
||||||
|
|
||||||
var urlRegex = regexp.MustCompile(`<a [^>]*?href="([^">]*?)">(.*?)</a>`)
|
var urlRegex = regexp.MustCompile(`<a [^>]*?href="([^">]*?)">(.*?)</a>`)
|
||||||
|
|
||||||
func getMessageBody(htmlText string) string {
|
func getMessageBody(htmlText string) string {
|
||||||
|
@ -317,6 +317,20 @@ func (m msteamsConvertor) Status(p *api.CommitStatusPayload) (MSTeamsPayload, er
|
|||||||
), nil
|
), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msteamsConvertor) WorkflowJob(p *api.WorkflowJobPayload) (MSTeamsPayload, error) {
|
||||||
|
title, color := getWorkflowJobPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
|
return createMSTeamsPayload(
|
||||||
|
p.Repository,
|
||||||
|
p.Sender,
|
||||||
|
title,
|
||||||
|
"",
|
||||||
|
p.WorkflowJob.HTMLURL,
|
||||||
|
color,
|
||||||
|
&MSTeamsFact{"WorkflowJob:", p.WorkflowJob.Name},
|
||||||
|
), nil
|
||||||
|
}
|
||||||
|
|
||||||
func createMSTeamsPayload(r *api.Repository, s *api.User, title, text, actionTarget string, color int, fact *MSTeamsFact) MSTeamsPayload {
|
func createMSTeamsPayload(r *api.Repository, s *api.User, title, text, actionTarget string, color int, fact *MSTeamsFact) MSTeamsPayload {
|
||||||
facts := make([]MSTeamsFact, 0, 2)
|
facts := make([]MSTeamsFact, 0, 2)
|
||||||
if r != nil {
|
if r != nil {
|
||||||
|
@ -114,6 +114,10 @@ func (pc packagistConvertor) Status(_ *api.CommitStatusPayload) (PackagistPayloa
|
|||||||
return PackagistPayload{}, nil
|
return PackagistPayload{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pc packagistConvertor) WorkflowJob(_ *api.WorkflowJobPayload) (PackagistPayload, error) {
|
||||||
|
return PackagistPayload{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func newPackagistRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
func newPackagistRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
||||||
meta := &PackagistMeta{}
|
meta := &PackagistMeta{}
|
||||||
if err := json.Unmarshal([]byte(w.Meta), meta); err != nil {
|
if err := json.Unmarshal([]byte(w.Meta), meta); err != nil {
|
||||||
|
@ -29,6 +29,7 @@ type payloadConvertor[T any] interface {
|
|||||||
Wiki(*api.WikiPayload) (T, error)
|
Wiki(*api.WikiPayload) (T, error)
|
||||||
Package(*api.PackagePayload) (T, error)
|
Package(*api.PackagePayload) (T, error)
|
||||||
Status(*api.CommitStatusPayload) (T, error)
|
Status(*api.CommitStatusPayload) (T, error)
|
||||||
|
WorkflowJob(*api.WorkflowJobPayload) (T, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertUnmarshalledJSON[T, P any](convert func(P) (T, error), data []byte) (t T, err error) {
|
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
|
|||||||
return convertUnmarshalledJSON(rc.Package, data)
|
return convertUnmarshalledJSON(rc.Package, data)
|
||||||
case webhook_module.HookEventStatus:
|
case webhook_module.HookEventStatus:
|
||||||
return convertUnmarshalledJSON(rc.Status, data)
|
return convertUnmarshalledJSON(rc.Status, data)
|
||||||
|
case webhook_module.HookEventWorkflowJob:
|
||||||
|
return convertUnmarshalledJSON(rc.WorkflowJob, data)
|
||||||
}
|
}
|
||||||
return t, fmt.Errorf("newPayload unsupported event: %s", event)
|
return t, fmt.Errorf("newPayload unsupported event: %s", event)
|
||||||
}
|
}
|
||||||
|
@ -173,6 +173,12 @@ func (s slackConvertor) Status(p *api.CommitStatusPayload) (SlackPayload, error)
|
|||||||
return s.createPayload(text, nil), nil
|
return s.createPayload(text, nil), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s slackConvertor) WorkflowJob(p *api.WorkflowJobPayload) (SlackPayload, error) {
|
||||||
|
text, _ := getWorkflowJobPayloadInfo(p, SlackLinkFormatter, true)
|
||||||
|
|
||||||
|
return s.createPayload(text, nil), nil
|
||||||
|
}
|
||||||
|
|
||||||
// Push implements payloadConvertor Push method
|
// Push implements payloadConvertor Push method
|
||||||
func (s slackConvertor) Push(p *api.PushPayload) (SlackPayload, error) {
|
func (s slackConvertor) Push(p *api.PushPayload) (SlackPayload, error) {
|
||||||
// n new commits
|
// n new commits
|
||||||
|
@ -180,6 +180,12 @@ func (t telegramConvertor) Status(p *api.CommitStatusPayload) (TelegramPayload,
|
|||||||
return createTelegramPayloadHTML(text), nil
|
return createTelegramPayloadHTML(text), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (telegramConvertor) WorkflowJob(p *api.WorkflowJobPayload) (TelegramPayload, error) {
|
||||||
|
text, _ := getWorkflowJobPayloadInfo(p, htmlLinkFormatter, true)
|
||||||
|
|
||||||
|
return createTelegramPayloadHTML(text), nil
|
||||||
|
}
|
||||||
|
|
||||||
func createTelegramPayloadHTML(msgHTML string) TelegramPayload {
|
func createTelegramPayloadHTML(msgHTML string) TelegramPayload {
|
||||||
// https://core.telegram.org/bots/api#formatting-options
|
// https://core.telegram.org/bots/api#formatting-options
|
||||||
return TelegramPayload{
|
return TelegramPayload{
|
||||||
|
@ -181,6 +181,12 @@ func (wc wechatworkConvertor) Status(p *api.CommitStatusPayload) (WechatworkPayl
|
|||||||
return newWechatworkMarkdownPayload(text), nil
|
return newWechatworkMarkdownPayload(text), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (pc wechatworkConvertor) WorkflowJob(p *api.WorkflowJobPayload) (WechatworkPayload, error) {
|
||||||
|
text, _ := getWorkflowJobPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
|
return newWechatworkMarkdownPayload(text), nil
|
||||||
|
}
|
||||||
|
|
||||||
func newWechatworkRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
func newWechatworkRequest(_ context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (*http.Request, []byte, error) {
|
||||||
var pc payloadConvertor[WechatworkPayload] = wechatworkConvertor{}
|
var pc payloadConvertor[WechatworkPayload] = wechatworkConvertor{}
|
||||||
return newJSONRequest(pc, w, t, true)
|
return newJSONRequest(pc, w, t, true)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user