From 403acb54a76f4c74fd58eb6e54265973a488da14 Mon Sep 17 00:00:00 2001 From: wuhuizuo Date: Tue, 27 Feb 2024 14:27:32 +0800 Subject: [PATCH] feat(cloudevents-server): add extral message receiver from event context (#79) Signed-off-by: wuhuizuo --- .../custom/tekton/handler_pipelinerun.go | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/cloudevents-server/pkg/events/custom/tekton/handler_pipelinerun.go b/cloudevents-server/pkg/events/custom/tekton/handler_pipelinerun.go index 48a678a..85f002a 100644 --- a/cloudevents-server/pkg/events/custom/tekton/handler_pipelinerun.go +++ b/cloudevents-server/pkg/events/custom/tekton/handler_pipelinerun.go @@ -1,14 +1,21 @@ package tekton import ( + "encoding/json" "net/http" cloudevents "github.com/cloudevents/sdk-go/v2" lark "github.com/larksuite/oapi-sdk-go/v3" "github.com/rs/zerolog/log" + "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1" tektoncloudevent "github.com/tektoncd/pipeline/pkg/reconciler/events/cloudevent" ) +const ( + eventContextAnnotationKey = "tekton.dev/ce-context" + eventContextAnnotationInnerKeyUser = "user" +) + type pipelineRunHandler struct { LarkClient *lark.Client RunDetailBaseURL string @@ -35,9 +42,28 @@ func (h *pipelineRunHandler) Handle(event cloudevents.Event) cloudevents.Result case tektoncloudevent.PipelineRunStartedEventV1, tektoncloudevent.PipelineRunFailedEventV1, tektoncloudevent.PipelineRunSuccessfulEventV1: - return sendLarkMessages(h.LarkClient, h.Receivers, event, h.RunDetailBaseURL) + receivers := h.Receivers + if receiver := getTriggerUser(data.PipelineRun); receiver != "" { + receivers = append(receivers, receiver) + } + + return sendLarkMessages(h.LarkClient, receivers, event, h.RunDetailBaseURL) default: log.Debug().Str("ce-type", event.Type()).Msg("skip notifing for the event type.") return cloudevents.ResultACK } } + +func getTriggerUser(pr *v1beta1.PipelineRun) string { + eventContext := pr.Annotations[eventContextAnnotationKey] + if eventContext == "" { + return "" + } + + contextData := make(map[string]string) + if err := json.Unmarshal([]byte(eventContext), &contextData); err != nil { + return "" + } + + return contextData[eventContextAnnotationInnerKeyUser] +}