forked from kubernetes-retired/contrib
/
interactions.go
96 lines (78 loc) · 2.56 KB
/
interactions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package comment
import (
"regexp"
"strings"
"github.com/google/go-github/github"
)
// NotificationName identifies notifications by name
type NotificationName string
// Match returns true if the comment is a notification with the given name
func (b NotificationName) Match(comment *github.IssueComment) bool {
notif := ParseNotification(comment)
if notif == nil {
return false
}
return strings.ToUpper(notif.Name) == strings.ToUpper(string(b))
}
// CommandName identifies commands by name
type CommandName string
// Match will return true if the comment is a command with the given name
func (c CommandName) Match(comment *github.IssueComment) bool {
command := ParseCommand(comment)
if command == nil {
return false
}
return strings.ToUpper(command.Name) == strings.ToUpper(string(c))
}
// CommandArguments identifies commands by arguments (with regex)
type CommandArguments regexp.Regexp
// Match if the command arguments match the regexp
func (c CommandArguments) Match(comment *github.IssueComment) bool {
command := ParseCommand(comment)
if command == nil {
return false
}
return (*regexp.Regexp)(&c).MatchString(command.Arguments)
}
// MungeBotAuthor creates a matcher to find mungebot comments
func MungeBotAuthor() Matcher {
return AuthorLogin("k8s-merge-robot")
}
// JenkinsBotAuthor creates a matcher to find jenkins bot comments
func JenkinsBotAuthor() Matcher {
return AuthorLogin("k8s-bot")
}
// BotAuthor creates a matcher to find any bot comments
func BotAuthor() Matcher {
return Or([]Matcher{
MungeBotAuthor(),
JenkinsBotAuthor(),
})
}
// HumanActor creates a matcher to find non-bot comments.
// ValidAuthor is used because a comment that doesn't have "Author" is NOT made by a human
func HumanActor() Matcher {
return And([]Matcher{
ValidAuthor{},
Not{BotAuthor()},
})
}
// MungerNotificationName finds notification posted by the munger, based on name
func MungerNotificationName(notif string) Matcher {
return And([]Matcher{
MungeBotAuthor(),
NotificationName(notif),
})
}