danger 5.3.3 → 5.3.4
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/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
|