danger 5.3.3 → 5.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/danger/ci_source/bitrise.rb +3 -1
- data/lib/danger/ci_source/buddybuild.rb +39 -12
- data/lib/danger/ci_source/gitlab_ci.rb +35 -11
- data/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +52 -14
- data/lib/danger/request_sources/gitlab.rb +7 -6
- data/lib/danger/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd328f55fb2fe6ee6a1e0620c24e030dbb6186ca
|
4
|
+
data.tar.gz: ce734963c70c59a01bc08d615a01a1e398a484a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb16654b5163a1852a4ef3a371c799398fdd1d84944da4de149ba9ba4b2cdcf492500713ba51558469fe2a23e0324fa5a6f0186037ef3497671b2bd12d67fa1f
|
7
|
+
data.tar.gz: 15f2f3a72bce7776860936abd2a2e3dd0b1bc43a3b3d84fc2baf2a0bce40a265f75e79b6fb3ac1ed13dc9865f6662942b09bd1e34713f5a4fbcc6ae77b52bffc
|
@@ -6,13 +6,15 @@ module Danger
|
|
6
6
|
# ### CI Setup
|
7
7
|
#
|
8
8
|
# Add a script step to your workflow:
|
9
|
-
#
|
9
|
+
#
|
10
|
+
# ```yml
|
10
11
|
# - script@1.1.2:
|
11
12
|
# inputs:
|
12
13
|
# - content: |-
|
13
14
|
# bundle install
|
14
15
|
# bundle exec danger
|
15
16
|
# ```
|
17
|
+
#
|
16
18
|
# ### Token Setup
|
17
19
|
#
|
18
20
|
# Add the `DANGER_GITHUB_API_TOKEN` to your workflow's App Env Vars.
|
@@ -1,35 +1,62 @@
|
|
1
1
|
module Danger
|
2
2
|
# ### CI Setup
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# the server and you should be all set-up. However, if you want to use
|
7
|
-
# different bot for Danger, you can do it with token setup described below.
|
4
|
+
# Read how you can setup Danger on the buddybuild blog:
|
5
|
+
# https://www.buddybuild.com/blog/using-danger-with-buddybuild/
|
8
6
|
#
|
9
7
|
# ### Token Setup
|
10
8
|
#
|
11
9
|
# Login to buddybuild and select your app. Go to your *App Settings* and
|
12
10
|
# in the *Build Settings* menu on the left, choose *Environment Variables*.
|
11
|
+
# http://docs.buddybuild.com/docs/environment-variables
|
13
12
|
#
|
14
13
|
# #### GitHub
|
15
14
|
# Add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV.
|
16
15
|
#
|
17
16
|
# #### GitLab
|
18
17
|
# Add the `DANGER_GITLAB_API_TOKEN` to your build user's ENV.
|
19
|
-
|
18
|
+
#
|
19
|
+
# #### Bitbucket Cloud
|
20
|
+
# Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
|
21
|
+
# to your build user's ENV.
|
22
|
+
#
|
23
|
+
# #### Bitbucket server
|
24
|
+
# Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
|
25
|
+
# and `DANGER_BITBUCKETSERVER_HOST` to your build user's ENV.
|
26
|
+
#
|
27
|
+
# ### Running Danger
|
28
|
+
#
|
29
|
+
# Once the environment variables are all available, create a custom build step
|
30
|
+
# to run Danger as part of your build process:
|
31
|
+
# http://docs.buddybuild.com/docs/custom-prebuild-and-postbuild-steps
|
20
32
|
class Buddybuild < CI
|
21
|
-
|
22
|
-
|
33
|
+
#######################################################################
|
34
|
+
def self.validates_as_ci?(env)
|
35
|
+
value = env["BUDDYBUILD_BUILD_ID"]
|
36
|
+
return !value.nil? && !env["BUDDYBUILD_BUILD_ID"].empty?
|
23
37
|
end
|
24
38
|
|
25
|
-
|
26
|
-
|
39
|
+
#######################################################################
|
40
|
+
def self.validates_as_pr?(env)
|
41
|
+
value = env["BUDDYBUILD_PULL_REQUEST"]
|
42
|
+
return !value.nil? && !env["BUDDYBUILD_PULL_REQUEST"].empty?
|
27
43
|
end
|
28
44
|
|
29
|
-
|
30
|
-
|
45
|
+
#######################################################################
|
31
46
|
def supported_request_sources
|
32
|
-
@supported_request_sources ||= [
|
47
|
+
@supported_request_sources ||= [
|
48
|
+
Danger::RequestSources::GitHub,
|
49
|
+
Danger::RequestSources::GitLab,
|
50
|
+
Danger::RequestSources::BitbucketServer,
|
51
|
+
Danger::RequestSources::BitbucketCloud
|
52
|
+
]
|
53
|
+
end
|
54
|
+
|
55
|
+
#######################################################################
|
56
|
+
def initialize(env)
|
57
|
+
self.repo_slug = env["BUDDYBUILD_REPO_SLUG"]
|
58
|
+
self.pull_request_id = env["BUDDYBUILD_PULL_REQUEST"]
|
59
|
+
self.repo_url = GitRepo.new.origins # Buddybuild doesn't provide a repo url env variable for now
|
33
60
|
end
|
34
61
|
end
|
35
62
|
end
|
@@ -4,30 +4,54 @@ require "danger/request_sources/gitlab"
|
|
4
4
|
|
5
5
|
module Danger
|
6
6
|
# ### CI Setup
|
7
|
-
# GitLab CI is currently not supported because GitLab's runners don't expose
|
8
|
-
# the required values in the environment. Namely CI_MERGE_REQUEST_ID does not
|
9
|
-
# exist as of yet, however there is an
|
10
|
-
# [MR](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5698) fixing this.
|
11
|
-
# If that has been merged and you are using either gitlab.com or a release
|
12
|
-
# with that change this CISource will work.
|
13
7
|
#
|
8
|
+
# Install dependencies and add a danger step to your .gitlab-ci.yml:
|
9
|
+
# ``` yml
|
10
|
+
# before_script:
|
11
|
+
# - bundle install
|
12
|
+
# danger:
|
13
|
+
# script:
|
14
|
+
# - bundle exec danger
|
15
|
+
# ```
|
16
|
+
# ### Token Setup
|
17
|
+
#
|
18
|
+
# Add the `DANGER_GITHUB_API_TOKEN` to your pipeline env variables.
|
14
19
|
class GitLabCI < CI
|
15
20
|
def self.validates_as_ci?(env)
|
16
21
|
env.key? "GITLAB_CI"
|
17
22
|
end
|
18
23
|
|
19
24
|
def self.validates_as_pr?(env)
|
20
|
-
exists = [
|
21
|
-
|
25
|
+
exists = [
|
26
|
+
"GITLAB_CI", "CI_PROJECT_ID"
|
27
|
+
].all? { |x| env[x] }
|
28
|
+
|
29
|
+
exists && determine_merge_request_id(env).to_i > 0
|
22
30
|
end
|
23
31
|
|
24
|
-
def
|
25
|
-
|
32
|
+
def self.determine_merge_request_id(env)
|
33
|
+
return env["CI_MERGE_REQUEST_ID"] if env["CI_MERGE_REQUEST_ID"]
|
34
|
+
return 0 unless env["CI_COMMIT_SHA"]
|
35
|
+
|
36
|
+
project_id = env["CI_PROJECT_ID"]
|
37
|
+
base_commit = env["CI_COMMIT_SHA"]
|
38
|
+
client = RequestSources::GitLab.new(nil, env).client
|
39
|
+
|
40
|
+
merge_requests = client.merge_requests(project_id, state: :opened)
|
41
|
+
merge_request = merge_requests.auto_paginate.bsearch do |mr|
|
42
|
+
mr.sha == base_commit
|
43
|
+
end
|
44
|
+
|
45
|
+
merge_request.nil? ? 0 : merge_request.iid
|
26
46
|
end
|
27
47
|
|
28
48
|
def initialize(env)
|
29
49
|
self.repo_slug = env["CI_PROJECT_ID"]
|
30
|
-
self.pull_request_id = env
|
50
|
+
self.pull_request_id = self.class.determine_merge_request_id(env)
|
51
|
+
end
|
52
|
+
|
53
|
+
def supported_request_sources
|
54
|
+
@supported_request_sources ||= [Danger::RequestSources::GitLab]
|
31
55
|
end
|
32
56
|
end
|
33
57
|
end
|
@@ -12,6 +12,14 @@ module Danger
|
|
12
12
|
# when `true` means that the message will be crossed out instead of being removed.
|
13
13
|
# If it's not called again on subsequent runs.
|
14
14
|
#
|
15
|
+
# Each of `message`, `warn`, `fail` and `markdown` support multiple passed arguments
|
16
|
+
# @example
|
17
|
+
#
|
18
|
+
# message 'Hello', 'World', file: "Dangerfile", line: 1
|
19
|
+
# warn ['This', 'is', 'warning'], file: "Dangerfile", line: 1
|
20
|
+
# fail 'Ooops', 'bad bad error', sticky: false
|
21
|
+
# markdown '# And', '# Even', '# Markdown', file: "Dangerfile", line: 1
|
22
|
+
#
|
15
23
|
# By default, using `fail` would fail the corresponding build. Either via an API call, or
|
16
24
|
# via the return value for the danger command. If you have linters with errors for this call
|
17
25
|
# you can use `messaging.fail` instead.
|
@@ -26,6 +34,8 @@ module Danger
|
|
26
34
|
# @example Failing a build
|
27
35
|
#
|
28
36
|
# fail "This build didn't pass tests"
|
37
|
+
# fail "Ooops!", "Something bad happend"
|
38
|
+
# fail ["This is example", "with array"]
|
29
39
|
#
|
30
40
|
# @example Failing a build, and note that on subsequent runs
|
31
41
|
#
|
@@ -34,6 +44,8 @@ module Danger
|
|
34
44
|
# @example Passing a warning
|
35
45
|
#
|
36
46
|
# warn "This build didn't pass linting"
|
47
|
+
# warn "Hm...", "This is not really good"
|
48
|
+
# warn ["Multiple warnings", "via array"]
|
37
49
|
#
|
38
50
|
# @example Displaying a markdown table
|
39
51
|
#
|
@@ -43,6 +55,9 @@ module Danger
|
|
43
55
|
# message << "20 | No documentation | Error \n"
|
44
56
|
# markdown message
|
45
57
|
#
|
58
|
+
# markdown "### First issue", "### Second issue"
|
59
|
+
# markdown ["### First issue", "### Second issue"]
|
60
|
+
#
|
46
61
|
# @example Adding an inline warning to a file
|
47
62
|
#
|
48
63
|
# warn("You shouldn't use puts in your Dangerfile", file: "Dangerfile", line: 10)
|
@@ -72,7 +87,7 @@ module Danger
|
|
72
87
|
# @!group Core
|
73
88
|
# Print markdown to below the table
|
74
89
|
#
|
75
|
-
# @param [String] message
|
90
|
+
# @param [String, Array<String>] message
|
76
91
|
# The markdown based message to be printed below the table
|
77
92
|
# @param [String] file
|
78
93
|
# Optional. Path to the file that the message is for.
|
@@ -80,14 +95,19 @@ module Danger
|
|
80
95
|
# Optional. The line in the file to present the message in.
|
81
96
|
# @return [void]
|
82
97
|
#
|
83
|
-
def markdown(
|
84
|
-
|
98
|
+
def markdown(*markdowns, **options)
|
99
|
+
file = options.fetch(:file, nil)
|
100
|
+
line = options.fetch(:line, nil)
|
101
|
+
|
102
|
+
markdowns.flatten.each do |markdown|
|
103
|
+
@markdowns << Markdown.new(markdown, file, line)
|
104
|
+
end
|
85
105
|
end
|
86
106
|
|
87
107
|
# @!group Core
|
88
108
|
# Print out a generate message on the PR
|
89
109
|
#
|
90
|
-
# @param [String
|
110
|
+
# @param [String, Array<String> message
|
91
111
|
# The message to present to the user
|
92
112
|
# @param [Boolean] sticky
|
93
113
|
# Whether the message should be kept after it was fixed,
|
@@ -98,14 +118,20 @@ module Danger
|
|
98
118
|
# Optional. The line in the file to present the message in.
|
99
119
|
# @return [void]
|
100
120
|
#
|
101
|
-
def message(
|
102
|
-
|
121
|
+
def message(*messages, **options)
|
122
|
+
sticky = options.fetch(:sticky, false)
|
123
|
+
file = options.fetch(:file, nil)
|
124
|
+
line = options.fetch(:line, nil)
|
125
|
+
|
126
|
+
messages.flatten.each do |message|
|
127
|
+
@messages << Violation.new(message, sticky, file, line)
|
128
|
+
end
|
103
129
|
end
|
104
130
|
|
105
131
|
# @!group Core
|
106
132
|
# Specifies a problem, but not critical
|
107
133
|
#
|
108
|
-
# @param [String
|
134
|
+
# @param [String, Array<String> message
|
109
135
|
# The message to present to the user
|
110
136
|
# @param [Boolean] sticky
|
111
137
|
# Whether the message should be kept after it was fixed,
|
@@ -116,15 +142,21 @@ module Danger
|
|
116
142
|
# Optional. The line in the file to present the message in.
|
117
143
|
# @return [void]
|
118
144
|
#
|
119
|
-
def warn(
|
120
|
-
|
121
|
-
|
145
|
+
def warn(*warnings, **options)
|
146
|
+
sticky = options.fetch(:sticky, false)
|
147
|
+
file = options.fetch(:file, nil)
|
148
|
+
line = options.fetch(:line, nil)
|
149
|
+
|
150
|
+
warnings.flatten.each do |warning|
|
151
|
+
next if should_ignore_violation(warning)
|
152
|
+
@warnings << Violation.new(warning, sticky, file, line)
|
153
|
+
end
|
122
154
|
end
|
123
155
|
|
124
156
|
# @!group Core
|
125
157
|
# Declares a CI blocking error
|
126
158
|
#
|
127
|
-
# @param [String
|
159
|
+
# @param [String, Array<String> message
|
128
160
|
# The message to present to the user
|
129
161
|
# @param [Boolean] sticky
|
130
162
|
# Whether the message should be kept after it was fixed,
|
@@ -135,9 +167,15 @@ module Danger
|
|
135
167
|
# Optional. The line in the file to present the message in.
|
136
168
|
# @return [void]
|
137
169
|
#
|
138
|
-
def fail(
|
139
|
-
|
140
|
-
|
170
|
+
def fail(*failures, **options)
|
171
|
+
sticky = options.fetch(:sticky, false)
|
172
|
+
file = options.fetch(:file, nil)
|
173
|
+
line = options.fetch(:line, nil)
|
174
|
+
|
175
|
+
failures.flatten.each do |failure|
|
176
|
+
next if should_ignore_violation(failure)
|
177
|
+
@errors << Violation.new(failure, sticky, file, line)
|
178
|
+
end
|
141
179
|
end
|
142
180
|
|
143
181
|
# @!group Reporting
|
@@ -33,10 +33,7 @@ module Danger
|
|
33
33
|
# The require happens inline so that it won't cause exceptions when just using the `danger` gem.
|
34
34
|
require "gitlab"
|
35
35
|
|
36
|
-
|
37
|
-
params[:endpoint] = endpoint
|
38
|
-
|
39
|
-
@client ||= Gitlab.client(params)
|
36
|
+
@client ||= Gitlab.client(endpoint: endpoint, private_token: token)
|
40
37
|
rescue LoadError
|
41
38
|
puts "The GitLab gem was not installed, you will need to change your Gem from `danger` to `danger-gitlab`.".red
|
42
39
|
puts "\n - See https://github.com/danger/danger/blob/master/CHANGELOG.md#400"
|
@@ -52,7 +49,8 @@ module Danger
|
|
52
49
|
end
|
53
50
|
|
54
51
|
def endpoint
|
55
|
-
@endpoint ||= @environment["DANGER_GITLAB_API_BASE_URL"] ||
|
52
|
+
@endpoint ||= @environment["DANGER_GITLAB_API_BASE_URL"] ||
|
53
|
+
"https://gitlab.com/api/v4"
|
56
54
|
end
|
57
55
|
|
58
56
|
def host
|
@@ -135,7 +133,10 @@ module Danger
|
|
135
133
|
else
|
136
134
|
original_id = editable_comments.first.id
|
137
135
|
client.edit_merge_request_comment(
|
138
|
-
ci_source.repo_slug,
|
136
|
+
ci_source.repo_slug,
|
137
|
+
ci_source.pull_request_id,
|
138
|
+
original_id,
|
139
|
+
{ body: body }
|
139
140
|
)
|
140
141
|
end
|
141
142
|
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: 5.3.
|
4
|
+
version: 5.3.4
|
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-07-
|
12
|
+
date: 2017-07-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: claide
|