Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 7 additions & 13 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
formatters:
enable:
- gofumpt
- goimports

settings:
Expand All @@ -21,17 +22,16 @@ linters:
- govet
- importas
- misspell
- perfsprint
- revive
- staticcheck
- testifylint
- thelper
- tparallel
- unparam
- usestdlibvars
- usetesting
- whitespace
disable:
- perfsprint # Performance optimizations cause many changes
- testifylint # Test assertion order changes cause large diffs
- revive # Too many style changes (265+ issues)

exclusions:
rules:
Expand Down Expand Up @@ -154,8 +154,7 @@ linters:
- name: duplicated-imports

- name: early-return
arguments:
- preserveScope
disabled: true

- name: empty-block
disabled: true
Expand All @@ -177,8 +176,7 @@ linters:
- name: increment-decrement

- name: indent-error-flow
arguments:
- preserveScope
disabled: true

- name: modifies-parameter

Expand Down Expand Up @@ -218,11 +216,7 @@ linters:
- name: var-declaration

- name: var-naming
arguments:
- - ID
- - VM
- - skipPackageNameChecks: true
upperCaseConst: true
disabled: true

staticcheck:
checks:
Expand Down
8 changes: 4 additions & 4 deletions examples/certmanager/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ notificationsFactory := api.NewFactory(api.Settings{
ConfigMapName: "cert-manager-notifications-cm",
SecretName: "cert-manager-notifications-secret",
InitGetVars: func(cfg *api.Config, configMap *v1.ConfigMap, secret *v1.Secret) (api.GetVars, error) {
return func(obj map[string]interface{}, dest services.Destination) map[string]interface{} {
return map[string]interface{}{"cert": obj}
return func(obj map[string]any, dest services.Destination) map[string]any {
return map[string]any{"cert": obj}
}, nil
},
}, namespace, secrets, configMaps)
Expand Down Expand Up @@ -128,8 +128,8 @@ func main() {
ConfigMapName: "cert-manager-notifications-cm",
SecretName: "cert-manager-notifications-secret",
InitGetVars: func(cfg *api.Config, configMap *v1.ConfigMap, secret *v1.Secret) (api.GetVars, error) {
return func(obj map[string]interface{}, dest services.Destination) map[string]interface{} {
return map[string]interface{}{"cert": obj}
return func(obj map[string]any, dest services.Destination) map[string]any {
return map[string]any{"cert": obj}
}, nil
},
})
Expand Down
6 changes: 3 additions & 3 deletions examples/certmanager/cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ func main() {
}, api.Settings{
ConfigMapName: "cert-manager-notifications-cm",
SecretName: "cert-manager-notifications-secret",
InitGetVars: func(cfg *api.Config, configMap *corev1.ConfigMap, secret *corev1.Secret) (api.GetVars, error) {
return func(obj map[string]interface{}, dest services.Destination) map[string]interface{} {
return map[string]interface{}{"cert": obj}
InitGetVars: func(_ *api.Config, _ *corev1.ConfigMap, _ *corev1.Secret) (api.GetVars, error) {
return func(obj map[string]any, _ services.Destination) map[string]any {
return map[string]any{"cert": obj}
}, nil
},
})
Expand Down
16 changes: 7 additions & 9 deletions examples/certmanager/controller/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,10 @@ import (
)

func main() {
var (
clientConfig clientcmd.ClientConfig
)
var command = cobra.Command{
var clientConfig clientcmd.ClientConfig
command := cobra.Command{
Use: "controller",
Run: func(c *cobra.Command, args []string) {
Run: func(_ *cobra.Command, _ []string) {
// Optionally set the annotations prefix
// subscriptions.SetAnnotationPrefix("example.prefix.io")

Expand All @@ -59,9 +57,9 @@ func main() {
notificationsFactory := api.NewFactory(api.Settings{
ConfigMapName: "cert-manager-notifications-cm",
SecretName: "cert-manager-notifications-secret",
InitGetVars: func(cfg *api.Config, configMap *corev1.ConfigMap, secret *corev1.Secret) (api.GetVars, error) {
return func(obj map[string]interface{}, dest services.Destination) map[string]interface{} {
return map[string]interface{}{"cert": obj}
InitGetVars: func(_ *api.Config, _ *corev1.ConfigMap, _ *corev1.Secret) (api.GetVars, error) {
return func(obj map[string]any, _ services.Destination) map[string]any {
return map[string]any{"cert": obj}
}, nil
},
}, namespace, secrets, configMaps)
Expand All @@ -74,7 +72,7 @@ func main() {
ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
return certClient.List(context.Background(), options)
},
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
WatchFunc: func(_ metav1.ListOptions) (watch.Interface, error) {
return certClient.Watch(context.Background(), metav1.ListOptions{})
},
}, &unstructured.Unstructured{}, time.Minute, cache.Indexers{})
Expand Down
12 changes: 6 additions & 6 deletions pkg/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ const (

//go:generate mockgen -destination=../mocks/api.go -package=mocks github.com/argoproj/notifications-engine/pkg/api API

type GetVars func(obj map[string]interface{}, dest services.Destination) map[string]interface{}
type GetVars func(obj map[string]any, dest services.Destination) map[string]any

// API provides high level interface to send notifications and manage notification services
type API interface {
Send(obj map[string]interface{}, templates []string, dest services.Destination) error
RunTrigger(triggerName string, vars map[string]interface{}) ([]triggers.ConditionResult, error)
Send(obj map[string]any, templates []string, dest services.Destination) error
RunTrigger(triggerName string, vars map[string]any) ([]triggers.ConditionResult, error)
AddNotificationService(name string, service services.NotificationService)
GetNotificationServices() map[string]services.NotificationService
GetConfig() Config
Expand Down Expand Up @@ -49,15 +49,15 @@ func (n *api) GetNotificationServices() map[string]services.NotificationService
}

// Send sends notification using specified service and template to the specified destination
func (n *api) Send(obj map[string]interface{}, templates []string, dest services.Destination) error {
func (n *api) Send(obj map[string]any, templates []string, dest services.Destination) error {
notificationService, ok := n.notificationServices[dest.Service]
if !ok {
return fmt.Errorf("notification service '%s' is not supported", dest.Service)
}

vars := n.getVars(obj, dest)

in := make(map[string]interface{})
in := make(map[string]any)
for k := range vars {
in[k] = vars[k]
}
Expand All @@ -71,7 +71,7 @@ func (n *api) Send(obj map[string]interface{}, templates []string, dest services
return notificationService.Send(*notification, dest)
}

func (n *api) RunTrigger(triggerName string, obj map[string]interface{}) ([]triggers.ConditionResult, error) {
func (n *api) RunTrigger(triggerName string, obj map[string]any) ([]triggers.ConditionResult, error) {
vars := n.getVars(obj, services.Destination{})
return n.triggersService.Run(triggerName, vars)
}
Expand Down
14 changes: 6 additions & 8 deletions pkg/api/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import (

"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/argoproj/notifications-engine/pkg/services"
"github.com/argoproj/notifications-engine/pkg/services/mocks"
)

func getVars(in map[string]interface{}, _ services.Destination) map[string]interface{} {
func getVars(in map[string]any, _ services.Destination) map[string]any {
return in
}

Expand All @@ -32,6 +33,7 @@ func getConfig(ctrl *gomock.Controller, opts ...func(service *mocks.MockNotifica
},
}
}

func TestSend(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
Expand All @@ -44,12 +46,10 @@ func TestSend(t *testing.T) {
Recipient: "my-channel",
}).Return(nil)
}), getVars)
if !assert.NoError(t, err) {
return
}
require.NoError(t, err)

err = api.Send(
map[string]interface{}{"foo": "world"},
map[string]any{"foo": "world"},
[]string{"my-template"},
services.Destination{Service: "slack", Recipient: "my-channel"},
)
Expand All @@ -61,9 +61,7 @@ func TestAddService(t *testing.T) {
defer ctrl.Finish()

api, err := NewAPI(getConfig(ctrl), getVars)
if !assert.NoError(t, err) {
return
}
require.NoError(t, err)

api.AddNotificationService("hello", mocks.NewMockNotificationService(ctrl))

Expand Down
44 changes: 17 additions & 27 deletions pkg/api/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,21 @@ import (
"github.com/argoproj/notifications-engine/pkg/subscriptions"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/labels"
)

var (
emptySecret = &corev1.Secret{Data: map[string][]byte{}}
)
var emptySecret = &corev1.Secret{Data: map[string][]byte{}}

func TestParseConfig_Services(t *testing.T) {
cfg, err := ParseConfig(&corev1.ConfigMap{Data: map[string]string{
"service.slack": `
token: my-token
`}}, emptySecret)
`,
}}, emptySecret)

if !assert.NoError(t, err) {
return
}
require.NoError(t, err)

assert.NotNil(t, cfg.Services["slack"])
}
Expand All @@ -32,11 +30,10 @@ func TestParseConfig_Templates(t *testing.T) {
cfg, err := ParseConfig(&corev1.ConfigMap{Data: map[string]string{
"template.my-template": `
message: hello world
`}}, emptySecret)
`,
}}, emptySecret)

if !assert.NoError(t, err) {
return
}
require.NoError(t, err)

assert.Equal(t, map[string]services.Notification{
"my-template": {Message: "hello world"},
Expand All @@ -48,11 +45,10 @@ func TestParseConfig_DefaultServiceTriggers(t *testing.T) {
"defaultTriggers.slack": `
- trigger-a
- trigger-b
`}}, emptySecret)
`,
}}, emptySecret)

if !assert.NoError(t, err) {
return
}
require.NoError(t, err)

assert.Equal(t, map[string][]string{
"slack": {
Expand Down Expand Up @@ -100,7 +96,7 @@ headers:

result, err := replaceServiceConfigSecrets(input, &secrets)

assert.NoError(t, err)
require.NoError(t, err)
assert.Equal(t, expected, string(result))
}

Expand All @@ -126,7 +122,7 @@ apiKeys:

result, err := replaceServiceConfigSecrets(input, &secrets)

assert.NoError(t, err)
require.NoError(t, err)
assert.Equal(t, expected, string(result))
}

Expand Down Expand Up @@ -154,7 +150,7 @@ installationID: 67890

result, err := replaceServiceConfigSecrets(input, &secrets)

assert.NoError(t, err)
require.NoError(t, err)
assert.Equal(t, expected, string(result))
}

Expand All @@ -165,9 +161,7 @@ func TestParseConfig_DefaultTriggers(t *testing.T) {
},
}, emptySecret)

if !assert.NoError(t, err) {
return
}
require.NoError(t, err)
assert.Equal(t, []string{"trigger1", "trigger2"}, cfg.DefaultTriggers)
}

Expand All @@ -181,14 +175,10 @@ func TestParseConfig_Subscriptions(t *testing.T) {
},
}, emptySecret)

if !assert.NoError(t, err) {
return
}
require.NoError(t, err)

label, err := labels.Parse("test=true")
if !assert.NoError(t, err) {
return
}
require.NoError(t, err)
assert.Equal(t, subscriptions.DefaultSubscriptions([]subscriptions.DefaultSubscription{
{Triggers: []string{"my-trigger2"}, Selector: label},
}), cfg.Subscriptions)
Expand Down
20 changes: 11 additions & 9 deletions pkg/api/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,31 +58,33 @@ func NewFactory(settings Settings, defaultNamespace string, secretsInformer cach
}

_, _ = secretsInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
AddFunc: func(obj any) {
factory.invalidateIfHasName(settings.SecretName, obj)
},
DeleteFunc: func(obj interface{}) {
DeleteFunc: func(obj any) {
factory.invalidateIfHasName(settings.SecretName, obj)
},
UpdateFunc: func(oldObj, newObj interface{}) {
UpdateFunc: func(_, newObj any) {
factory.invalidateIfHasName(settings.SecretName, newObj)
}})
},
})

_, _ = cmInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
AddFunc: func(obj any) {
factory.invalidateIfHasName(settings.ConfigMapName, obj)
},
DeleteFunc: func(obj interface{}) {
DeleteFunc: func(obj any) {
factory.invalidateIfHasName(settings.ConfigMapName, obj)
},
UpdateFunc: func(oldObj, newObj interface{}) {
UpdateFunc: func(_, newObj any) {
factory.invalidateIfHasName(settings.ConfigMapName, newObj)
}})
},
})

return factory
}

func (f *apiFactory) invalidateIfHasName(name string, obj interface{}) {
func (f *apiFactory) invalidateIfHasName(name string, obj any) {
metaObj, ok := obj.(metav1.Object)
if !ok {
return
Expand Down
Loading