Skip to content

Commit 6b1a683

Browse files
authored
Merge pull request #1232 from fluxcd/zulip-comment
Improve zulip Alert Provider comment
2 parents 0e2d580 + 660f09c commit 6b1a683

File tree

4 files changed

+64
-64
lines changed

4 files changed

+64
-64
lines changed

internal/notifier/git_change_request_comment.go

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ package notifier
1818

1919
import (
2020
"fmt"
21-
"slices"
22-
"strings"
2321

2422
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
2523
)
@@ -52,35 +50,6 @@ func (c *changeRequestComment) formatCommentKeyMarker(event *eventv1.Event) stri
5250
// formatCommentBody formats the body of the change request comment based on the event data.
5351
func (c *changeRequestComment) formatCommentBody(event *eventv1.Event) string {
5452
marker := c.formatCommentKeyMarker(event)
55-
56-
// Get emoji based on severity
57-
var severityEmoji string
58-
if event.Severity == eventv1.EventSeverityError {
59-
severityEmoji = "⚠️"
60-
} else {
61-
severityEmoji = "ℹ️"
62-
}
63-
64-
// Format object identifier
65-
objectID := fmt.Sprintf("%s/%s/%s",
66-
event.InvolvedObject.Kind,
67-
event.InvolvedObject.Namespace,
68-
event.InvolvedObject.Name)
69-
70-
// Build metadata section
71-
keys := make([]string, 0, len(event.Metadata))
72-
for k := range event.Metadata {
73-
if k != eventv1.MetaChangeRequestKey {
74-
keys = append(keys, k)
75-
}
76-
}
77-
slices.Sort(keys)
78-
var metadataLines strings.Builder
79-
for _, key := range keys {
80-
fmt.Fprintf(&metadataLines, "* `%s`: %s\n", key, event.Metadata[key])
81-
}
82-
83-
// Format the comment body
84-
return fmt.Sprintf("%s\n\n## Flux Status\n\n%s %s\n\n%s\n\nMetadata:\n%s",
85-
marker, severityEmoji, objectID, event.Message, metadataLines.String())
53+
body := formatMarkdownPost(event)
54+
return fmt.Sprintf("%s\n\n%s", marker, body)
8655
}

internal/notifier/markdown.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
Copyright 2026 The Flux authors
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package notifier
18+
19+
import (
20+
"fmt"
21+
"slices"
22+
"strings"
23+
24+
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
25+
)
26+
27+
// formatMarkdownPost formats the event for Markdown rendering engines.
28+
func formatMarkdownPost(event *eventv1.Event) string {
29+
// Get emoji based on severity
30+
var severityEmoji string
31+
if event.Severity == eventv1.EventSeverityError {
32+
severityEmoji = "⚠️"
33+
} else {
34+
severityEmoji = "ℹ️"
35+
}
36+
37+
// Format object identifier
38+
objectID := fmt.Sprintf("%s/%s/%s",
39+
event.InvolvedObject.Kind,
40+
event.InvolvedObject.Namespace,
41+
event.InvolvedObject.Name)
42+
43+
// Build metadata section
44+
keys := make([]string, 0, len(event.Metadata))
45+
for k := range event.Metadata {
46+
if k != eventv1.MetaChangeRequestKey {
47+
keys = append(keys, k)
48+
}
49+
}
50+
slices.Sort(keys)
51+
var metadataLines strings.Builder
52+
for _, key := range keys {
53+
fmt.Fprintf(&metadataLines, "* `%s`: %s\n", key, event.Metadata[key])
54+
}
55+
56+
// Format the comment body
57+
return fmt.Sprintf("## Flux Status\n\n%s %s\n\n%s\n\nMetadata:\n%s",
58+
severityEmoji, objectID, event.Message, metadataLines.String())
59+
}

internal/notifier/zulip.go

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"crypto/tls"
2222
"fmt"
2323
"net/url"
24-
"slices"
2524
"strings"
2625

2726
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
@@ -66,34 +65,7 @@ func NewZulip(endpoint, channel, proxyURL string, tlsConfig *tls.Config, usernam
6665
func (z *Zulip) Post(ctx context.Context, event eventv1.Event) error {
6766
const contentType = "application/x-www-form-urlencoded"
6867

69-
obj := fmt.Sprintf("%s/%s.%s",
70-
strings.ToLower(event.InvolvedObject.Kind),
71-
event.InvolvedObject.Name,
72-
event.InvolvedObject.Namespace)
73-
74-
header := fmt.Sprintf("ℹ️ Info: `%s`", obj)
75-
if event.Severity == eventv1.EventSeverityError {
76-
header = fmt.Sprintf("⚠️ Error: `%s`", obj)
77-
}
78-
79-
msg := fmt.Sprintf("`%s`", event.Message)
80-
81-
mdKeys := make([]string, 0, len(event.Metadata))
82-
for k := range event.Metadata {
83-
mdKeys = append(mdKeys, k)
84-
}
85-
slices.Sort(mdKeys)
86-
md := make([]string, 0, len(event.Metadata))
87-
for _, k := range mdKeys {
88-
md = append(md, fmt.Sprintf("- **%s**: `%s`", k, event.Metadata[k]))
89-
}
90-
91-
content := fmt.Sprintf(`%[1]s
92-
93-
%[2]s
94-
95-
Metadata:
96-
%[3]s`, header, msg, strings.Join(md, "\n"))
68+
content := formatMarkdownPost(&event)
9769

9870
payload := []byte(url.Values{
9971
"type": {"stream"},

internal/notifier/zulip_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ func TestZulip_Post(t *testing.T) {
7070
{
7171
name: "info severity event",
7272
eventSeverity: eventv1.EventSeverityInfo,
73-
expectedContent: "ℹ️ Info: `kustomization/test-ks.default`\n\n`Test event message`\n\nMetadata:\n- **key1**: `value1`\n- **key2**: `value2`",
73+
expectedContent: "## Flux Status\n\nℹ️ Kustomization/default/test-ks\n\nTest event message\n\nMetadata:\n* `key1`: value1\n* `key2`: value2\n",
7474
},
7575
{
7676
name: "error severity event",
7777
eventSeverity: eventv1.EventSeverityError,
78-
expectedContent: "⚠️ Error: `kustomization/test-ks.default`\n\n`Test event message`\n\nMetadata:\n- **key1**: `value1`\n- **key2**: `value2`",
78+
expectedContent: "## Flux Status\n\n⚠️ Kustomization/default/test-ks\n\nTest event message\n\nMetadata:\n* `key1`: value1\n* `key2`: value2\n",
7979
},
8080
} {
8181
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)