Adds Danger support
Summary:
Testing Danger support in CI. Continuation of #14964, which Circle stopped building.
Update your node modules first: `npm install`
`npm run danger pr https://github.com/facebook/react-native/pull/14951`
Verify output. This PR should trigger a WIP warning, as well as a package.json warning:
```
> react-native@1000.0.0 danger /Users/hramos/git/react-native
> node ./node_modules/.bin/danger "pr" "https://github.com/facebook/react-native/pull/14951"
{
fails: [],
warnings: [
{
message: ":construction_worker: Work In Progress - <i>Do not merge yet.</i>"
},
{
message: ":lock: Changes were made to package.json - <i>This will require a manual import. Once approved, a Facebook employee should import the PR, then run `yarn add` for any new packages.</i>"
}
],
messages: [],
markdowns: ["This PR requires attention from the facebook/react-native team."]
}
```
`npm run danger pr https://github.com/facebook/react-native/pull/14946`
Verify output. This PR should trigger a warning against the lack of a test plan (note that the PR does have a test plan, but it does not title it as such):
```
{
fails: [],
warnings: [
{
message: ":clipboard: Test Plan - <i>This PR appears to be missing a Test Plan</i>"
}
],
messages: [],
markdowns: []
}
```
`npm run danger pr https://github.com/facebook/react-native/pull/13186`
Should warn against a missing test plan:
```
{
fails: [],
warnings: [
{
message: ":clipboard: Test Plan - <i>This PR appears to be missing a Test Plan.</i>"
}
],
messages: [],
markdowns: [":page_facing_up: Thanks for your contribution to the docs!"]
}
```
If the author is able to issue bot commands, we reasonably assume that this is coming from an established core contributor. Their PRs will be flagged for expedited review:
`npm run danger pr https://github.com/facebook/react-native/pull/14895`
```
{
fails: [],
warnings: [
{
message: ":clipboard: Test Plan - <i>This PR appears to be missing a Test Plan.</i>"
}
],
messages: [],
markdowns: ["This PR has been submitted by a core contributor. Notifying facebook/react-native."]
}
```
Closes https://github.com/facebook/react-native/pull/15061
Differential Revision: D5436605
Pulled By: hramos
fbshipit-source-id: 4ba9e812387d8a69893dab537af9b6cd108753cf
2017-07-18 11:08:35 -07:00
|
|
|
/**
|
|
|
|
* Copyright (c) 2013-present, Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD-style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*/
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const fs = require('fs');
|
|
|
|
const includes = require('lodash.includes');
|
|
|
|
|
|
|
|
import { danger, fail, markdown, warn } from 'danger';
|
|
|
|
|
|
|
|
const isDocsFile = path => includes(path, 'docs/');
|
|
|
|
const editsDocs = danger.git.modified_files.filter(isDocsFile).length > 0;
|
|
|
|
const addsDocs = danger.git.created_files.filter(isDocsFile).length > 0;
|
|
|
|
if (addsDocs || editsDocs) {
|
|
|
|
// Note, this does not yet cover edits to the autogenerated docs
|
|
|
|
// (e.g. comments within JS source files)
|
|
|
|
markdown(':page_facing_up: Thanks for your contribution to the docs!');
|
|
|
|
}
|
|
|
|
|
|
|
|
const isBlogFile = path => includes(path, 'blog/');
|
|
|
|
|
|
|
|
// Flags new blog posts. Note that mentions will not be parsed as the access token we're using does
|
|
|
|
// not belong to the Facebook org (on purpose)
|
|
|
|
const addsBlogPost = danger.git.created_files.filter(isBlogFile).length > 0;
|
|
|
|
if (addsBlogPost) {
|
|
|
|
const message = ':memo: Blog post';
|
|
|
|
const idea = 'This PR appears to add a new blog post, ' +
|
|
|
|
'and may require further review from the React Native team.';
|
|
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
|
|
markdown(':memo: This PR requires attention from the @facebook/react-native team.');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Flags edits to blog posts
|
|
|
|
const editsBlogPost = danger.git.modified_files.filter(isBlogFile).length > 0;
|
|
|
|
if (editsBlogPost) {
|
|
|
|
const message = ':memo: Blog post';
|
|
|
|
const idea = 'This PR appears to edit an existing blog post, ' +
|
|
|
|
'and may require further review from the React Native team.';
|
|
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
|
|
markdown('This PR requires attention from the @facebook/react-native team.');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Fails if the description is too short.
|
|
|
|
if (danger.github.pr.body.length < 10) {
|
|
|
|
fail(':grey_question: This pull request needs a description.');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Warns if the PR title contains [WIP]
|
|
|
|
const isWIP = includes(danger.github.pr.title, '[WIP]');
|
|
|
|
if (isWIP) {
|
|
|
|
const message = ':construction_worker: Work In Progress';
|
|
|
|
const idea = 'This PR appears to be a work in progress, and may not be ready to be merged yet.';
|
|
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Warns if there are changes to package.json, and tags the team.
|
|
|
|
const packageChanged = includes(danger.git.modified_files, 'package.json');
|
|
|
|
if (packageChanged) {
|
|
|
|
const message = ':lock: package.json';
|
|
|
|
const idea = 'Changes were made to package.json. ' +
|
|
|
|
'This will require a manual import by a Facebook employee.';
|
|
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
|
|
markdown('This PR requires attention from the @facebook/react-native team.');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Warns if a test plan is missing.
|
|
|
|
const gettingStartedChanged = includes(danger.git.modified_files, 'docs/GettingStarted.md');
|
|
|
|
const includesTestPlan = danger.github.pr.body.toLowerCase().includes('test plan');
|
|
|
|
|
|
|
|
// Warns if a test plan is missing, when editing the Getting Started guide. This page needs to be
|
|
|
|
// tested in all its permutations.
|
|
|
|
if (!includesTestPlan && gettingStartedChanged) {
|
|
|
|
const message = ':clipboard: Test Plan';
|
|
|
|
const idea = 'This PR appears to be missing a Test Plan.';
|
|
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
|
|
}
|
|
|
|
// Doc edits rarely require a test plan. We'll trust the reviewer to push back if one is needed.
|
|
|
|
if (!includesTestPlan && !editsDocs) {
|
|
|
|
const message = ':clipboard: Test Plan';
|
|
|
|
const idea = 'This PR appears to be missing a Test Plan.';
|
|
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Tags PRs that have been submitted by a core contributor.
|
|
|
|
const taskforce = fs.readFileSync('../bots/IssueCommands.txt', 'utf8').split('\n')[0].split(':')[1];
|
|
|
|
const isSubmittedByTaskforce = includes(taskforce, danger.github.pr.user.login);
|
|
|
|
if (isSubmittedByTaskforce) {
|
|
|
|
markdown('This PR has been submitted by a core contributor.');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Warns if the bots whitelist file is updated.
|
2017-07-19 01:31:44 -07:00
|
|
|
const issueCommandsFileModified = includes(danger.git.modified_files, 'bots/IssueCommands.txt');
|
|
|
|
if (issueCommandsFileModified) {
|
Adds Danger support
Summary:
Testing Danger support in CI. Continuation of #14964, which Circle stopped building.
Update your node modules first: `npm install`
`npm run danger pr https://github.com/facebook/react-native/pull/14951`
Verify output. This PR should trigger a WIP warning, as well as a package.json warning:
```
> react-native@1000.0.0 danger /Users/hramos/git/react-native
> node ./node_modules/.bin/danger "pr" "https://github.com/facebook/react-native/pull/14951"
{
fails: [],
warnings: [
{
message: ":construction_worker: Work In Progress - <i>Do not merge yet.</i>"
},
{
message: ":lock: Changes were made to package.json - <i>This will require a manual import. Once approved, a Facebook employee should import the PR, then run `yarn add` for any new packages.</i>"
}
],
messages: [],
markdowns: ["This PR requires attention from the facebook/react-native team."]
}
```
`npm run danger pr https://github.com/facebook/react-native/pull/14946`
Verify output. This PR should trigger a warning against the lack of a test plan (note that the PR does have a test plan, but it does not title it as such):
```
{
fails: [],
warnings: [
{
message: ":clipboard: Test Plan - <i>This PR appears to be missing a Test Plan</i>"
}
],
messages: [],
markdowns: []
}
```
`npm run danger pr https://github.com/facebook/react-native/pull/13186`
Should warn against a missing test plan:
```
{
fails: [],
warnings: [
{
message: ":clipboard: Test Plan - <i>This PR appears to be missing a Test Plan.</i>"
}
],
messages: [],
markdowns: [":page_facing_up: Thanks for your contribution to the docs!"]
}
```
If the author is able to issue bot commands, we reasonably assume that this is coming from an established core contributor. Their PRs will be flagged for expedited review:
`npm run danger pr https://github.com/facebook/react-native/pull/14895`
```
{
fails: [],
warnings: [
{
message: ":clipboard: Test Plan - <i>This PR appears to be missing a Test Plan.</i>"
}
],
messages: [],
markdowns: ["This PR has been submitted by a core contributor. Notifying facebook/react-native."]
}
```
Closes https://github.com/facebook/react-native/pull/15061
Differential Revision: D5436605
Pulled By: hramos
fbshipit-source-id: 4ba9e812387d8a69893dab537af9b6cd108753cf
2017-07-18 11:08:35 -07:00
|
|
|
const message = ':exclamation: Bots';
|
|
|
|
const idea = 'This PR appears to modify the list of people that may issue commands to the ' +
|
|
|
|
'GitHub bot.';
|
|
|
|
warn(`${message} - <i>${idea}</i>`);
|
|
|
|
}
|