-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdangerfile.dart
109 lines (93 loc) · 2.08 KB
/
dangerfile.dart
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
97
98
99
100
101
102
103
104
105
106
107
108
109
import "package:danger_core/danger_core.dart";
abstract class GitlintConfig {
static const List<String> types = [
"build",
"chore",
"docs",
"feat",
"fix",
"refactor",
"revert",
"style",
"test",
];
static const List<String> scopes = [
"root",
"lib",
"lib-domain",
"lib-infrastructures",
"lib-use_cases",
"lib-interfaces",
"lib-libs",
"assets",
"android",
"ios",
"web",
"windows",
"macos",
"linux",
"github",
];
static const List<String> issuePrefixes = ["ds", "release"];
}
class PRConfig {
final RegExp? titlePattern;
final RegExp? branchPattern;
final bool requireAssignee;
PRConfig({
this.titlePattern,
this.branchPattern,
this.requireAssignee = false,
});
}
final config = PRConfig(
titlePattern: RegExp(
'^(${GitlintConfig.types.join("|")})'
'(\\((${GitlintConfig.scopes.join(("|"))})(\\/(${GitlintConfig.scopes.join(("|"))}))*\\))?'
": (.*\\S )?"
'(${GitlintConfig.issuePrefixes.join("|")})-\\d{1,6}((\\.\\d+){1,2})?\$',
),
branchPattern: RegExp(
"^\\d{1,6}-"
"${GitlintConfig.types.join("|")}-"
"[a-zA-Z\\d-]+\$"
"|(main)\$",
),
requireAssignee: true,
);
final pr = danger.github.pr;
void checkTitle(RegExp titlePattern) {
final isTitleValid = titlePattern.hasMatch(pr.title);
if (!isTitleValid) {
fail(
"The PR title should match the following pattern: "
"$titlePattern",
);
}
}
void checkBranch(RegExp branchPattern) {
final isBranchValid = branchPattern.hasMatch(pr.head.ref);
if (!isBranchValid) {
fail(
"The PR branch should match the following pattern: "
"$branchPattern",
);
}
}
void checkAssignee() {
final hasAssignee = pr.assignee == null ? false : true;
if (!hasAssignee) {
fail("The PR should have at least one assignee");
}
}
void main() {
if (config.titlePattern != null) {
checkTitle(config.titlePattern!);
}
if (config.branchPattern != null) {
checkBranch(config.branchPattern!);
}
if (config.requireAssignee) {
checkAssignee();
}
}