danger 5.5.13 → 5.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86f276d8c5867f3bd9af4a43eeeed767d3da5cb4
4
- data.tar.gz: ccd5d8970c95b39c7a9e4c7ff7ce8d5495119907
3
+ metadata.gz: 9973389d96fb5038948aadcc696a845877b934df
4
+ data.tar.gz: 23a75796bf999b53a9fb9cd75ab76cb0a22168b9
5
5
  SHA512:
6
- metadata.gz: 80a6e781e5efc2548051efaeab5abab55986988666164005eba62f1caaa9619f469e2a1f7c9fc1fd11dcdeb06ce37831a4690d59a006771bb08f28492826fbc2
7
- data.tar.gz: a669e6fecbe9beebe411036680df637b1be46ad9a52c737bfd58042773f425cd60e6d643fc46aef199769d590dff0879aa885094dfc4fdf6e4edfbe27354ccdd
6
+ metadata.gz: 6c5986ae5c49a22d58f641e70c28db3705a38aa8c63ce8cf0cbccca87098bce89c2546144ef5431cf356f5ff5054a9cea5c91893c52767b816607e4885f95689
7
+ data.tar.gz: fe1764de97f55c1cd740bbdac32517795835de5bc19265b2eb18e58c37d215cd133bee754e2aee55afa8e0f0c3dfe6a26e6212d134f40423e4d21f72aff7dc1d
@@ -6,29 +6,36 @@ require "danger/request_sources/github/github"
6
6
  module Danger
7
7
  # ### CI Setup
8
8
  #
9
- # For setting up Circle CI, we recommend turning on "Only Build pull requests." in "Advanced Setting." Without this enabled,
10
- # it is _really_ tricky for Danger to know whether you are in a pull request or not, as the environment metadata
11
- # isn't reliable.
9
+ # For setting up CircleCI, we recommend turning on "Only build pull requests" in "Advanced Settings." Without this enabled,
10
+ # it's trickier for Danger to determine whether you're in a pull request or not, as the environment metadata
11
+ # isn't as reliable.
12
12
  #
13
- # With that set up, you can you add `bundle exec danger` to your `circle.yml`. If you override the default
14
- # `test:` section, then add it as an extra step. Otherwise add a new `pre` section to the test:
13
+ # A common scenario is when CircleCI begins building a commit before the commit becomes associated with a PR
14
+ # (e.g. a developer pushes their branch to the remote repo for the first time. CircleCI spins up and begins building.
15
+ # Moments later the developer creates a PR on GitHub. Since the build process started before the PR existed,
16
+ # Danger won't be able to use the Circle-provided environment variables to retrieve PR metadata.)
15
17
  #
16
- # ``` ruby
17
- # test:
18
- # override:
19
- # - bundle exec danger
18
+ # With "Only build pull requests" enabled, you can add `bundle exec danger` to your `config.yml` (Circle 2.0).
19
+ #
20
+ # e.g.
21
+ #
22
+ # ``` yaml
23
+ # - run: bundle exec danger --verbose
20
24
  # ```
21
25
  #
26
+ # And that should be it!
27
+ #
22
28
  # ### Token Setup
23
29
  #
24
- # There is no difference here for OSS vs Closed, add your `DANGER_GITHUB_API_TOKEN` to the Environment variable settings page.
30
+ # If "Only build pull requests" can't be enabled for your project, Danger _can_ still work by relying on CircleCI's API
31
+ # to retrieve PR metadata, which will require an API token.
32
+ #
33
+ # 1. Go to your project > Settings > API Permissions. Create a token with scope "view-builds" and a label like "DANGER_CIRCLE_CI_API_TOKEN".
34
+ # 2. Settings > Environement Variables. Add the token as a CircleCI environment variable, which exposes it to the Danger process.
25
35
  #
26
- # ### I still want to run commit builds
36
+ # There is no difference here for OSS vs Closed, both scenarios will need this environment variable.
27
37
  #
28
- # OK, alright. So, if you add a `DANGER_CIRCLE_CI_API_TOKEN` then Danger will use the Circle API to look up
29
- # the status of whether a commit is inside a PR or not. You can generate a token from inside the project set_trace_func
30
- # then go to Permissions > "API Permissions" and generate a token with access to Status. Take that token and add
31
- # it to Build Settings > "Environment Variables".
38
+ # With these pieces in place, Danger should be able to work as expected.
32
39
  #
33
40
  class CircleCI < CI
34
41
  # Side note: CircleCI is complicated. The env vars for PRs are not guaranteed to exist
@@ -45,7 +52,7 @@ module Danger
45
52
  return true if env["CIRCLE_PULL_REQUEST"] && !env["CIRCLE_PULL_REQUEST"].empty?
46
53
 
47
54
  # Real-world talk, it should be worrying if none of these are in the environment
48
- return false unless ["CIRCLE_CI_API_TOKEN", "CIRCLE_PROJECT_USERNAME", "CIRCLE_PROJECT_REPONAME", "CIRCLE_BUILD_NUM"].all? { |x| env[x] && !env[x].empty? }
55
+ return false unless ["DANGER_CIRCLE_CI_API_TOKEN", "CIRCLE_PROJECT_USERNAME", "CIRCLE_PROJECT_REPONAME", "CIRCLE_BUILD_NUM"].all? { |x| env[x] && !env[x].empty? }
49
56
 
50
57
  # Uses the Circle API to determine if it's a PR otherwise
51
58
  api = CircleAPI.new
@@ -16,7 +16,7 @@ module Danger
16
16
 
17
17
  if url.nil? && !env["CIRCLE_PROJECT_USERNAME"].nil? && !env["CIRCLE_PROJECT_REPONAME"].nil?
18
18
  repo_slug = env["CIRCLE_PROJECT_USERNAME"] + "/" + env["CIRCLE_PROJECT_REPONAME"]
19
- token = env["DANGER_CIRCLE_CI_API_TOKEN"] || env["CIRCLE_CI_API_TOKEN"]
19
+ token = env["DANGER_CIRCLE_CI_API_TOKEN"]
20
20
  url = fetch_pull_request_url(repo_slug, env["CIRCLE_BUILD_NUM"], token)
21
21
  end
22
22
  url
@@ -29,7 +29,9 @@ module Danger
29
29
  # Ask the API if the commit is inside a PR
30
30
  def fetch_pull_request_url(repo_slug, build_number, token)
31
31
  build_json = fetch_build(repo_slug, build_number, token)
32
- build_json[:pull_request_urls].first
32
+ pull_requests = build_json[:pull_requests]
33
+ return nil unless pull_requests.first
34
+ pull_requests.first[:url]
33
35
  end
34
36
 
35
37
  # Make the API call, and parse the JSON
@@ -0,0 +1,47 @@
1
+ # http://screwdriver.cd
2
+ # https://docs.screwdriver.cd/user-guide/environment-variables
3
+ require "danger/request_sources/github/github"
4
+
5
+ module Danger
6
+ # ### CI Setup
7
+ #
8
+ # Install dependencies and add a danger step to your screwdriver.yaml:
9
+ # ``` yml
10
+ # jobs:
11
+ # danger:
12
+ # requires: [~pr, ~commit]
13
+ # steps:
14
+ # - setup: bundle install --path vendor
15
+ # - danger: bundle exec danger
16
+ # secrets:
17
+ # - DANGER_GITHUB_API_TOKEN
18
+ # ```
19
+ #
20
+ # ### Token Setup
21
+ #
22
+ # Add the `DANGER_GITHUB_API_TOKEN` to your pipeline env as a
23
+ # [build secret](https://docs.screwdriver.cd/user-guide/configuration/secrets)
24
+ #
25
+ class Screwdriver < CI
26
+ def self.validates_as_ci?(env)
27
+ env.key? "SCREWDRIVER"
28
+ end
29
+
30
+ def self.validates_as_pr?(env)
31
+ exists = ["SD_PULL_REQUEST", "SCM_URL"].all? { |x| env[x] && !env[x].empty? }
32
+ exists && env["SD_PULL_REQUEST"].to_i > 0
33
+ end
34
+
35
+ def supported_request_sources
36
+ @supported_request_sources ||= [Danger::RequestSources::GitHub]
37
+ end
38
+
39
+ def initialize(env)
40
+ self.repo_slug = env["SCM_URL"].split(":").last.gsub(".git", "")
41
+ self.repo_url = env["SCM_URL"]
42
+ if env["SD_PULL_REQUEST"].to_i > 0
43
+ self.pull_request_id = env["SD_PULL_REQUEST"]
44
+ end
45
+ end
46
+ end
47
+ end
@@ -107,7 +107,7 @@ module Danger
107
107
  # @!group Core
108
108
  # Print out a generate message on the PR
109
109
  #
110
- # @param [String, Array<String> message
110
+ # @param [String, Array<String>] message
111
111
  # The message to present to the user
112
112
  # @param [Boolean] sticky
113
113
  # Whether the message should be kept after it was fixed,
@@ -124,14 +124,14 @@ module Danger
124
124
  line = options.fetch(:line, nil)
125
125
 
126
126
  messages.flatten.each do |message|
127
- @messages << Violation.new(message, sticky, file, line)
127
+ @messages << Violation.new(message, sticky, file, line) if message
128
128
  end
129
129
  end
130
130
 
131
131
  # @!group Core
132
132
  # Specifies a problem, but not critical
133
133
  #
134
- # @param [String, Array<String> message
134
+ # @param [String, Array<String>] message
135
135
  # The message to present to the user
136
136
  # @param [Boolean] sticky
137
137
  # Whether the message should be kept after it was fixed,
@@ -149,14 +149,14 @@ module Danger
149
149
 
150
150
  warnings.flatten.each do |warning|
151
151
  next if should_ignore_violation(warning)
152
- @warnings << Violation.new(warning, sticky, file, line)
152
+ @warnings << Violation.new(warning, sticky, file, line) if warning
153
153
  end
154
154
  end
155
155
 
156
156
  # @!group Core
157
157
  # Declares a CI blocking error
158
158
  #
159
- # @param [String, Array<String> message
159
+ # @param [String, Array<String>] message
160
160
  # The message to present to the user
161
161
  # @param [Boolean] sticky
162
162
  # Whether the message should be kept after it was fixed,
@@ -174,7 +174,7 @@ module Danger
174
174
 
175
175
  failures.flatten.each do |failure|
176
176
  next if should_ignore_violation(failure)
177
- @errors << Violation.new(failure, sticky, file, line)
177
+ @errors << Violation.new(failure, sticky, file, line) if failure
178
178
  end
179
179
  end
180
180
 
@@ -1,4 +1,4 @@
1
1
  module Danger
2
- VERSION = "5.5.13".freeze
2
+ VERSION = "5.6.0".freeze
3
3
  DESCRIPTION = "Like Unit Tests, but for your Team Culture.".freeze
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.13
4
+ version: 5.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Orta Therox
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-04-29 00:00:00.000000000 Z
12
+ date: 2018-05-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: claide
@@ -191,6 +191,7 @@ files:
191
191
  - lib/danger/ci_source/gitlab_ci.rb
192
192
  - lib/danger/ci_source/jenkins.rb
193
193
  - lib/danger/ci_source/local_git_repo.rb
194
+ - lib/danger/ci_source/screwdriver.rb
194
195
  - lib/danger/ci_source/semaphore.rb
195
196
  - lib/danger/ci_source/support/commits.rb
196
197
  - lib/danger/ci_source/support/find_repo_info_from_logs.rb
@@ -291,7 +292,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
292
  version: '0'
292
293
  requirements: []
293
294
  rubyforge_project:
294
- rubygems_version: 2.5.1
295
+ rubygems_version: 2.6.14
295
296
  signing_key:
296
297
  specification_version: 4
297
298
  summary: Like Unit Tests, but for your Team Culture.