danger 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/assets/DangerfileTemplate +2 -2
 - data/lib/danger/ci_source/buildkite.rb +30 -18
 - data/lib/danger/ci_source/ci_source.rb +31 -29
 - data/lib/danger/ci_source/circle.rb +57 -37
 - data/lib/danger/ci_source/drone.rb +32 -17
 - data/lib/danger/ci_source/jenkins.rb +29 -17
 - data/lib/danger/ci_source/local_git_repo.rb +43 -45
 - data/lib/danger/ci_source/semaphore.rb +23 -17
 - data/lib/danger/ci_source/surf.rb +26 -15
 - data/lib/danger/ci_source/teamcity.rb +36 -17
 - data/lib/danger/ci_source/travis.rb +39 -18
 - data/lib/danger/ci_source/xcode_server.rb +32 -19
 - data/lib/danger/commands/runner.rb +1 -0
 - data/lib/danger/commands/systems.rb +41 -0
 - data/lib/danger/danger_core/environment_manager.rb +14 -16
 - data/lib/danger/danger_core/executor.rb +31 -22
 - data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +15 -1
 - data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +19 -7
 - data/lib/danger/helpers/comments_helper.rb +105 -0
 - data/lib/danger/plugin_support/plugin_file_resolver.rb +1 -1
 - data/lib/danger/plugin_support/plugin_parser.rb +2 -2
 - data/lib/danger/plugin_support/templates/readme_table.html.erb +3 -1
 - data/lib/danger/request_source/github.rb +6 -94
 - data/lib/danger/request_source/request_source.rb +2 -1
 - data/lib/danger/version.rb +1 -1
 - metadata +6 -3
 
| 
         @@ -1,26 +1,32 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # https://semaphoreci.com/docs/available-environment-variables.html
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module Danger
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
              ### CI Setup
         
     | 
| 
      
 5 
     | 
    
         
            +
              #
         
     | 
| 
      
 6 
     | 
    
         
            +
              # For Semaphor you will want to go to the settings page of the project. Inside "Build Settings"
         
     | 
| 
      
 7 
     | 
    
         
            +
              # you should add `bundle exec danger` to the Setup thread.
         
     | 
| 
      
 8 
     | 
    
         
            +
              #
         
     | 
| 
      
 9 
     | 
    
         
            +
              # ### Token Setup
         
     | 
| 
      
 10 
     | 
    
         
            +
              #
         
     | 
| 
      
 11 
     | 
    
         
            +
              # You can add your `DANGER_GITHUB_API_TOKEN` inside the "Environment Variables" section in the settings.
         
     | 
| 
      
 12 
     | 
    
         
            +
              #
         
     | 
| 
      
 13 
     | 
    
         
            +
              class Semaphore < CI
         
     | 
| 
      
 14 
     | 
    
         
            +
                def self.validates_as_ci?(env)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  env.key? "SEMAPHORE"
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
       11 
17 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
      
 18 
     | 
    
         
            +
                def self.validates_as_pr?(env)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  ["SEMAPHORE_REPO_SLUG", "PULL_REQUEST_NUMBER"].all? { |x| env[x] }
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
       14 
21 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
                def supported_request_sources
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @supported_request_sources ||= [Danger::RequestSources::GitHub]
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
       18 
25 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                def initialize(env)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  self.repo_slug = env["SEMAPHORE_REPO_SLUG"]
         
     | 
| 
      
 28 
     | 
    
         
            +
                  self.pull_request_id = env["PULL_REQUEST_NUMBER"]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  self.repo_url = GitRepo.new.origins # Semaphore doesn't provide a repo url env variable :/
         
     | 
| 
       24 
30 
     | 
    
         
             
                end
         
     | 
| 
       25 
31 
     | 
    
         
             
              end
         
     | 
| 
       26 
32 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,25 +1,36 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # http://github.com/surf-build/surf
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module Danger
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
              # ### CI Setup
         
     | 
| 
      
 5 
     | 
    
         
            +
              #
         
     | 
| 
      
 6 
     | 
    
         
            +
              # You want to add `bundle exec danger` to your `build.sh` file to run  Danger at the
         
     | 
| 
      
 7 
     | 
    
         
            +
              # end of your build.
         
     | 
| 
      
 8 
     | 
    
         
            +
              #
         
     | 
| 
      
 9 
     | 
    
         
            +
              # ### Token Setup
         
     | 
| 
      
 10 
     | 
    
         
            +
              #
         
     | 
| 
      
 11 
     | 
    
         
            +
              # As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative
         
     | 
| 
      
 12 
     | 
    
         
            +
              # is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`.
         
     | 
| 
      
 13 
     | 
    
         
            +
              #
         
     | 
| 
      
 14 
     | 
    
         
            +
              class Surf < CI
         
     | 
| 
      
 15 
     | 
    
         
            +
                def self.validates_as_ci?(env)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  return ["SURF_REPO", "SURF_NWO"].all? { |x| env[x] }
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
       10 
18 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
                def self.validates_as_pr?(_)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  true
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
       14 
22 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                      self.pull_request_id = env["SURF_PR_NUM"]
         
     | 
| 
       19 
     | 
    
         
            -
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                def supported_request_sources
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @supported_request_sources ||= [Danger::RequestSources::GitHub]
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
       20 
26 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
                def initialize(env)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  self.repo_slug = env["SURF_NWO"]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  if env["SURF_PR_NUM"].to_i > 0
         
     | 
| 
      
 30 
     | 
    
         
            +
                    self.pull_request_id = env["SURF_PR_NUM"]
         
     | 
| 
       22 
31 
     | 
    
         
             
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  self.repo_url = env["SURF_REPO"]
         
     | 
| 
       23 
34 
     | 
    
         
             
                end
         
     | 
| 
       24 
35 
     | 
    
         
             
              end
         
     | 
| 
       25 
36 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,23 +1,42 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Danger
         
     | 
| 
       2 
     | 
    
         
            -
               
     | 
| 
       3 
     | 
    
         
            -
                # https://www.jetbrains.com/teamcity/
         
     | 
| 
       4 
     | 
    
         
            -
                class TeamCity < CI
         
     | 
| 
       5 
     | 
    
         
            -
                  def self.validates?(env)
         
     | 
| 
       6 
     | 
    
         
            -
                    env.key? "TEAMCITY_VERSION"
         
     | 
| 
       7 
     | 
    
         
            -
                  end
         
     | 
| 
      
 2 
     | 
    
         
            +
              # https://www.jetbrains.com/teamcity/
         
     | 
| 
       8 
3 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
              ### CI Setup
         
     | 
| 
      
 5 
     | 
    
         
            +
              #
         
     | 
| 
      
 6 
     | 
    
         
            +
              # You need to go to your project settings. Then depending on the type of your build settings, you may need
         
     | 
| 
      
 7 
     | 
    
         
            +
              # to add a new build step for Danger. You want to be able to run the command `bundle exec danger`, so
         
     | 
| 
      
 8 
     | 
    
         
            +
              # the "Simple Command Runner" should be all you need to do that.
         
     | 
| 
      
 9 
     | 
    
         
            +
              #
         
     | 
| 
      
 10 
     | 
    
         
            +
              # ### Token + Environment Setup
         
     | 
| 
      
 11 
     | 
    
         
            +
              #
         
     | 
| 
      
 12 
     | 
    
         
            +
              # As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative
         
     | 
| 
      
 13 
     | 
    
         
            +
              # is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`.
         
     | 
| 
      
 14 
     | 
    
         
            +
              #
         
     | 
| 
      
 15 
     | 
    
         
            +
              # However, you will need to find a way to add the environment vars: `GITHUB_REPO_SLUG`, `GITHUB_PULL_REQUEST_ID` and
         
     | 
| 
      
 16 
     | 
    
         
            +
              # `GITHUB_REPO_URL`. These are not added by default. You could do this via the GitHub API potentially.
         
     | 
| 
      
 17 
     | 
    
         
            +
              #
         
     | 
| 
      
 18 
     | 
    
         
            +
              # We would love some advice on improving this setup.
         
     | 
| 
      
 19 
     | 
    
         
            +
              #
         
     | 
| 
      
 20 
     | 
    
         
            +
              class TeamCity < CI
         
     | 
| 
      
 21 
     | 
    
         
            +
                def self.validates_as_ci?(env)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  env.key? "TEAMCITY_VERSION"
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def self.validates_as_pr?(env)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  ["GITHUB_PULL_REQUEST_ID", "GITHUB_REPO_URL", "GITHUB_REPO_SLUG"].all? { |x| env[x] }
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                def supported_request_sources
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @supported_request_sources ||= [Danger::RequestSources::GitHub]
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
       12 
32 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                def initialize(env)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # NB: Unfortunately TeamCity doesn't provide these variables
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # automatically so you have to add these variables manually to your
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # project or build configuration
         
     | 
| 
      
 37 
     | 
    
         
            +
                  self.repo_slug       = env["GITHUB_REPO_SLUG"]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  self.pull_request_id = env["GITHUB_PULL_REQUEST_ID"].to_i
         
     | 
| 
      
 39 
     | 
    
         
            +
                  self.repo_url        = env["GITHUB_REPO_URL"]
         
     | 
| 
       21 
40 
     | 
    
         
             
                end
         
     | 
| 
       22 
41 
     | 
    
         
             
              end
         
     | 
| 
       23 
42 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,28 +2,49 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # http://docs.travis-ci.com/user/environment-variables/
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            module Danger
         
     | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
              ### CI Setup
         
     | 
| 
      
 6 
     | 
    
         
            +
              # You need to edit your `.travis.yml` to include `bundle exec danger`. If you already have
         
     | 
| 
      
 7 
     | 
    
         
            +
              # a `script:` section then we recommend adding this command at the end of the script step: `- bundle exec danger`.
         
     | 
| 
      
 8 
     | 
    
         
            +
              #
         
     | 
| 
      
 9 
     | 
    
         
            +
              #  Otherwise, add a `before_script` step to the root of the `.travis.yml` with `bundle exec danger`
         
     | 
| 
      
 10 
     | 
    
         
            +
              #
         
     | 
| 
      
 11 
     | 
    
         
            +
              #  ```ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
              #    before_script:
         
     | 
| 
      
 13 
     | 
    
         
            +
              #      - bundle exec danger
         
     | 
| 
      
 14 
     | 
    
         
            +
              #  ```
         
     | 
| 
      
 15 
     | 
    
         
            +
              #
         
     | 
| 
      
 16 
     | 
    
         
            +
              # Adding this to your `.travis.yml` allows Danger to fail your build, both on the TravisCI website and within your Pull Request.
         
     | 
| 
      
 17 
     | 
    
         
            +
              # With that set up, you can edit your job to add `bundle exec danger` at the build action.
         
     | 
| 
      
 18 
     | 
    
         
            +
              #
         
     | 
| 
      
 19 
     | 
    
         
            +
              # _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`.
         
     | 
| 
      
 20 
     | 
    
         
            +
              #
         
     | 
| 
      
 21 
     | 
    
         
            +
              # ### Token Setup
         
     | 
| 
      
 22 
     | 
    
         
            +
              #
         
     | 
| 
      
 23 
     | 
    
         
            +
              # You need to add the `DANGER_GITHUB_API_TOKEN` environment variable, to do this,
         
     | 
| 
      
 24 
     | 
    
         
            +
              # go to your repo's settings, which should look like: `https://travis-ci.org/[user]/[repo]/settings`.
         
     | 
| 
      
 25 
     | 
    
         
            +
              #
         
     | 
| 
      
 26 
     | 
    
         
            +
              # If you have an open source project, you should ensure "Display value in build log" enabled, so that PRs from forks work.
         
     | 
| 
      
 27 
     | 
    
         
            +
              #
         
     | 
| 
      
 28 
     | 
    
         
            +
              class Travis < CI
         
     | 
| 
      
 29 
     | 
    
         
            +
                def self.validates_as_ci?(env)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  env.key? "HAS_JOSH_K_SEAL_OF_APPROVAL"
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
       12 
32 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                   
     | 
| 
      
 33 
     | 
    
         
            +
                def self.validates_as_pr?(env)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  exists = ["TRAVIS_PULL_REQUEST", "TRAVIS_REPO_SLUG"].all? { |x| env[x] }
         
     | 
| 
      
 35 
     | 
    
         
            +
                  exists && env["TRAVIS_PULL_REQUEST"].to_i > 0
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
       15 
37 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 38 
     | 
    
         
            +
                def supported_request_sources
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @supported_request_sources ||= [Danger::RequestSources::GitHub]
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
       19 
41 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                    end
         
     | 
| 
       25 
     | 
    
         
            -
                    self.repo_url = GitRepo.new.origins # Travis doesn't provide a repo url env variable :/
         
     | 
| 
      
 42 
     | 
    
         
            +
                def initialize(env)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  self.repo_slug = env["TRAVIS_REPO_SLUG"]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  if env["TRAVIS_PULL_REQUEST"].to_i > 0
         
     | 
| 
      
 45 
     | 
    
         
            +
                    self.pull_request_id = env["TRAVIS_PULL_REQUEST"]
         
     | 
| 
       26 
46 
     | 
    
         
             
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  self.repo_url = GitRepo.new.origins # Travis doesn't provide a repo url env variable :/
         
     | 
| 
       27 
48 
     | 
    
         
             
                end
         
     | 
| 
       28 
49 
     | 
    
         
             
              end
         
     | 
| 
       29 
50 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,29 +1,42 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Following the advice from @czechboy0 https://github.com/danger/danger/issues/171
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module Danger
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
              # https://github.com/czechboy0/Buildasaur
         
     | 
| 
      
 5 
     | 
    
         
            +
              class XcodeServer < CI
         
     | 
| 
      
 6 
     | 
    
         
            +
                ### CI Setup
         
     | 
| 
      
 7 
     | 
    
         
            +
                #
         
     | 
| 
      
 8 
     | 
    
         
            +
                # If you're bold enough to use Xcode Bots. You will need to use [Buildasaur](https://github.com/czechboy0/Buildasaur)
         
     | 
| 
      
 9 
     | 
    
         
            +
                # in order to work with Danger. This will set up your build environment for you, as the name of the bot contains all
         
     | 
| 
      
 10 
     | 
    
         
            +
                # of the environment variables that Danger needs to work.
         
     | 
| 
      
 11 
     | 
    
         
            +
                #
         
     | 
| 
      
 12 
     | 
    
         
            +
                # With Buildasaur set up, you can edit your job to add `bundle exec danger` as a post-actoin build script.
         
     | 
| 
      
 13 
     | 
    
         
            +
                #
         
     | 
| 
      
 14 
     | 
    
         
            +
                # ### Token Setup
         
     | 
| 
      
 15 
     | 
    
         
            +
                #
         
     | 
| 
      
 16 
     | 
    
         
            +
                # As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative
         
     | 
| 
      
 17 
     | 
    
         
            +
                # is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`.`.
         
     | 
| 
      
 18 
     | 
    
         
            +
                #
         
     | 
| 
      
 19 
     | 
    
         
            +
                def self.validates_as_ci?(env)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  env.key? "XCS_BOT_NAME"
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
       9 
22 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                   
     | 
| 
      
 23 
     | 
    
         
            +
                def self.validates_as_pr?(env)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  env["XCS_BOT_NAME"].include? "BuildaBot"
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
       12 
26 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
                def supported_request_sources
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @supported_request_sources ||= [Danger::RequestSources::GitHub]
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
       16 
30 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
                def initialize(env)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  bot_name = env["XCS_BOT_NAME"]
         
     | 
| 
      
 33 
     | 
    
         
            +
                  return if bot_name.nil?
         
     | 
| 
       20 
34 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  repo_matches = bot_name.match(/\[(.+)\]/)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  self.repo_slug = repo_matches[1] unless repo_matches.nil?
         
     | 
| 
      
 37 
     | 
    
         
            +
                  pull_request_id_matches = bot_name.match(/#(\d+)/)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  self.pull_request_id = pull_request_id_matches[1] unless pull_request_id_matches.nil?
         
     | 
| 
      
 39 
     | 
    
         
            +
                  self.repo_url = GitRepo.new.origins # Xcode Server doesn't provide a repo url env variable :/
         
     | 
| 
       27 
40 
     | 
    
         
             
                end
         
     | 
| 
       28 
41 
     | 
    
         
             
              end
         
     | 
| 
       29 
42 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Danger
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Systems < Runner
         
     | 
| 
      
 3 
     | 
    
         
            +
                self.abstract_command = true
         
     | 
| 
      
 4 
     | 
    
         
            +
                self.description = "For commands related to passing information from Danger to Danger.Systems."
         
     | 
| 
      
 5 
     | 
    
         
            +
                self.summary = "Create data for Danger.Systems."
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              class CIDocs < Systems
         
     | 
| 
      
 9 
     | 
    
         
            +
                self.command = "ci_docs"
         
     | 
| 
      
 10 
     | 
    
         
            +
                self.summary = "Outputs the up-to-date CI documentation for Danger."
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def run
         
     | 
| 
      
 13 
     | 
    
         
            +
                  here = File.dirname(__FILE__)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  ci_source_paths = Dir.glob(here + "/../ci_source/*.rb")
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  require "yard"
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # Pull out all the Danger::CI subclasses docs
         
     | 
| 
      
 18 
     | 
    
         
            +
                  registry = YARD::Registry.load(ci_source_paths, true)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  ci_sources = registry.all(:class)
         
     | 
| 
      
 20 
     | 
    
         
            +
                                       .select { |klass| klass.inheritance_tree.map(&:name).include? :CI }
         
     | 
| 
      
 21 
     | 
    
         
            +
                                       .reject { |source| source.name == :CI }
         
     | 
| 
      
 22 
     | 
    
         
            +
                                       .reject { |source| source.name == :LocalGitRepo }
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  # Fail if anything is added and not documented
         
     | 
| 
      
 25 
     | 
    
         
            +
                  cis_without_docs = ci_sources.select { |source| source.base_docstring.empty? }
         
     | 
| 
      
 26 
     | 
    
         
            +
                  unless cis_without_docs.empty?
         
     | 
| 
      
 27 
     | 
    
         
            +
                    cork.puts "Please add docs to: #{cis_without_docs.map(&:name).join(', ')}"
         
     | 
| 
      
 28 
     | 
    
         
            +
                    abort("Failed.".red)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  # Output a JSON array of name and details
         
     | 
| 
      
 32 
     | 
    
         
            +
                  require "json"
         
     | 
| 
      
 33 
     | 
    
         
            +
                  cork.puts ci_sources.map { |ci|
         
     | 
| 
      
 34 
     | 
    
         
            +
                    {
         
     | 
| 
      
 35 
     | 
    
         
            +
                      name: ci.name,
         
     | 
| 
      
 36 
     | 
    
         
            +
                      docs: ci.docstring
         
     | 
| 
      
 37 
     | 
    
         
            +
                    }
         
     | 
| 
      
 38 
     | 
    
         
            +
                  }.to_json
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -5,31 +5,29 @@ module Danger 
     | 
|
| 
       5 
5 
     | 
    
         
             
              class EnvironmentManager
         
     | 
| 
       6 
6 
     | 
    
         
             
                attr_accessor :ci_source, :request_source, :scm
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                 
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                    self.ci_source = klass.new(env)
         
     | 
| 
       13 
     | 
    
         
            -
                    if self.ci_source.repo_slug and self.ci_source.pull_request_id
         
     | 
| 
       14 
     | 
    
         
            -
                      break
         
     | 
| 
       15 
     | 
    
         
            -
                    else
         
     | 
| 
       16 
     | 
    
         
            -
                      self.ci_source = nil
         
     | 
| 
       17 
     | 
    
         
            -
                      return nil
         
     | 
| 
       18 
     | 
    
         
            -
                    end
         
     | 
| 
       19 
     | 
    
         
            -
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
                # Finds a Danger::CI class based on the ENV
         
     | 
| 
      
 9 
     | 
    
         
            +
                def self.local_ci_source(env)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  CI.available_ci_sources.find { |ci| ci.validates_as_ci? env }
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
       20 
12 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
                # Uses the current Danger::CI subclass, and sees if it is a PR
         
     | 
| 
      
 14 
     | 
    
         
            +
                def self.pr?(env)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  local_ci_source(env).validates_as_pr?(env)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def initialize(env)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  ci_klass = self.class.local_ci_source(env)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  self.ci_source = ci_klass.new(env)
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
22 
     | 
    
         
             
                  RequestSources::RequestSource.available_request_sources.each do |klass|
         
     | 
| 
       24 
23 
     | 
    
         
             
                    next unless self.ci_source.supports?(klass)
         
     | 
| 
       25 
24 
     | 
    
         | 
| 
       26 
25 
     | 
    
         
             
                    request_source = klass.new(self.ci_source, ENV)
         
     | 
| 
       27 
     | 
    
         
            -
                    next unless request_source. 
     | 
| 
      
 26 
     | 
    
         
            +
                    next unless request_source.validates_as_ci?
         
     | 
| 
       28 
27 
     | 
    
         
             
                    self.request_source = request_source
         
     | 
| 
       29 
28 
     | 
    
         
             
                  end
         
     | 
| 
       30 
29 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                  raise "Could not find a Request Source".red unless self.request_source
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
                  raise "Could not find a Request Source for #{ci_klass}".red unless self.request_source
         
     | 
| 
       33 
31 
     | 
    
         
             
                  self.scm = self.request_source.scm
         
     | 
| 
       34 
32 
     | 
    
         
             
                end
         
     | 
| 
       35 
33 
     | 
    
         | 
| 
         @@ -10,37 +10,46 @@ module Danger 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                  cork ||= Cork::Board.new(silent: false,
         
     | 
| 
       12 
12 
     | 
    
         
             
                                          verbose: false)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  # Could we find a CI source at all?
         
     | 
| 
      
 15 
     | 
    
         
            +
                  unless EnvironmentManager.local_ci_source(ENV)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    abort("Could not find the type of CI for Danger to run on.".red) unless ci_klass
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  # Could we determine that the CI source is inside a PR?
         
     | 
| 
      
 20 
     | 
    
         
            +
                  unless EnvironmentManager.pr?(ENV)
         
     | 
| 
      
 21 
     | 
    
         
            +
                    cork.puts "Not a Pull Request - skipping `danger` run".yellow
         
     | 
| 
      
 22 
     | 
    
         
            +
                    return
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  # OK, then we can have some
         
     | 
| 
       13 
26 
     | 
    
         
             
                  env ||= EnvironmentManager.new(ENV)
         
     | 
| 
       14 
27 
     | 
    
         
             
                  dm ||= Dangerfile.new(env, cork)
         
     | 
| 
       15 
28 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
       17 
     | 
    
         
            -
                    dm.init_plugins
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                    dm.env.fill_environment_vars
         
     | 
| 
      
 29 
     | 
    
         
            +
                  dm.init_plugins
         
     | 
| 
       20 
30 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                      dm.env.ensure_danger_branches_are_setup
         
     | 
| 
      
 31 
     | 
    
         
            +
                  dm.env.fill_environment_vars
         
     | 
| 
       23 
32 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                      ci_head = head || EnvironmentManager.danger_head_branch
         
     | 
| 
       27 
     | 
    
         
            -
                      dm.env.scm.diff_for_folder(".", from: ci_base, to: ci_head)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 34 
     | 
    
         
            +
                    dm.env.ensure_danger_branches_are_setup
         
     | 
| 
       28 
35 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
                    # Offer the chance for a user to specify a branch through the command line
         
     | 
| 
      
 37 
     | 
    
         
            +
                    ci_base = base || EnvironmentManager.danger_base_branch
         
     | 
| 
      
 38 
     | 
    
         
            +
                    ci_head = head || EnvironmentManager.danger_head_branch
         
     | 
| 
      
 39 
     | 
    
         
            +
                    dm.env.scm.diff_for_folder(".", from: ci_base, to: ci_head)
         
     | 
| 
       30 
40 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                        url = dm.env.request_source.file_url(repository: danger_repo.name, path: "Dangerfile")
         
     | 
| 
       33 
     | 
    
         
            -
                        path = dm.plugin.download(url)
         
     | 
| 
       34 
     | 
    
         
            -
                        dm.parse(Pathname.new(path))
         
     | 
| 
       35 
     | 
    
         
            -
                      end
         
     | 
| 
      
 41 
     | 
    
         
            +
                    dm.parse(Pathname.new(dangerfile_path))
         
     | 
| 
       36 
42 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                      dm. 
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                      dm. 
     | 
| 
      
 43 
     | 
    
         
            +
                    if dm.env.request_source.organisation && !dm.env.request_source.danger_repo? && (danger_repo = dm.env.request_source.fetch_danger_repo)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      url = dm.env.request_source.file_url(repository: danger_repo.name, path: "Dangerfile")
         
     | 
| 
      
 45 
     | 
    
         
            +
                      path = dm.plugin.download(url)
         
     | 
| 
      
 46 
     | 
    
         
            +
                      dm.parse(Pathname.new(path))
         
     | 
| 
       41 
47 
     | 
    
         
             
                    end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                     
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    post_results(dm, danger_id)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    dm.print_results
         
     | 
| 
      
 51 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 52 
     | 
    
         
            +
                    dm.env.clean_up
         
     | 
| 
       44 
53 
     | 
    
         
             
                  end
         
     | 
| 
       45 
54 
     | 
    
         
             
                end
         
     | 
| 
       46 
55 
     | 
    
         |