forked from cerner/terra-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dangerfile.js
40 lines (30 loc) · 1.4 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
40
// eslint-disable-next-line import/no-extraneous-dependencies
import { danger, fail } from 'danger';
const CHANGELOG_PATTERN = /^packages\/terra-([a-z-0-9])*\/CHANGELOG\.md/i;
const changedFiles = danger.git.created_files.concat(danger.git.modified_files);
const allowedFilepaths = ['package.json', 'CHANGELOG.md', 'src', 'translations', 'terra-core-docs'];
const changedChangelogs = new Set();
const changedPackages = new Set();
changedFiles.forEach((file) => {
if (file.substring(0, 9) !== 'packages/') {
// file isn't in a package so it has no changelog, skip further processing
return;
}
if (!allowedFilepaths.some(filepath => file.includes(filepath))) {
// skip further processing if the changed file is not among the allowed filepaths
return;
}
const packageName = file.split('packages/')[1].split('/')[0];
if (CHANGELOG_PATTERN.test(file)) {
// changed file is the CHANGELOG itself
changedChangelogs.add(packageName);
return;
}
// for other allowed files
changedPackages.add(packageName);
});
const missingChangelogs = [...changedPackages].filter(packageName => !changedChangelogs.has(packageName));
// Fail if there are package changes without a CHANGELOG update
if (missingChangelogs.length > 0) {
fail(`Please include a CHANGELOG entry for each changed package this PR. Looks like a CHANGELOG entry is missing for: \n\n - ${missingChangelogs.join('\n - ')}`);
}