...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package predicate
16
17 import (
18 "context"
19 "strings"
20
21 "github.com/pkg/errors"
22
23 "edge-infra.dev/pkg/f8n/devinfra/repo/owners/policybot/pull"
24
25 "edge-infra.dev/pkg/f8n/devinfra/repo/owners/policybot/policy/common"
26 )
27
28 type HasLabels []string
29
30 var _ Predicate = HasLabels([]string{})
31
32 func (pred HasLabels) Evaluate(ctx context.Context, prctx pull.Context) (*common.PredicateResult, error) {
33
34 predicateResult := common.PredicateResult{
35 ValuePhrase: "labels",
36 ConditionPhrase: "contain the labels",
37 }
38 if len(pred) > 0 {
39 labels, err := prctx.Labels()
40 if err != nil {
41 return nil, errors.Wrap(err, "failed to list pull request labels")
42 }
43 predicateResult.Values = labels
44 for _, requiredLabel := range pred {
45 if !contains(labels, strings.ToLower(requiredLabel)) {
46 predicateResult.ConditionValues = []string{requiredLabel}
47 predicateResult.Description = "Missing label: " + requiredLabel
48 predicateResult.Satisfied = false
49 return &predicateResult, nil
50 }
51 }
52 }
53 predicateResult.ConditionValues = pred
54 predicateResult.Satisfied = true
55 return &predicateResult, nil
56 }
57
58 func (pred HasLabels) Trigger() common.Trigger {
59 return common.TriggerLabel
60 }
61
62 func contains(elements []string, value string) bool {
63 for _, element := range elements {
64 if element == value {
65 return true
66 }
67 }
68 return false
69 }
70
View as plain text