-
Notifications
You must be signed in to change notification settings - Fork 24.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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" "#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 #15061 Differential Revision: D5436605 Pulled By: hramos fbshipit-source-id: 4ba9e812387d8a69893dab537af9b6cd108753cf
- Loading branch information
1 parent
9df79e7
commit 56d4595
Showing
7 changed files
with
137 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -47,6 +47,7 @@ local.properties | |
node_modules | ||
*.log | ||
.nvm | ||
/danger/node_modules/ | ||
|
||
# OS X | ||
.DS_Store | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
If you'd like to make changes to the Dangerfile, find an existing PR and copy the URL. | ||
|
||
Then run from the React Native root: | ||
|
||
``` | ||
cd danger | ||
npm install | ||
.. | ||
node danger/node_modules/.bin/danger pr https://github.com/facebook/react-native/pull/1 | ||
``` | ||
|
||
And you will get the responses from parsing the Dangerfile. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/** | ||
* 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. | ||
const isBotsCommandsFile = path => includes(path, 'bots/IssueCommands.txt'); | ||
if (isBotsCommandsFile) { | ||
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>`); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"private": true, | ||
"scripts": { | ||
"danger": "node ./node_modules/.bin/danger" | ||
}, | ||
"devDependencies": { | ||
"danger": "^0.21.2", | ||
"lodash.includes": "^4.3.0" | ||
} | ||
} |