danger 3.2.2 → 3.3.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: fc585b3a42ead8015e789fab0a20800043436033
4
- data.tar.gz: 5568de8b9b97cdf2296ff8ef386286a4dc03096d
3
+ metadata.gz: 7e10fb247dbfbbf65bddac255ef51fbde2886ec7
4
+ data.tar.gz: 26e8a81ba580a77b844ee956875974dc52605e41
5
5
  SHA512:
6
- metadata.gz: c955e1a1a81c272e25e6abdb5b3d8e51630f2f2850ef4c696acda0e5348f37211ced89910af612a592fab1c492c4ddc6bb3ccc9c0d704a49c23330ee0d628528
7
- data.tar.gz: 8d88d1ad781ff5705e44d3f8780191786ccbb19012fc845c062c58b3412bf6a504f2c11b73a4a8052ab43d4a243e85920deba3c76564a561009cf98d3f385c6f
6
+ metadata.gz: 5af8334759ab6fd99078bdc24b25723f21266fc2a3ef603c66ea0940576f7b2228740aead12e1d6198afce6ce1ce46fb2f074d4b111d615f693bb29bb4eda08a
7
+ data.tar.gz: a9248512d06c5c37cbcf45f2d29ebb8ff02f325e8609c540b9eb05629fb0a01ac81fce622a198a7b13fc76fe3f04c1d879312f915a7480f44bf6b91db94c737b
@@ -38,7 +38,7 @@ module Danger
38
38
  end
39
39
 
40
40
  def supported_request_sources
41
- @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketServer]
41
+ @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketServer, Danger::RequestSources::BitbucketCloud]
42
42
  end
43
43
 
44
44
  def initialize(env)
@@ -1,17 +1,15 @@
1
1
  class String
2
- def danger_class
3
- split("_").collect!(&:capitalize).join
4
- end
5
-
2
+ # @return [String] the plural form of self determined by count
6
3
  def danger_pluralize(count)
7
4
  "#{count} #{self}#{'s' unless count == 1}"
8
5
  end
9
6
 
7
+ # @return [String] converts to underscored, lowercase form
10
8
  def danger_underscore
11
- self.gsub(/::/, "/").
12
- gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
13
- gsub(/([a-z\d])([A-Z])/, '\1_\2').
14
- tr("-", "_").
9
+ self.gsub(/::/, "/".freeze).
10
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2'.freeze).
11
+ gsub(/([a-z\d])([A-Z])/, '\1_\2'.freeze).
12
+ tr("-".freeze, "_".freeze).
15
13
  downcase
16
14
  end
17
15
  end
@@ -9,6 +9,7 @@ require "danger/danger_core/plugins/dangerfile_git_plugin"
9
9
  require "danger/danger_core/plugins/dangerfile_github_plugin"
10
10
  require "danger/danger_core/plugins/dangerfile_gitlab_plugin"
11
11
  require "danger/danger_core/plugins/dangerfile_bitbucket_server_plugin"
12
+ require "danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin"
12
13
 
13
14
  module Danger
14
15
  class Dangerfile
@@ -36,7 +37,7 @@ module Danger
36
37
 
37
38
  # The ones that everything would break without
38
39
  def self.essential_plugin_classes
39
- [DangerfileMessagingPlugin, DangerfileGitPlugin, DangerfileDangerPlugin, DangerfileGitHubPlugin, DangerfileGitLabPlugin, DangerfileBitbucketServerPlugin]
40
+ [DangerfileMessagingPlugin, DangerfileGitPlugin, DangerfileDangerPlugin, DangerfileGitHubPlugin, DangerfileGitLabPlugin, DangerfileBitbucketServerPlugin, DangerfileBitbucketCloudPlugin]
40
41
  end
41
42
 
42
43
  # Both of these methods exist on all objects
@@ -2,7 +2,7 @@ module Danger
2
2
  class Markdown
3
3
  attr_accessor :message, :file, :line
4
4
 
5
- def initialize(message, file, line)
5
+ def initialize(message, file = nil, line = nil)
6
6
  self.message = message
7
7
  self.file = file
8
8
  self.line = line
@@ -17,16 +17,17 @@ module Danger
17
17
  other.line == line
18
18
  end
19
19
 
20
+ # @return [Boolean] returns true if is a file or line, false otherwise
20
21
  def inline?
21
- return (file.nil? && line.nil?) == false
22
+ file || line
22
23
  end
23
24
 
24
25
  def to_s
25
26
  extra = []
26
- extra << "file: #{file}" unless file.nil?
27
- extra << "line: #{line}" unless line.nil?
27
+ extra << "file: #{file}" unless file
28
+ extra << "line: #{line}" unless line
28
29
 
29
- "Markdown #{message} { #{extra.join ', '} }"
30
+ "Markdown #{message} { #{extra.join ', '.freeze} }"
30
31
  end
31
32
  end
32
33
  end
@@ -2,7 +2,7 @@ module Danger
2
2
  class Violation
3
3
  attr_accessor :message, :sticky, :file, :line
4
4
 
5
- def initialize(message, sticky, file, line)
5
+ def initialize(message, sticky, file = nil, line = nil)
6
6
  self.message = message
7
7
  self.sticky = sticky
8
8
  self.file = file
@@ -19,17 +19,18 @@ module Danger
19
19
  other.line == line
20
20
  end
21
21
 
22
+ # @return [Boolean] returns true if is a file or line, false otherwise
22
23
  def inline?
23
- return (file.nil? && line.nil?) == false
24
+ file || line
24
25
  end
25
26
 
26
27
  def to_s
27
28
  extra = []
28
29
  extra << "sticky: true" if sticky
29
- extra << "file: #{file}" unless file.nil?
30
- extra << "line: #{line}" unless line.nil?
30
+ extra << "file: #{file}" unless file
31
+ extra << "line: #{line}" unless line
31
32
 
32
- "Violation #{message} { #{extra.join ', '} }"
33
+ "Violation #{message} { #{extra.join ', '.freeze} }"
33
34
  end
34
35
  end
35
36
  end
@@ -0,0 +1,198 @@
1
+ # coding: utf-8
2
+ require "danger/plugin_support/plugin"
3
+
4
+ module Danger
5
+ # Handles interacting with Bitbucket Cloud inside a Dangerfile. Provides a few functions which wrap `pr_json` and also
6
+ # through a few standard functions to simplify your code.
7
+ #
8
+ # @example Warn when a PR is classed as work in progress
9
+ #
10
+ # warn "PR is classed as Work in Progress" if bitbucket_cloud.pr_title.include? "[WIP]"
11
+ #
12
+ # @example Declare a PR to be simple to avoid specific Danger rules
13
+ #
14
+ # declared_trivial = (bitbucket_cloud.pr_title + bitbucket_cloud.pr_body).include?("#trivial")
15
+ #
16
+ # @example Ensure that labels have been used on the PR
17
+ #
18
+ # fail "Please add labels to this PR" if bitbucket_cloud.pr_labels.empty?
19
+ #
20
+ # @example Ensure there is a summary for a PR
21
+ #
22
+ # fail "Please provide a summary in the Pull Request description" if bitbucket_cloud.pr_body.length < 5
23
+ #
24
+ # @example Only accept PRs to the develop branch
25
+ #
26
+ # fail "Please re-submit this PR to develop, we may have already fixed your issue." if bitbucket_cloud.branch_for_base != "develop"
27
+ #
28
+ # @example Highlight when a celebrity makes a pull request
29
+ #
30
+ # message "Welcome, Danger." if bitbucket_cloud.pr_author == "dangermcshane"
31
+ #
32
+ # @example Ensure that all PRs have an assignee
33
+ #
34
+ # warn "This PR does not have any assignees yet." unless bitbucket_cloud.pr_json["reviewers"].length == 0
35
+ #
36
+ # @example Send a message with links to a collection of specific files
37
+ #
38
+ # if git.modified_files.include? "config/*.js"
39
+ # config_files = git.modified_files.select { |path| path.include? "config/" }
40
+ # message "This PR changes #{ bitbucket_cloud.html_link(config_files) }"
41
+ # end
42
+ #
43
+ # @example Highlight with a clickable link if a Package.json is changed
44
+ #
45
+ # warn "#{bitbucket_cloud.html_link("Package.json")} was edited." if git.modified_files.include? "Package.json"
46
+ #
47
+ # @see danger/danger
48
+ # @tags core, bitbucket_cloud
49
+ #
50
+ class DangerfileBitbucketCloudPlugin < Plugin
51
+ # So that this init can fail.
52
+ def self.new(dangerfile)
53
+ return nil if dangerfile.env.request_source.class != Danger::RequestSources::BitbucketCloud
54
+ super
55
+ end
56
+
57
+ # The instance name used in the Dangerfile
58
+ # @return [String]
59
+ #
60
+ def self.instance_name
61
+ "bitbucket_cloud"
62
+ end
63
+
64
+ def initialize(dangerfile)
65
+ super(dangerfile)
66
+ @bs = dangerfile.env.request_source
67
+ end
68
+
69
+ # @!group Bitbucket Cloud Misc
70
+ # The hash that represents the PR's JSON. For an example of what this looks like
71
+ # see the [Danger Fixture'd one](https://raw.githubusercontent.com/danger/danger/master/spec/fixtures/bitbucket_cloud_api/pr_response.json).
72
+ # @return [Hash]
73
+ def pr_json
74
+ @bs.pr_json
75
+ end
76
+
77
+ # @!group PR Metadata
78
+ # The title of the Pull Request.
79
+ # @return [String]
80
+ #
81
+ def pr_title
82
+ @bs.pr_json[:title].to_s
83
+ end
84
+
85
+ # @!group PR Metadata
86
+ # The body text of the Pull Request.
87
+ # @return [String]
88
+ #
89
+ def pr_description
90
+ @bs.pr_json[:description].to_s
91
+ end
92
+ alias pr_body pr_description
93
+
94
+ # @!group PR Metadata
95
+ # The username of the author of the Pull Request.
96
+ # @return [String]
97
+ #
98
+ def pr_author
99
+ @bs.pr_json[:author][:user][:slug].to_s
100
+ end
101
+
102
+ # @!group PR Commit Metadata
103
+ # The branch to which the PR is going to be merged into.
104
+ # @return [String]
105
+ #
106
+ def branch_for_base
107
+ @bs.pr_json[:toRef][:displayId].to_s
108
+ end
109
+
110
+ # @!group PR Commit Metadata
111
+ # A href that represents the current PR
112
+ # @return [String]
113
+ #
114
+ def pr_link
115
+ @bs.pr_json[:links][:self].flat_map { |l| l[:href] }.first.to_s
116
+ end
117
+
118
+ # @!group PR Commit Metadata
119
+ # The branch to which the PR is going to be merged from.
120
+ # @return [String]
121
+ #
122
+ def branch_for_head
123
+ @bs.pr_json[:fromRef][:displayId].to_s
124
+ end
125
+
126
+ # @!group PR Commit Metadata
127
+ # The base commit to which the PR is going to be merged as a parent.
128
+ # @return [String]
129
+ #
130
+ def base_commit
131
+ @bs.pr_json[:toRef][:latestCommit].to_s
132
+ end
133
+
134
+ # @!group PR Commit Metadata
135
+ # The head commit to which the PR is requesting to be merged from.
136
+ # @return [String]
137
+ #
138
+ def head_commit
139
+ @bs.pr_json[:fromRef][:latestCommit].to_s
140
+ end
141
+
142
+ # @!group Bitbucket Cloud Misc
143
+ # Returns a list of HTML anchors for a file, or files in the head repository.
144
+ # It returns a string of multiple anchors if passed an array.
145
+ # @param [String or Array<String>] paths
146
+ # A list of strings to convert to github anchors
147
+ # @param [Bool] full_path
148
+ # Shows the full path as the link's text, defaults to `true`.
149
+ #
150
+ # @return [String]
151
+ #
152
+ def html_link(paths, full_path: true)
153
+ create_link(paths, full_path) { |href, text| create_html_link(href, text) }
154
+ end
155
+
156
+ # @!group Bitbucket Cloud Misc
157
+ # Returns a list of Markdown links for a file, or files in the head repository.
158
+ # It returns a string of multiple links if passed an array.
159
+ # @param [String or Array<String>] paths
160
+ # A list of strings to convert to Markdown links
161
+ # @param [Bool] full_path
162
+ # Shows the full path as the link's text, defaults to `true`.
163
+ #
164
+ # @return [String]
165
+ #
166
+ def markdown_link(paths, full_path: true)
167
+ create_link(paths, full_path) { |href, text| create_markdown_link(href, text) }
168
+ end
169
+
170
+ private
171
+
172
+ def create_link(paths, full_path)
173
+ paths = [paths] unless paths.kind_of?(Array)
174
+ commit = head_commit
175
+ repo = pr_json[:fromRef][:repository][:links][:self].flat_map { |l| l[:href] }.first
176
+
177
+ paths = paths.map do |path|
178
+ path, line = path.split("#")
179
+ url_path = path.start_with?("/") ? path : "/#{path}"
180
+ text = full_path ? path : File.basename(path)
181
+ url_path.gsub!(" ", "%20")
182
+ line_ref = line ? "##{line}" : ""
183
+ yield("#{repo}#{url_path}?at=#{commit}#{line_ref}", text)
184
+ end
185
+
186
+ return paths.first if paths.count < 2
187
+ paths.first(paths.count - 1).join(", ") + " & " + paths.last
188
+ end
189
+
190
+ def create_html_link(href, text)
191
+ "<a href='#{href}'>#{text}</a>"
192
+ end
193
+
194
+ def create_markdown_link(href, text)
195
+ "[#{text}](#{href})"
196
+ end
197
+ end
198
+ end
@@ -99,6 +99,8 @@ module Danger
99
99
  :gitlab
100
100
  when Danger::RequestSources::BitbucketServer
101
101
  :bitbucket_server
102
+ when Danger::RequestSources::BitbucketCloud
103
+ :bitbucket_cloud
102
104
  else
103
105
  :unknown
104
106
  end
@@ -114,5 +114,21 @@ module Danger
114
114
  def diff_for_file(file)
115
115
  modified_files.include?(file) ? @git.diff[file] : nil
116
116
  end
117
+
118
+ # @!group Git Metadata
119
+ # Statistics for a specific file in this diff
120
+ # @return [Hash] with keys `:insertions`, `:deletions` giving line counts, and `:before`, `:after` giving file contents, or nil if the file has no changes or does not exist
121
+ #
122
+ def info_for_file(file)
123
+ return nil unless modified_files.include?(file)
124
+ stats = @git.diff.stats[:files][file]
125
+ diff = @git.diff[file]
126
+ {
127
+ insertions: stats[:insertions],
128
+ deletions: stats[:deletions],
129
+ before: diff.blob(:src).contents,
130
+ after: diff.blob(:dst).contents
131
+ }
132
+ end
117
133
  end
118
134
  end
@@ -0,0 +1,22 @@
1
+ module Danger
2
+ class Comment
3
+ attr_reader :id, :body
4
+
5
+ def initialize(id, body)
6
+ @id = id
7
+ @body = body
8
+ end
9
+
10
+ def self.from_github(comment)
11
+ self.new(comment[:id], comment[:body])
12
+ end
13
+
14
+ def self.from_gitlab(comment)
15
+ self.new(comment.id, comment.body)
16
+ end
17
+
18
+ def generated_by_danger?(danger_id)
19
+ body.include?("generated_by_#{danger_id}")
20
+ end
21
+ end
22
+ end
@@ -180,27 +180,6 @@ module Danger
180
180
 
181
181
  return NEW_REGEX.match(table)
182
182
  end
183
-
184
- class Comment
185
- attr_reader :id, :body
186
-
187
- def initialize(id, body)
188
- @id = id
189
- @body = body
190
- end
191
-
192
- def self.from_github(comment)
193
- self.new(comment[:id], comment[:body])
194
- end
195
-
196
- def self.from_gitlab(comment)
197
- self.new(comment.id, comment.body)
198
- end
199
-
200
- def generated_by_danger?(danger_id)
201
- body.include?("generated_by_#{danger_id}")
202
- end
203
- end
204
183
  end
205
184
  end
206
185
  end
@@ -9,7 +9,7 @@ module Danger
9
9
  #
10
10
  # @return [Violation or Markdown] the extracted message
11
11
  def parse_message_from_row(row)
12
- Violation.new(row, true, nil, nil)
12
+ Violation.new(row, true)
13
13
  end
14
14
 
15
15
  def parse_tables_from_comment(comment)
@@ -0,0 +1,78 @@
1
+ # coding: utf-8
2
+ require "danger/helpers/comments_helper"
3
+
4
+ module Danger
5
+ module RequestSources
6
+ class BitbucketCloud < RequestSource
7
+ include Danger::Helpers::CommentsHelper
8
+ attr_accessor :pr_json
9
+
10
+ def initialize(ci_source, environment)
11
+ self.ci_source = ci_source
12
+ self.environment = environment
13
+
14
+ project, slug = ci_source.repo_slug.split("/")
15
+ @api = BitbucketCloudAPI.new(project, slug, ci_source.pull_request_id, environment)
16
+ end
17
+
18
+ def validates_as_ci?
19
+ # TODO: ???
20
+ true
21
+ end
22
+
23
+ def validates_as_api_source?
24
+ @api.credentials_given?
25
+ end
26
+
27
+ def scm
28
+ @scm ||= GitRepo.new
29
+ end
30
+
31
+ def host
32
+ @host ||= @api.host
33
+ end
34
+
35
+ def fetch_details
36
+ self.pr_json = @api.fetch_pr_json
37
+ end
38
+
39
+ def setup_danger_branches
40
+ base_commit = self.pr_json[:destination][:commit][:hash]
41
+ head_commit = self.pr_json[:source][:commit][:hash]
42
+
43
+ # Next, we want to ensure that we have a version of the current branch at a known location
44
+ self.scm.exec "branch #{EnvironmentManager.danger_base_branch} #{base_commit}"
45
+
46
+ # OK, so we want to ensure that we have a known head branch, this will always represent
47
+ # the head of the PR ( e.g. the most recent commit that will be merged. )
48
+ self.scm.exec "branch #{EnvironmentManager.danger_head_branch} #{head_commit}"
49
+ end
50
+
51
+ def organisation
52
+ nil
53
+ end
54
+
55
+ def update_pull_request!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger")
56
+ delete_old_comments(danger_id: danger_id)
57
+
58
+ comment = generate_description(warnings: warnings, errors: errors)
59
+ comment += "\n\n"
60
+ comment += generate_comment(warnings: warnings,
61
+ errors: errors,
62
+ messages: messages,
63
+ markdowns: markdowns,
64
+ previous_violations: {},
65
+ danger_id: danger_id,
66
+ template: "bitbucket_server")
67
+
68
+ @api.post_comment(comment)
69
+ end
70
+
71
+ def delete_old_comments(danger_id: "danger")
72
+ @api.fetch_last_comments.each do |c|
73
+ @api.delete_comment(c[:id]) if c[:content][:raw] =~ /generated_by_#{danger_id}/
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,80 @@
1
+ # coding: utf-8
2
+ require "danger/helpers/comments_helper"
3
+
4
+ module Danger
5
+ module RequestSources
6
+ class BitbucketCloudAPI
7
+ attr_accessor :host, :pr_api_endpoint, :pr_api_endpoint_v1
8
+
9
+ def initialize(project, slug, pull_request_id, environment)
10
+ @username = environment["DANGER_BITBUCKETCLOUD_USERNAME"]
11
+ @password = environment["DANGER_BITBUCKETCLOUD_PASSWORD"]
12
+ self.pr_api_endpoint = "https://api.bitbucket.org/2.0/repositories/#{project}/#{slug}/pullrequests/#{pull_request_id}"
13
+ self.pr_api_endpoint_v1 = "https://api.bitbucket.org/1.0/repositories/#{project}/#{slug}/pullrequests/#{pull_request_id}"
14
+ end
15
+
16
+ def inspect
17
+ inspected = super
18
+
19
+ if @password
20
+ inspected = inspected.sub! @password, "********".freeze
21
+ end
22
+
23
+ inspected
24
+ end
25
+
26
+ def credentials_given?
27
+ @username && !@username.empty? && @password && !@password.empty?
28
+ end
29
+
30
+ def fetch_pr_json
31
+ uri = URI(pr_api_endpoint)
32
+ fetch_json(uri)
33
+ end
34
+
35
+ def fetch_last_comments
36
+ uri = URI("#{pr_api_endpoint}/activity?limit=1000")
37
+ fetch_json(uri)[:values].select { |v| v[:comment] }.map { |v| v[:comment] }
38
+ end
39
+
40
+ def delete_comment(id)
41
+ uri = URI("#{pr_api_endpoint_v1}/comments/#{id}")
42
+ delete(uri)
43
+ end
44
+
45
+ def post_comment(text)
46
+ uri = URI("#{pr_api_endpoint_v1}/comments")
47
+ body = { content: text }.to_json
48
+ post(uri, body)
49
+ end
50
+
51
+ private
52
+
53
+ def fetch_json(uri)
54
+ req = Net::HTTP::Get.new(uri.request_uri, { "Content-Type" => "application/json" })
55
+ req.basic_auth @username, @password
56
+ res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
57
+ http.request(req)
58
+ end
59
+ JSON.parse(res.body, symbolize_names: true)
60
+ end
61
+
62
+ def post(uri, body)
63
+ req = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" })
64
+ req.basic_auth @username, @password
65
+ req.body = body
66
+ Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
67
+ http.request(req)
68
+ end
69
+ end
70
+
71
+ def delete(uri)
72
+ req = Net::HTTP::Delete.new(uri.request_uri, { "Content-Type" => "application/json" })
73
+ req.basic_auth @username, @password
74
+ Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
75
+ http.request(req)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -1,6 +1,7 @@
1
1
  # coding: utf-8
2
2
  require "octokit"
3
3
  require "danger/helpers/comments_helper"
4
+ require "danger/helpers/comment"
4
5
 
5
6
  module Danger
6
7
  module RequestSources
@@ -1,6 +1,7 @@
1
1
  # coding: utf-8
2
2
  require "gitlab"
3
3
  require "danger/helpers/comments_helper"
4
+ require "danger/helpers/comment"
4
5
 
5
6
  module Danger
6
7
  module RequestSources
@@ -1,4 +1,4 @@
1
1
  module Danger
2
- VERSION = "3.2.2".freeze
2
+ VERSION = "3.3.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: 3.2.2
4
+ version: 3.3.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: 2016-09-14 00:00:00.000000000 Z
12
+ date: 2016-09-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: claide
@@ -398,6 +398,7 @@ files:
398
398
  - lib/danger/danger_core/executor.rb
399
399
  - lib/danger/danger_core/messages/markdown.rb
400
400
  - lib/danger/danger_core/messages/violation.rb
401
+ - lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb
401
402
  - lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb
402
403
  - lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb
403
404
  - lib/danger/danger_core/plugins/dangerfile_git_plugin.rb
@@ -405,6 +406,7 @@ files:
405
406
  - lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb
406
407
  - lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb
407
408
  - lib/danger/danger_core/standard_error.rb
409
+ - lib/danger/helpers/comment.rb
408
410
  - lib/danger/helpers/comments_helper.rb
409
411
  - lib/danger/helpers/comments_parsing_helper.rb
410
412
  - lib/danger/plugin_support/plugin.rb
@@ -412,6 +414,8 @@ files:
412
414
  - lib/danger/plugin_support/plugin_linter.rb
413
415
  - lib/danger/plugin_support/plugin_parser.rb
414
416
  - lib/danger/plugin_support/templates/readme_table.html.erb
417
+ - lib/danger/request_source/bitbucket_cloud.rb
418
+ - lib/danger/request_source/bitbucket_cloud_api.rb
415
419
  - lib/danger/request_source/bitbucket_server.rb
416
420
  - lib/danger/request_source/bitbucket_server_api.rb
417
421
  - lib/danger/request_source/github.rb