Danger

Danger title image

Getting Set Upa project from orta therox, Juanito Fatas and and others.

There are 5 steps involved in getting Danger running:

#Including Danger

We recommend you install Danger via Bundler + a Gemfile. This means that your version of Danger and your plugins are all versioned correctly. You are in control of how and when your dependencies are updated. If you’d like to learn more about Bundler, check out this guide.

#Installation

If you have an existing Gemfile, add gem 'danger' or gem 'danger-gitlab' to it. If you don’t, run bundle init in your project root, and edit the freshly-minted Gemfile.

#Bundler 101

Bundler is a dependency manager for Ruby which uses a Gemfile to define all of the Ruby projects you want to use. To get started type in bundler init in your project folder. This creates your Gemfile. Open this up in your editor, then replace the #gem 'rails' with the gem above. Then run bundle install inside your project folder.

#Easy Mode

Easy mode - run: bundle exec danger init - this will guide you through the next four steps, offering useful advice specific to your setup. If you would like to understand how all of the pieces come together, read on:

#Creating a Dangerfile

Create an empty file named Dangerfile. The file is written in Ruby, but your text editor might not recognize it as such, so you may need to set the syntax highlighting manually (unless you’re using VS Code). To get started, we would recommend a simple “Hello World.”

message("Hello, this worked")

#Creating a bot account for Danger to use

This is optional. Pragmatically, you want to do this though.

  • GitHub
  • GitLab
  • Bitbucket Server
  • Bitbucket Cloud

In order to get the most out of Danger, we recommend giving her the ability to post comments in your Pull Requests. This is a regular GitHub account, but depending on whether you are working on a private or public project, you will want to give different levels of access to this bot. You are allowed to have one bot per GitHub account.

To get started, open https://github.com in a private browser session.

#OSS Projects

Do not add the bot to your repo or to your organization.

#Closed Source Projects

Add the bot to your repo or to your organization. The bot requires permission level “Write” to be able to set a PR’s status. Note that you should not re-use this bot for OSS projects.

#Setting up an Access Token

Here’s the link, you should open this in the private session where you just created the new GitHub account. Again, the rights that you give to the token depend on the openness of your projects. You’ll want to save for later, when you add a DANGER_GITHUB_API_TOKEN to your CI.

#Tokens for OSS Projects

We recommend giving the token the smallest scope possible. This means just public_repo, this scope is still ideally too much but this account shouldn’t have any access to other repos or organizations - so malicious use of the token is scoped to making new repos on it, or writing comments on other OSS projects. Because the token can be quite easily be extracted from the CI environment, this minimizes the chance for bad actors to cause chaos with it.

#Tokens for Closed Source Projects

We recommend giving access to the whole repo scope, and its children.

#Enterprise GitHub

You can work with GitHub Enterprise by setting 2 environment variables:

DANGER_GITHUB_HOST to the host that GitHub is running on.

DANGER_GITHUB_API_BASE_URL to the host that the GitHub Enterprise API is reachable on.

For example:

DANGER_GITHUB_HOST=git.corp.evilcorp.com
DANGER_GITHUB_API_BASE_URL=https://git.corp.evilcorp.com/api/v3

#Continuous Integration

Continuous Integration is the process of regularly running tests and generating metrics for a project. It is where you can ensure that the code you are submitting for review is passing on all of the tests. You commonly see this as green or red dots next to commits.

Danger is built to run as a part of this process, so you will need to have this set up as a pre-requisite.

#Setting up Danger to run on your CI

  • Buddybuild
  • Drone
  • CodeBuild
  • VSTS
  • Bitrise
  • AppVeyor
  • Surf
  • DotCi
  • Appcenter
  • TeamCity
  • CircleCI
  • Jenkins
  • GitLabCI
  • Semaphore
  • LocalOnlyGitRepo
  • GitHubActions
  • XcodeServer
  • BitbucketPipelines
  • Codeship
  • Buildkite
  • Travis
  • Screwdriver

CI Setup

You need to edit your .travis.yml to include bundle exec danger. If you already have a script: section then we recommend adding this command at the end of the script step: - bundle exec danger.

Otherwise, add a before_script step to the root of the .travis.yml with bundle exec danger

   before_script:
     - bundle exec danger

Adding this to your .travis.yml allows Danger to fail your build, both on the TravisCI website and within your Pull Request. With that set up, you can edit your job to add bundle exec danger at the build action.

Note: Travis CI defaults to using an older version of Ruby, so you may need to add rvm: 2.0.0 to the root your .travis.yml.

Token Setup

You need to add the DANGER_GITHUB_API_TOKEN environment variable, to do this, go to your repo's settings, which should look like: https://travis-ci.org/[user]/[repo]/settings.

If you have an open source project, you should ensure "Display value in build log" enabled, so that PRs from forks work.

Installation Without Bundler

If Danger is your only ruby dependency, you may not want to use Bundler, and that’s fine. You can use the ~> operator in the gem install step work with SemVer. For example here is a one-liner used in the CI for artsy/force:

rbenv global 2.3.1 && gem install danger --version '~> 5.0' && danger

This sets the Ruby version, installs Danger via gem install danger but only a version 4.x build, then runs Danger. This methods makes Danger globally available in the system, you can include plugins at the same time by running gem install danger danger-prose [gem] [gem].

You can run danger --version to check your version. Any time you see a command that recommends you use bundle exec - you can skip the bundle exec part.

macOS sudo-less Installation

Create or edit a .profile file in your home directory and add or amend it to include these lines:

export GEM_HOME=$HOME/.gem
export PATH=$GEM_HOME/bin:$PATH

help improve this document by sending MRs.