forked from Mudlet/Mudlet
-
Notifications
You must be signed in to change notification settings - Fork 1
/
dangerfile.js
39 lines (35 loc) · 1.57 KB
/
dangerfile.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
const {danger, fail, message, warn} = require('danger');
const SOURCE_REGEX = /.*\.(cpp|c|h|lua)$/i
const TITLE_REGEX = /^(fix|improve|add|infra)/i
const touched_files = [...danger.git.created_files, ...danger.git.modified_files]
const sourcefiles = touched_files.filter(item => item.match(SOURCE_REGEX))
const pr_title = danger.github.pr.title
// Checks the title to make sure it matches expectations
const title_type = pr_title.match(TITLE_REGEX)
if (title_type) {
// no-op
} else if(pr_title.match(/^\[?WIP\]?/i)) {
fail("PR is still a WIP, do not merge")
} else {
fail("PR title must start with `fix`, `improve`, `add` or `infra` for release notes purposes.")
}
// checks sourcefile changes to ensure any new TODO items also have a Mudlet issue
sourcefiles.forEach(function(filename) {
const additions = danger.git.diffForFile(filename)
additions.then(diff => {
diff.added.split("\n").forEach(function(item) {
if (item.includes("TODO:")) {
fail(`Source file ${filename} includes a TODO! Can you make the change right away? If no, better not to create a TODO - they just tend to hang around and never get fixed.`)
}
})
})
})
// Warns if a PR touched more than 10 source files.
if (sourcefiles.length > 10) {
warn(`PR makes changes to ${sourcefiles.length} source files. Double check the scope hasn't gotten out of hand`)
}
// Warns if the title is perhaps a bit verbose
const title_wordcount = pr_title.split(" ").length
if (title_wordcount > 25) {
warn(`PR title is ${title_wordcount} words long, double check it will make a good changelog line`)
}