danger 5.5.6 → 5.5.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 61383a6d5b7a7fc024301f2545a31d856434a864
4
- data.tar.gz: b61fe74b6a19b467bf8326375d4625b3571cbb18
3
+ metadata.gz: ac631daf8aaea436429afb68d8a534b84b03c9a9
4
+ data.tar.gz: aed843fe3d16f9e09fa1b1b0dbb300e0cb33f958
5
5
  SHA512:
6
- metadata.gz: 700d46d636e7713591e0eb913d402beaf52a1baf429c13dd20a4ffad4d243027fbe42a42294dcf45e85b0784c0c40657739743784c01c3c50ec677ad90ede9e8
7
- data.tar.gz: 16ae3a9a8bc609ee5c9a968e658852936318cb74e0aed4efed3846db6d3c87e69cf87841e732eaf272a10dfa88c591f462e043c4d13c884ae5e053335044423a
6
+ metadata.gz: d84b21f613d955ebac96ad8561126d53eb6caff28959909d10d9061e4204a470714500e98674375db4a4e405173a788e64113ef31a994429164ec5b00e979a79
7
+ data.tar.gz: d80f497254260a8d6cc65e61c92b7a9ac0cf7b660cb94e7e4b7d82791a02c010ff78bc36a4c5bf3ecc0c42a587641f49e238af265e672072dd8bba293cfa4e77
@@ -29,7 +29,11 @@ module Danger
29
29
  end
30
30
 
31
31
  def supported_request_sources
32
- @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab]
32
+ @supported_request_sources ||= [
33
+ Danger::RequestSources::GitHub,
34
+ Danger::RequestSources::GitLab,
35
+ Danger::RequestSources::BitbucketServer
36
+ ]
33
37
  end
34
38
 
35
39
  def initialize(env)
@@ -38,6 +38,32 @@ module Danger
38
38
  #
39
39
  # We would love some advice on improving this setup.
40
40
  #
41
+ # #### BitBucket Cloud
42
+ #
43
+ # You will need to add the following environment variables as build parameters or by exporting them inside your
44
+ # Simple Command Runner.
45
+ # - `DANGER_BITBUCKETCLOUD_USERNAME`
46
+ # - `DANGER_BITBUCKETCLOUD_PASSWORD`
47
+ # - `BITBUCKET_REPO_SLUG`
48
+ # - `BITBUCKET_REPO_URL`
49
+ #
50
+ # You will also need to set the `BITBUCKET_BRANCH_NAME` environment variable.
51
+ # TeamCity provides `%teamcity.build.branch%`, which you can use at the top of your Simple Command Runner:
52
+ # ```sh
53
+ # export BITBUCKET_BRANCH_NAME="%teamcity.build.branch%"
54
+ # ```
55
+ #
56
+ # #### BitBucket Server
57
+ #
58
+ # You will need to add the following environment variables as build parameters or by exporting them inside your
59
+ # Simple Command Runner.
60
+ # - `DANGER_BITBUCKETSERVER_USERNAME`
61
+ # - `DANGER_BITBUCKETSERVER_PASSWORD`
62
+ # - `DANGER_BITBUCKETSERVER_HOST`
63
+ # - `BITBUCKETSERVER_REPO_SLUG`
64
+ # - `BITBUCKETSERVER_PULL_REQUEST_ID`
65
+ # - `BITBUCKETSERVER_REPO_URL`
66
+ #
41
67
  class TeamCity < CI
42
68
  class << self
43
69
  def validates_as_github_pr?(env)
@@ -47,6 +73,14 @@ module Danger
47
73
  def validates_as_gitlab_pr?(env)
48
74
  ["GITLAB_REPO_SLUG", "GITLAB_PULL_REQUEST_ID", "GITLAB_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
49
75
  end
76
+
77
+ def validates_as_bitbucket_cloud_pr?(env)
78
+ ["BITBUCKET_REPO_SLUG", "BITBUCKET_BRANCH_NAME", "BITBUCKET_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
79
+ end
80
+
81
+ def validates_as_bitbucket_server_pr?(env)
82
+ ["BITBUCKETSERVER_REPO_SLUG", "BITBUCKETSERVER_PULL_REQUEST_ID", "BITBUCKETSERVER_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
83
+ end
50
84
  end
51
85
 
52
86
  def self.validates_as_ci?(env)
@@ -54,22 +88,25 @@ module Danger
54
88
  end
55
89
 
56
90
  def self.validates_as_pr?(env)
57
- validates_as_github_pr?(env) || validates_as_gitlab_pr?(env)
91
+ validates_as_github_pr?(env) || validates_as_gitlab_pr?(env) || validates_as_bitbucket_cloud_pr?(env) || validates_as_bitbucket_server_pr?(env)
58
92
  end
59
93
 
60
94
  def supported_request_sources
61
- @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab]
95
+ @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketCloud, Danger::RequestSources::BitbucketServer]
62
96
  end
63
97
 
64
98
  def initialize(env)
65
99
  # NB: Unfortunately TeamCity doesn't provide these variables
66
100
  # automatically so you have to add these variables manually to your
67
101
  # project or build configuration
68
-
69
102
  if self.class.validates_as_github_pr?(env)
70
103
  extract_github_variables!(env)
71
104
  elsif self.class.validates_as_gitlab_pr?(env)
72
105
  extract_gitlab_variables!(env)
106
+ elsif self.class.validates_as_bitbucket_cloud_pr?(env)
107
+ extract_bitbucket_variables!(env)
108
+ elsif self.class.validates_as_bitbucket_server_pr?(env)
109
+ extract_bitbucket_server_variables!(env)
73
110
  end
74
111
  end
75
112
 
@@ -86,5 +123,28 @@ module Danger
86
123
  self.pull_request_id = env["GITLAB_PULL_REQUEST_ID"].to_i
87
124
  self.repo_url = env["GITLAB_REPO_URL"]
88
125
  end
126
+
127
+ def extract_bitbucket_variables!(env)
128
+ self.repo_slug = env["BITBUCKET_REPO_SLUG"]
129
+ self.pull_request_id = bitbucket_pr_from_env(env)
130
+ self.repo_url = env["BITBUCKET_REPO_URL"]
131
+ end
132
+
133
+ def extract_bitbucket_server_variables!(env)
134
+ self.repo_slug = env["BITBUCKETSERVER_REPO_SLUG"]
135
+ self.pull_request_id = env["BITBUCKETSERVER_PULL_REQUEST_ID"].to_i
136
+ self.repo_url = env["BITBUCKETSERVER_REPO_URL"]
137
+ end
138
+
139
+ # This is a little hacky, because Bitbucket doesn't provide us a PR id
140
+ def bitbucket_pr_from_env(env)
141
+ branch_name = env["BITBUCKET_BRANCH_NAME"]
142
+ repo_slug = env["BITBUCKET_REPO_SLUG"]
143
+ begin
144
+ Danger::RequestSources::BitbucketCloudAPI.new(repo_slug, nil, branch_name, env).pull_request_id
145
+ rescue
146
+ raise "Failed to find a pull request for branch \"#{branch_name}\" on Bitbucket."
147
+ end
148
+ end
89
149
  end
90
150
  end
@@ -223,7 +223,7 @@ module Danger
223
223
  else
224
224
  formatted
225
225
  end
226
- rows = violations[key]
226
+ rows = violations[key].uniq
227
227
  print_list(title, rows)
228
228
  end
229
229
 
@@ -246,10 +246,10 @@ module Danger
246
246
  violations = violation_report
247
247
 
248
248
  env.request_source.update_pull_request!(
249
- warnings: violations[:warnings],
250
- errors: violations[:errors],
251
- messages: violations[:messages],
252
- markdowns: status_report[:markdowns],
249
+ warnings: violations[:warnings].uniq,
250
+ errors: violations[:errors].uniq,
251
+ messages: violations[:messages].uniq,
252
+ markdowns: status_report[:markdowns].uniq,
253
253
  danger_id: danger_id,
254
254
  new_comment: new_comment
255
255
  )
@@ -17,6 +17,18 @@ module Danger
17
17
  other.line == line
18
18
  end
19
19
 
20
+ def hash
21
+ h = 1
22
+ h = h * 31 + message.hash
23
+ h = h * 17 + file.hash
24
+ h = h * 17 + line.hash
25
+ h
26
+ end
27
+
28
+ def eql?(other)
29
+ return self == other
30
+ end
31
+
20
32
  # @return [Boolean] returns true if is a file or line, false otherwise
21
33
  def inline?
22
34
  file || line
@@ -19,6 +19,19 @@ module Danger
19
19
  other.line == line
20
20
  end
21
21
 
22
+ def hash
23
+ h = 1
24
+ h = h * 31 + message.hash
25
+ h = h * 13 + sticky.hash
26
+ h = h * 17 + file.hash
27
+ h = h * 17 + line.hash
28
+ h
29
+ end
30
+
31
+ def eql?(other)
32
+ return self == other
33
+ end
34
+
22
35
  # @return [Boolean] returns true if is a file or line, false otherwise
23
36
  def inline?
24
37
  file || line
@@ -20,8 +20,7 @@ module Danger
20
20
  self.ci_source = ci_source
21
21
  self.environment = environment
22
22
 
23
- project, slug = ci_source.repo_slug.split("/")
24
- @api = BitbucketCloudAPI.new(project, slug, ci_source.pull_request_id, environment)
23
+ @api = BitbucketCloudAPI.new(ci_source.repo_slug, ci_source.pull_request_id, nil, environment)
25
24
  end
26
25
 
27
26
  def validates_as_ci?
@@ -5,13 +5,13 @@ require "danger/helpers/comments_helper"
5
5
  module Danger
6
6
  module RequestSources
7
7
  class BitbucketCloudAPI
8
- attr_accessor :host, :pr_api_endpoint, :pr_api_endpoint_v1
8
+ attr_accessor :project, :slug, :pull_request_id
9
9
 
10
- def initialize(project, slug, pull_request_id, environment)
10
+ def initialize(repo_slug, pull_request_id, branch_name, environment)
11
11
  @username = environment["DANGER_BITBUCKETCLOUD_USERNAME"]
12
12
  @password = environment["DANGER_BITBUCKETCLOUD_PASSWORD"]
13
- self.pr_api_endpoint = "https://api.bitbucket.org/2.0/repositories/#{project}/#{slug}/pullrequests/#{pull_request_id}"
14
- self.pr_api_endpoint_v1 = "https://api.bitbucket.org/1.0/repositories/#{project}/#{slug}/pullrequests/#{pull_request_id}"
13
+ self.project, self.slug = repo_slug.split("/")
14
+ self.pull_request_id = pull_request_id || fetch_pr_from_branch(branch_name)
15
15
  end
16
16
 
17
17
  def inspect
@@ -51,6 +51,27 @@ module Danger
51
51
 
52
52
  private
53
53
 
54
+ def base_url(version)
55
+ "https://api.bitbucket.org/#{version}.0/repositories/#{project}/#{slug}/pullrequests"
56
+ end
57
+
58
+ def pr_api_endpoint
59
+ "#{base_url(2)}/#{pull_request_id}"
60
+ end
61
+
62
+ def pr_api_endpoint_v1
63
+ "#{base_url(1)}/#{pull_request_id}"
64
+ end
65
+
66
+ def prs_api_endpoint(branch_name)
67
+ "#{base_url(2)}?q=source.branch.name=\"#{branch_name}\""
68
+ end
69
+
70
+ def fetch_pr_from_branch(branch_name)
71
+ uri = URI(URI.escape(prs_api_endpoint(branch_name)))
72
+ fetch_json(uri)[:values][0][:id]
73
+ end
74
+
54
75
  def fetch_json(uri)
55
76
  req = Net::HTTP::Get.new(uri.request_uri, { "Content-Type" => "application/json" })
56
77
  req.basic_auth @username, @password
@@ -49,8 +49,12 @@ module Danger
49
49
  def setup_danger_branches
50
50
  base_branch = self.pr_json[:toRef][:id].sub("refs/heads/", "")
51
51
  base_commit = self.pr_json[:toRef][:latestCommit]
52
+ # Support for older versions of Bitbucket Server
53
+ base_commit = self.pr_json[:toRef][:latestChangeset] if self.pr_json[:fromRef].key? :latestChangeset
52
54
  head_branch = self.pr_json[:fromRef][:id].sub("refs/heads/", "")
53
55
  head_commit = self.pr_json[:fromRef][:latestCommit]
56
+ # Support for older versions of Bitbucket Server
57
+ head_commit = self.pr_json[:fromRef][:latestChangeset] if self.pr_json[:fromRef].key? :latestChangeset
54
58
 
55
59
  # Next, we want to ensure that we have a version of the current branch at a known location
56
60
  scm.ensure_commitish_exists_on_branch! base_branch, base_commit
@@ -1,4 +1,4 @@
1
1
  module Danger
2
- VERSION = "5.5.6".freeze
2
+ VERSION = "5.5.7".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.6
4
+ version: 5.5.7
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: 2017-12-31 00:00:00.000000000 Z
12
+ date: 2018-01-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: claide
@@ -487,7 +487,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
487
487
  version: '0'
488
488
  requirements: []
489
489
  rubyforge_project:
490
- rubygems_version: 2.5.1
490
+ rubygems_version: 2.6.14
491
491
  signing_key:
492
492
  specification_version: 4
493
493
  summary: Like Unit Tests, but for your Team Culture.