danger 6.2.0 → 6.2.1
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/danger/ci_source/bitbucket_pipelines.rb +2 -2
- data/lib/danger/comment_generators/bitbucket_server.md.erb +1 -1
- data/lib/danger/comment_generators/bitbucket_server_inline.md.erb +15 -0
- data/lib/danger/helpers/comments_helper.rb +4 -3
- data/lib/danger/helpers/emoji_mapper.rb +6 -5
- data/lib/danger/request_sources/bitbucket_cloud.rb +38 -7
- data/lib/danger/request_sources/bitbucket_cloud_api.rb +26 -12
- data/lib/danger/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fc0e933daf60c17871113311a2ff2fb180248a22f0574b2b9c00f7d60705107
|
4
|
+
data.tar.gz: 3a94095eaf6b2c14acc45e50f1b3ca6b9ea61814e551dbb2fc088f59425166be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cbc8d6e42a7b0e8bb1e89883f5206cade8543de3cf197e9cc8c26fa66cb0fcf37f498531fd5afe14170a720576271f5e5361d8d51212410a57152b7887a2550
|
7
|
+
data.tar.gz: 909bc0705e6ee02713f49666f70bb4d4b05e7c6fd65badf000bbe5fe4f234a9cb1a9c5862189e556c8d8a0b569fdd23eecafacd9073bf2575346f09d0395a324
|
@@ -7,9 +7,9 @@ module Danger
|
|
7
7
|
# - bundle exec danger --verbose
|
8
8
|
# ```
|
9
9
|
#
|
10
|
-
#
|
10
|
+
# ### Token Setup
|
11
11
|
#
|
12
|
-
# Add `DANGER_BITBUCKETCLOUD_USERNAME` and `
|
12
|
+
# Add `DANGER_BITBUCKETCLOUD_USERNAME` and `DANGER_BITBUCKETCLOUD_PASSWORD` to your pipeline repository variable
|
13
13
|
# or instead using `DANGER_BITBUCKETCLOUD_OAUTH_KEY` and `DANGER_BITBUCKETCLOUD_OAUTH_SECRET`.
|
14
14
|
#
|
15
15
|
# You can find them in Settings > Pipelines > Repository Variables
|
@@ -17,4 +17,4 @@
|
|
17
17
|
<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %>
|
18
18
|
<%- end -%>
|
19
19
|
|
20
|
-
Generated by [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>")
|
20
|
+
Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>")
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<%- @tables.each do |table| -%>
|
2
|
+
<%- table[:content].each do |violation| -%>
|
3
|
+
<%= @emoji_mapper.map(table[:emoji]) if table[:emoji] %> <%= violation.message %>
|
4
|
+
<%- end -%>
|
5
|
+
<%- table[:resolved].each do |message| -%>
|
6
|
+
<%= @emoji_mapper.map("white_check_mark") %> <%= message %>
|
7
|
+
<%- end -%>
|
8
|
+
<%- end -%>
|
9
|
+
|
10
|
+
<%- @markdowns.each do |current| -%>
|
11
|
+
<%= current %>
|
12
|
+
<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %>
|
13
|
+
<%- end -%>
|
14
|
+
|
15
|
+
Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>")
|
@@ -104,7 +104,7 @@ module Danger
|
|
104
104
|
)
|
105
105
|
end
|
106
106
|
|
107
|
-
def generate_inline_comment_body(emoji, message, danger_id: "danger", resolved:
|
107
|
+
def generate_inline_comment_body(emoji, message, danger_id: "danger", resolved: [], template: "github")
|
108
108
|
apply_template(
|
109
109
|
tables: [{ content: [message], resolved: resolved, emoji: emoji }],
|
110
110
|
danger_id: danger_id,
|
@@ -120,11 +120,12 @@ module Danger
|
|
120
120
|
)
|
121
121
|
end
|
122
122
|
|
123
|
-
def generate_description(warnings: nil, errors: nil)
|
123
|
+
def generate_description(warnings: nil, errors: nil, template: "github")
|
124
|
+
emoji_mapper = EmojiMapper.new(template)
|
124
125
|
if errors.empty? && warnings.empty?
|
125
126
|
return "All green. #{random_compliment}"
|
126
127
|
else
|
127
|
-
message = "
|
128
|
+
message = "#{emoji_mapper.map('warning')} "
|
128
129
|
message += "#{'Error'.danger_pluralize(errors.count)}. " unless errors.empty?
|
129
130
|
message += "#{'Warning'.danger_pluralize(warnings.count)}. " unless warnings.empty?
|
130
131
|
message += "Don't worry, everything is fixable."
|
@@ -8,15 +8,16 @@ module Danger
|
|
8
8
|
"white_check_mark" => "✅"
|
9
9
|
},
|
10
10
|
"bitbucket_server" => {
|
11
|
-
"no_entry_sign" => "
|
12
|
-
"warning" => "
|
13
|
-
"book" => "
|
14
|
-
"white_check_mark" => "
|
11
|
+
"no_entry_sign" => ":no_entry_sign:",
|
12
|
+
"warning" => ":warning:",
|
13
|
+
"book" => ":book:",
|
14
|
+
"white_check_mark" => ":white_check_mark:"
|
15
15
|
}
|
16
16
|
}.freeze
|
17
17
|
|
18
18
|
def initialize(template)
|
19
|
-
|
19
|
+
template.sub!('_inline', '')
|
20
|
+
@template = DATA.has_key?(template) ? template : "github"
|
20
21
|
end
|
21
22
|
|
22
23
|
def map(emoji)
|
@@ -71,21 +71,52 @@ module Danger
|
|
71
71
|
def update_pull_request!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false)
|
72
72
|
delete_old_comments(danger_id: danger_id) if !new_comment || remove_previous_comments
|
73
73
|
|
74
|
-
comment = generate_description(warnings: warnings, errors: errors)
|
74
|
+
comment = generate_description(warnings: warnings, errors: errors, template: "bitbucket_server")
|
75
75
|
comment += "\n\n"
|
76
|
+
|
77
|
+
warnings = update_inline_comments_for_kind!(:warnings, warnings, danger_id: danger_id)
|
78
|
+
errors = update_inline_comments_for_kind!(:errors, errors, danger_id: danger_id)
|
79
|
+
messages = update_inline_comments_for_kind!(:messages, messages, danger_id: danger_id)
|
80
|
+
markdowns = update_inline_comments_for_kind!(:markdowns, markdowns, danger_id: danger_id)
|
81
|
+
|
76
82
|
comment += generate_comment(warnings: warnings,
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
+
errors: errors,
|
84
|
+
messages: messages,
|
85
|
+
markdowns: markdowns,
|
86
|
+
previous_violations: {},
|
87
|
+
danger_id: danger_id,
|
88
|
+
template: "bitbucket_server")
|
83
89
|
|
84
90
|
@api.post_comment(comment)
|
85
91
|
end
|
86
92
|
|
93
|
+
def update_inline_comments_for_kind!(kind, messages, danger_id: "danger")
|
94
|
+
emoji = { warnings: "warning", errors: "no_entry_sign", messages: "book" }[kind]
|
95
|
+
|
96
|
+
messages.reject do |message|
|
97
|
+
next false unless message.file && message.line
|
98
|
+
|
99
|
+
body = ""
|
100
|
+
|
101
|
+
if kind == :markdown
|
102
|
+
body = generate_inline_markdown_body(message,
|
103
|
+
danger_id: danger_id,
|
104
|
+
template: "bitbucket_server")
|
105
|
+
else
|
106
|
+
body = generate_inline_comment_body(emoji, message,
|
107
|
+
danger_id: danger_id,
|
108
|
+
template: "bitbucket_server")
|
109
|
+
end
|
110
|
+
|
111
|
+
@api.post_comment(body, file: message.file, line: message.line)
|
112
|
+
|
113
|
+
true
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
87
117
|
def delete_old_comments(danger_id: "danger")
|
88
118
|
@api.fetch_last_comments.each do |c|
|
119
|
+
next if c[:user][:uuid] != @api.my_uuid
|
89
120
|
@api.delete_comment(c[:id]) if c[:content][:raw] =~ /generated_by_#{danger_id}/
|
90
121
|
end
|
91
122
|
end
|
@@ -30,6 +30,11 @@ module Danger
|
|
30
30
|
@username && !@username.empty? && @password && !@password.empty?
|
31
31
|
end
|
32
32
|
|
33
|
+
def my_uuid
|
34
|
+
uri = URI("https://api.bitbucket.org/2.0/users/#{@username}")
|
35
|
+
@my_uuid ||= fetch_json(uri)[:uuid]
|
36
|
+
end
|
37
|
+
|
33
38
|
def pull_request(*)
|
34
39
|
fetch_pr_json
|
35
40
|
end
|
@@ -39,9 +44,16 @@ module Danger
|
|
39
44
|
fetch_json(uri)
|
40
45
|
end
|
41
46
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
47
|
+
def fetch_comments
|
48
|
+
values = []
|
49
|
+
# TODO: use a url parts encoder to encode the query
|
50
|
+
uri = "#{pr_api_endpoint}/comments?pagelen=100&q=deleted+%7E+false+AND+user.username+%7E+%22#{@username}%22"
|
51
|
+
while(uri)
|
52
|
+
json = fetch_json(URI(uri))
|
53
|
+
values += json[:values]
|
54
|
+
uri = json[:next]
|
55
|
+
values
|
56
|
+
end
|
45
57
|
end
|
46
58
|
|
47
59
|
def delete_comment(id)
|
@@ -49,14 +61,16 @@ module Danger
|
|
49
61
|
delete(uri)
|
50
62
|
end
|
51
63
|
|
52
|
-
def post_comment(text)
|
64
|
+
def post_comment(text, file: nil, line: nil)
|
53
65
|
uri = URI("#{pr_api_endpoint}/comments")
|
54
66
|
body = {
|
55
|
-
content: {
|
67
|
+
content: {
|
56
68
|
raw: text
|
57
69
|
}
|
58
|
-
}
|
59
|
-
|
70
|
+
}
|
71
|
+
body.merge!(inline: { path: file, to: line }) if file && line
|
72
|
+
|
73
|
+
post(uri, body.to_json)
|
60
74
|
end
|
61
75
|
|
62
76
|
private
|
@@ -83,15 +97,15 @@ module Danger
|
|
83
97
|
oauth_secret = environment["DANGER_BITBUCKETCLOUD_OAUTH_SECRET"]
|
84
98
|
return nil if oauth_key.nil?
|
85
99
|
return nil if oauth_secret.nil?
|
86
|
-
|
100
|
+
|
87
101
|
uri = URI.parse("https://bitbucket.org/site/oauth2/access_token")
|
88
102
|
req = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" })
|
89
103
|
req.basic_auth oauth_key, oauth_secret
|
90
104
|
req.set_form_data({'grant_type' => 'client_credentials'})
|
91
105
|
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
92
|
-
|
106
|
+
http.request(req)
|
93
107
|
end
|
94
|
-
|
108
|
+
|
95
109
|
JSON.parse(res.body, symbolize_names: true)[:access_token]
|
96
110
|
end
|
97
111
|
|
@@ -129,13 +143,13 @@ module Danger
|
|
129
143
|
|
130
144
|
def delete(uri)
|
131
145
|
raise credentials_not_available unless credentials_given?
|
132
|
-
|
146
|
+
|
133
147
|
req = Net::HTTP::Delete.new(uri.request_uri, { "Content-Type" => "application/json" })
|
134
148
|
if access_token.nil?
|
135
149
|
req.basic_auth @username, @password
|
136
150
|
else
|
137
151
|
req["Authorization"] = "Bearer #{access_token}"
|
138
|
-
end
|
152
|
+
end
|
139
153
|
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
140
154
|
http.request(req)
|
141
155
|
end
|
data/lib/danger/version.rb
CHANGED
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: 6.2.
|
4
|
+
version: 6.2.1
|
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: 2020-
|
12
|
+
date: 2020-02-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: claide
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '1.
|
48
|
+
version: '1.6'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '1.
|
55
|
+
version: '1.6'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: colored2
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -248,6 +248,7 @@ files:
|
|
248
248
|
- lib/danger/commands/runner.rb
|
249
249
|
- lib/danger/commands/systems.rb
|
250
250
|
- lib/danger/comment_generators/bitbucket_server.md.erb
|
251
|
+
- lib/danger/comment_generators/bitbucket_server_inline.md.erb
|
251
252
|
- lib/danger/comment_generators/github.md.erb
|
252
253
|
- lib/danger/comment_generators/github_inline.md.erb
|
253
254
|
- lib/danger/comment_generators/gitlab.md.erb
|
@@ -319,8 +320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
319
320
|
- !ruby/object:Gem::Version
|
320
321
|
version: '0'
|
321
322
|
requirements: []
|
322
|
-
|
323
|
-
rubygems_version: 2.7.6.2
|
323
|
+
rubygems_version: 3.1.2
|
324
324
|
signing_key:
|
325
325
|
specification_version: 4
|
326
326
|
summary: Like Unit Tests, but for your Team Culture.
|