* warn if the target branch is not master * link to the logo guidance if PR modifies a SVG file in /logo/
94 lines
2.9 KiB
JavaScript
94 lines
2.9 KiB
JavaScript
// Have you identified a contributing guideline that should be included here?
|
|
// Please open a pull request!
|
|
|
|
const { danger, fail, message, warn } = require('danger');
|
|
const chainsmoker = require('chainsmoker');
|
|
|
|
const fileMatch = chainsmoker({
|
|
created: danger.git.created_files,
|
|
modified: danger.git.modified_files,
|
|
createdOrModified: danger.git.modified_files.concat(danger.git.created_files),
|
|
deleted: danger.git.deleted_files,
|
|
});
|
|
|
|
const documentation = fileMatch(
|
|
'**/*.md',
|
|
'lib/all-badge-examples.js',
|
|
'frontend/components/usage.js'
|
|
);
|
|
const server = fileMatch('server.js');
|
|
const serviceTests = fileMatch('service-tests/*.js');
|
|
const helpers = fileMatch(
|
|
'lib/**/*.js',
|
|
'!**/*.spec.js',
|
|
'!lib/all-badge-examples.js'
|
|
);
|
|
const logos = fileMatch(
|
|
'logo/*.svg'
|
|
);
|
|
const helperTests = fileMatch('lib/**/*.spec.js');
|
|
const packageJson = fileMatch('package.json');
|
|
const packageLock = fileMatch('package-lock.json');
|
|
const capitals = fileMatch('**/*[A-Z]*.js');
|
|
const underscores = fileMatch('**/*_*.js');
|
|
const targetBranch = danger.github.pr.base.ref;
|
|
|
|
message([
|
|
':sparkles: Thanks for your contribution to Shields, ',
|
|
`@${danger.github.pr.user.login}!`
|
|
].join(''));
|
|
|
|
if (targetBranch != 'master') {
|
|
const message = `This PR targets \`${targetBranch}\``;
|
|
const idea = 'It is likely that the target branch should be `master`';
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
}
|
|
|
|
if (documentation.createdOrModified) {
|
|
message([
|
|
'Thanks for contributing to our documentation. ',
|
|
'We :heart: our [documentarians](http://www.writethedocs.org/)!'
|
|
].join(''));
|
|
}
|
|
|
|
if (packageJson.modified && !packageLock.modified) {
|
|
const message = 'This PR modified package.json, but not package-lock.json';
|
|
const idea = 'Perhaps you need to run `npm install`?';
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
}
|
|
|
|
if (server.modified && !serviceTests.createdOrModified) {
|
|
warn([
|
|
'This PR modified the server but none of the service tests. ',
|
|
"That's okay so long as it's refactoring existing code.",
|
|
].join(''));
|
|
}
|
|
|
|
if (helpers.created && !helperTests.created) {
|
|
warn([
|
|
'This PR added helper modules in `lib/` but not accompanying tests. ',
|
|
'Generally helper modules should have their own tests.',
|
|
].join(''));
|
|
} else if (helpers.createdOrModified && !helperTests.createdOrModified) {
|
|
warn([
|
|
'This PR modified helper functions in `lib/` but not accompanying tests. ',
|
|
"That's okay so long as it's refactoring existing code.",
|
|
].join(''));
|
|
}
|
|
|
|
if (logos.created) {
|
|
message([
|
|
':art: Thanks for submitting a logo. ',
|
|
'Please ensure your contribution follows our ',
|
|
'[guidance](https://github.com/badges/shields/blob/master/CONTRIBUTING.md#logos) ',
|
|
'for logo submissions.'
|
|
].join(''));
|
|
}
|
|
|
|
if (capitals.created || underscores.created) {
|
|
fail([
|
|
'JavaScript source files should be named with kebab-case ',
|
|
'(dash-separated lowercase).',
|
|
].join(''));
|
|
}
|