-
Notifications
You must be signed in to change notification settings - Fork 5.3k
/
verify_pr_title.js
70 lines (64 loc) · 1.95 KB
/
verify_pr_title.js
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
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
const prTitle = Deno.args[0];
if (prTitle == null) {
Deno.exit(0); // not a PR
}
console.log("PR title:", prTitle);
if (
prTitle.startsWith("chore:") && prTitle.includes("deno_core") &&
(prTitle.includes("upgrade") || prTitle.includes("update"))
) {
console.error([
"Please categorize this deno_core upgrade as a 'feat:', 'fix:' or a ",
"'refactor:'. If your upgrade does not fall into either of these ",
"categories, wait until the next deno_core release.\n\n",
"For feats and fixes, please title your PR outlining the fixed issue ",
"rather than just `fix: upgrade deno_core` so that users understand the ",
"change that was made in the changelog.",
].join(""));
Deno.exit(1);
}
// This is a release PR, so it's valid.
if (/^[^\s] \.[^\s] \.[^\s] $/.test(prTitle)) {
console.log("Valid.");
Deno.exit(0);
}
const validPrefixes = [
"chore",
"fix",
"feat",
"perf",
"ci",
"cleanup",
"docs",
"bench",
"build",
"refactor",
"test",
// allow Revert PRs because it allows us to remove the landed
// commit from the generated changelog
"Revert ",
// allow Reland PRs because when editing the changelog, it helps us identify
// commits that were reverted, but then relanded
"Reland ",
// Allow landing breaking changes that are properly marked
"BREAKING",
// Allow landing breaking changes that will be applied in Deno 2, or available
// immediately with DENO_FUTURE=1 env var
"FUTURE",
];
if (validPrefixes.some((prefix) => prTitle.startsWith(prefix))) {
console.log("Valid.");
} else {
console.error(
"The PR title must start with one of the following prefixes:\n",
);
for (const prefix of validPrefixes) {
console.error(` - ${prefix}`);
}
console.error(
"\nPlease fix the PR title according to https://www.conventionalcommits.org "
"then push an empty commit to reset the CI.",
);
Deno.exit(1);
}