What is danger?
Danger is a tool that helps automate code review chores. It allows you to create rules that can be enforced during the code review process, ensuring that certain standards and practices are followed.
What are danger's main functionalities?
Automate Code Review
This feature allows you to automate code review tasks by defining rules that can fail or warn if certain conditions are not met. For example, you can fail a pull request if it does not have a description or warn if it does not have any labels.
danger({
fail: 'This PR does not have a description.',
warn: 'This PR does not have any labels.'
});
Check for Changelog Updates
This feature checks if the changelog has been updated in the pull request. If not, it can warn the user to add a changelog entry for their changes.
if (!danger.git.modified_files.includes('CHANGELOG.md')) {
warn('Please add a changelog entry for your changes.');
}
Enforce PR Size Limits
This feature allows you to enforce size limits on pull requests. If a pull request exceeds a certain number of additions and deletions, it can warn the user to consider breaking it down into smaller PRs.
const bigPRThreshold = 500;
if (danger.github.pr.additions + danger.github.pr.deletions > bigPRThreshold) {
warn('This PR is too large. Consider breaking it down into smaller PRs.');
}
Other packages similar to danger
eslint
ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. While it focuses on linting and enforcing coding standards, it can be used in conjunction with Danger to ensure code quality.
prettier
Prettier is an opinionated code formatter that enforces a consistent style by parsing your code and re-printing it. It complements Danger by ensuring code style consistency, which can be part of the automated code review process.
husky
Husky is a tool that allows you to run scripts before committing or pushing code. It can be used to enforce pre-commit hooks, ensuring that certain checks (like those defined in Danger) are run before code is committed.
danger-js
Danger on Node, wonder what's going on? see VISION.md
Get started?
This is like, kinda early. If you can take a bit of heat, it's usable in production as of 0.0.4.
Early Adopters
Welcome!
So, what's the deal? Well, right now Danger JS does the MVP of the Ruby version. You can look at Git metadata, or GitHub metadata on Travis CI.
Danger can fail your build, write a comment on GitHub, edit it as your build changes and then delete it once you've passed review.
To install:
npm install danger --save-dev
Then add a run command to your Package.json
"danger": "danger"
Then create a dangerfile.js
in the project root with some rules:
import { danger, fail } from "danger"
const hasChangelog = danger.git.modified_files.includes("changelog.md")
if (!hasChangelog) {
fail("No Changelog changes!")
}
Then you add npm run danger
to the end of your CI run, and Danger will run. 👍
Notes:
- the
Dangerfile.js
needs to be able to run on node without transpiling right now. - The shape of the API is
git
and pr
This thing is broken, I should help improve it
Awesommmmee.
git clone https://github.com/danger/danger-js.git
cd danger-js
npm install -g yarn
yarn install
You can then verify your install by running the tests, and the linters:
npm test
npm run lint
npm run flow
Dev Life
We use quite a few semi-bleeding edge features of JS in Danger. Please see the glossary for an overview. Notably Flow, Interfaces, Async/Await and Typealiases.
You'll have a nicer experience as a developer if you use VS Code with Flow enabled, and if you install flow-typed.
npm install -g flow-typed
flow-typed install
( and maybe flow-typed install jest@14
)
Tips:
- You can run the
danger
command globally from your dev build by running npm run link
. - If you're using VS Code, press Run to start an example run, should go through most of the process with a debugger attatched. Either use breakpoints, or add
debugger
to get a repl and context.
What is the TODO?
Check the issues, I try and keep my short term perspective there. Long term is in the VISION.md.