generated from kubernetes/kubernetes-template-project
-
Notifications
You must be signed in to change notification settings - Fork 25
/
type.go
84 lines (62 loc) · 2.36 KB
/
type.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
/*
Copyright 2020 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 main
import (
"fmt"
"regexp"
"strings"
"github.com/google/go-github/v32/github"
notes "sigs.k8s.io/kubebuilder-release-tools/notes/common"
)
// Extracted from kubernetes/test-infra/prow/plugins/wip/wip-label.go
var wipRegex = regexp.MustCompile(`(?i)^\W?WIP\W`)
var tagRegex = regexp.MustCompile(`^\[[\w-\.]*\]`)
type prTitleTypeError struct {
title string
}
func (e prTitleTypeError) Error() string {
return "No matching PR type indicator found in title."
}
func (e prTitleTypeError) Details() string {
return fmt.Sprintf(
`I saw a title of %#q, which doesn't seem to have any of the acceptable prefixes.
You need to have one of these as the prefix of your PR title:
- Breaking change: ⚠ (%#q)
- Non-breaking feature: ✨ (%#q)
- Patch fix: 🐛 (%#q)
- Docs: 📖 (%#q)
- Release: 🚀 (%#q)
- Infra/Tests/Other: 🌱 (%#q)
More details can be found at [sigs.k8s.io/kubebuilder-release-tools/VERSIONING.md](https://sigs.k8s.io/kubebuilder-release-tools/VERSIONING.md).`,
e.title, ":warning:", ":sparkles:", ":bug:", ":book:", ":rocket:", ":seedling:")
}
// verifyPRType checks that the PR title contains a prefix that defines its type
func verifyPRType(pr *github.PullRequest) (string, string, error) {
title := trimTitle(pr.GetTitle())
prType, finalTitle := notes.PRTypeFromTitle(title)
if prType == notes.UncategorizedPR {
return "", "", prTitleTypeError{title: title}
}
return fmt.Sprintf("Found %s PR (%s)", prType.Emoji(), prType), fmt.Sprintf(`Final title:
%s
`, finalTitle), nil
}
func trimTitle(title string) string {
// Remove the WIP prefix if found.
title = wipRegex.ReplaceAllString(title, "")
// Trim to remove spaces after WIP.
title = strings.TrimSpace(title)
// Remove a tag prefix if found.
title = tagRegex.ReplaceAllString(title, "")
return strings.TrimSpace(title)
}