danger 6.1.0 → 6.2.0
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/azure_pipelines.rb +1 -1
- data/lib/danger/ci_source/bamboo.rb +41 -0
- data/lib/danger/ci_source/bitrise.rb +8 -0
- data/lib/danger/ci_source/code_build.rb +20 -20
- data/lib/danger/ci_source/semaphore.rb +8 -5
- data/lib/danger/danger_core/dangerfile.rb +1 -1
- data/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +12 -1
- data/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +1 -1
- data/lib/danger/scm_source/git_repo.rb +8 -2
- data/lib/danger/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12728d6688a88a9852c1db80a4538bd610511388749fb76b2f774ea31a9f0517
|
4
|
+
data.tar.gz: bc6f5250eb2851de5537c9f9ac0755259a6e249c393617125f09665334ab3587
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 694c5bae91efcbbc823cf42708533bed4d298ae31af50b4d3dadb3edf50e4acb6aca907eade1e4913fdee370366ad3c1ac3d90e13f2bbb4bcba09a4fb8d14efd
|
7
|
+
data.tar.gz: 4c62ee57532ea5ef825fc4b7c6798c7bc2496250d3b7d928e60cf392d1dd95ce4fc936a4b07ca28d337cc618450b3a3f612a37b46531aa1a4feca721e0bddc48
|
@@ -36,7 +36,7 @@ module Danger
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def initialize(env)
|
39
|
-
self.pull_request_id = env["SYSTEM_PULLREQUEST_PULLREQUESTID"]
|
39
|
+
self.pull_request_id = env["SYSTEM_PULLREQUEST_PULLREQUESTNUMBER"] || env["SYSTEM_PULLREQUEST_PULLREQUESTID"]
|
40
40
|
self.repo_url = env["BUILD_REPOSITORY_URI"]
|
41
41
|
self.repo_slug = env["BUILD_REPOSITORY_NAME"]
|
42
42
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "set"
|
2
|
+
|
3
|
+
module Danger
|
4
|
+
# ### CI Setup
|
5
|
+
#
|
6
|
+
# Add a Run Script task that executes `danger` (or `bundle exec danger` if you're using Bundler
|
7
|
+
# to manage your gems) as your as part of your Bamboo plan.
|
8
|
+
# The minimum supported version is Bamboo 6.9.
|
9
|
+
#
|
10
|
+
# ### Token Setup
|
11
|
+
#
|
12
|
+
# IMPORTANT: All required Bamboo environment variables will be available
|
13
|
+
# only if the plan is run as part of a pull request. This can be achieved by selecting:
|
14
|
+
# Configure plan -> Branches -> Create plan branch: "When pull request is created".
|
15
|
+
# Otherwise, `bamboo_repository_pr_key` and `bamboo_planRepository_repositoryUrl`
|
16
|
+
# will not be available.
|
17
|
+
#
|
18
|
+
class Bamboo < CI
|
19
|
+
def supported_request_sources
|
20
|
+
@supported_request_sources ||= [
|
21
|
+
Danger::RequestSources::BitbucketServer
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.validates_as_ci?(env)
|
26
|
+
env.key? "bamboo_buildKey"
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.validates_as_pr?(env)
|
30
|
+
exists = ["bamboo_repository_pr_key", "bamboo_planRepository_repositoryUrl"].all? { |x| env[x] && !env[x].empty? }
|
31
|
+
exists && env["bamboo_repository_pr_key"].to_i > 0
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(env)
|
35
|
+
self.repo_url = env["bamboo_planRepository_repositoryUrl"]
|
36
|
+
self.pull_request_id = env["bamboo_repository_pr_key"]
|
37
|
+
repo_matches = self.repo_url.match(%r{([\/:])([^\/]+\/[^\/]+?)(\.git$|$)})
|
38
|
+
self.repo_slug = repo_matches[2] unless repo_matches.nil?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -19,6 +19,14 @@ module Danger
|
|
19
19
|
#
|
20
20
|
# Add the `DANGER_GITHUB_API_TOKEN` to your workflow's [Secret App Env Vars](https://blog.bitrise.io/anyone-even-prs-can-have-secrets).
|
21
21
|
#
|
22
|
+
# ### bitbucket server and bitrsie
|
23
|
+
#
|
24
|
+
# Danger will read the environemnt variable GIT_REPOSITORY_URL to construct the Bitbucket Server API URL
|
25
|
+
# finding the project and repo slug in the GIT_REPOSITORY_URL variable. This GIT_REPOSITORY_URL variable
|
26
|
+
# comes from the App Settings tab for your Bitrsie App. If you are manually setting a repo URL in the
|
27
|
+
# Git Clone Repo step, you may need to set adjust this propery in the settings tab, maybe even fake it.
|
28
|
+
# The pattern used is `(%r{([\/:])(([^\/]+\/){1,2}[^\/]+?)(\.git$|$)}`.
|
29
|
+
#
|
22
30
|
class Bitrise < CI
|
23
31
|
def self.validates_as_ci?(env)
|
24
32
|
env.key? "BITRISE_IO"
|
@@ -16,8 +16,7 @@ module Danger
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.validates_as_pr?(env)
|
19
|
-
|
20
|
-
url
|
19
|
+
!!self.extract_pr_url(env)
|
21
20
|
end
|
22
21
|
|
23
22
|
def supported_request_sources
|
@@ -26,32 +25,33 @@ module Danger
|
|
26
25
|
|
27
26
|
def initialize(env)
|
28
27
|
self.repo_slug = self.class.extract_repo_slug(env)
|
29
|
-
self.pull_request_id = env["CODEBUILD_SOURCE_VERSION"].split("/")[1]
|
28
|
+
self.pull_request_id = env["CODEBUILD_SOURCE_VERSION"].split("/")[1].to_i
|
30
29
|
self.repo_url = self.class.extract_repo_url(env)
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL"
|
32
|
+
def self.extract_repo_slug(env)
|
33
|
+
return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL"
|
36
34
|
|
37
|
-
|
38
|
-
end
|
35
|
+
gh_host = env["DANGER_GITHUB_HOST"] || "github.com"
|
39
36
|
|
40
|
-
|
41
|
-
|
37
|
+
env["CODEBUILD_SOURCE_REPO_URL"].gsub(%r{^.*?#{Regexp.escape(gh_host)}\/(.*?)(\.git)?$}, '\1')
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.extract_repo_url(env)
|
41
|
+
return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL"
|
42
42
|
|
43
|
-
|
44
|
-
|
43
|
+
env["CODEBUILD_SOURCE_REPO_URL"].gsub(/\.git$/, "")
|
44
|
+
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
def self.extract_pr_url(env)
|
47
|
+
return nil unless env.key? "CODEBUILD_SOURCE_VERSION"
|
48
|
+
return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL"
|
49
|
+
return nil unless env["CODEBUILD_SOURCE_VERSION"].split("/").length == 2
|
50
50
|
|
51
|
-
|
52
|
-
|
51
|
+
_source_origin, pr_number = env["CODEBUILD_SOURCE_VERSION"].split("/")
|
52
|
+
github_repo_url = env["CODEBUILD_SOURCE_REPO_URL"].gsub(/\.git$/, "")
|
53
53
|
|
54
|
-
|
55
|
-
|
54
|
+
"#{github_repo_url}/pull/#{pr_number}"
|
55
|
+
end
|
56
56
|
end
|
57
57
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# https://semaphoreci.com/
|
1
|
+
# https://docs.semaphoreci.com/article/12-environment-variables
|
2
2
|
require "danger/request_sources/github/github"
|
3
3
|
|
4
4
|
module Danger
|
@@ -18,7 +18,10 @@ module Danger
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.validates_as_pr?(env)
|
21
|
-
["SEMAPHORE_REPO_SLUG", "PULL_REQUEST_NUMBER"].all? { |x| env[x] && !env[x].empty? }
|
21
|
+
one = ["SEMAPHORE_REPO_SLUG", "PULL_REQUEST_NUMBER"].all? { |x| env[x] && !env[x].empty? }
|
22
|
+
two = ["SEMAPHORE_GIT_REPO_SLUG", "SEMAPHORE_GIT_PR_NUMBER"].all? { |x| env[x] && !env[x].empty? }
|
23
|
+
|
24
|
+
one || two
|
22
25
|
end
|
23
26
|
|
24
27
|
def supported_request_sources
|
@@ -26,9 +29,9 @@ module Danger
|
|
26
29
|
end
|
27
30
|
|
28
31
|
def initialize(env)
|
29
|
-
self.repo_slug = env["SEMAPHORE_REPO_SLUG"]
|
30
|
-
self.pull_request_id = env["PULL_REQUEST_NUMBER"]
|
31
|
-
self.repo_url = GitRepo.new.origins
|
32
|
+
self.repo_slug = env["SEMAPHORE_GIT_REPO_SLUG"] || env["SEMAPHORE_REPO_SLUG"]
|
33
|
+
self.pull_request_id = env["SEMAPHORE_GIT_PR_NUMBER"] || env["PULL_REQUEST_NUMBER"]
|
34
|
+
self.repo_url = env["SEMAPHORE_GIT_URL"] || GitRepo.new.origins
|
32
35
|
end
|
33
36
|
end
|
34
37
|
end
|
@@ -257,7 +257,7 @@ module Danger
|
|
257
257
|
|
258
258
|
def setup_for_running(base_branch, head_branch)
|
259
259
|
env.ensure_danger_branches_are_setup
|
260
|
-
env.scm.diff_for_folder(".".freeze, from: base_branch, to: head_branch)
|
260
|
+
env.scm.diff_for_folder(".".freeze, from: base_branch, to: head_branch, lookup_top_level: true)
|
261
261
|
end
|
262
262
|
|
263
263
|
def run(base_branch, head_branch, dangerfile_path, danger_id, new_comment, remove_previous_comments)
|
@@ -192,6 +192,17 @@ module Danger
|
|
192
192
|
@gitlab.client
|
193
193
|
end
|
194
194
|
|
195
|
+
# @!group GitLab Misc
|
196
|
+
# Returns the web_url of the source project.
|
197
|
+
# @return [String]
|
198
|
+
#
|
199
|
+
def repository_web_url
|
200
|
+
@repository_web_url ||= begin
|
201
|
+
project = api.project(mr_json["source_project_id"])
|
202
|
+
project.web_url
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
195
206
|
# @!group GitLab Misc
|
196
207
|
# Returns a list of HTML anchors for a file, or files in the head repository. An example would be:
|
197
208
|
# `<a href='https://gitlab.com/artsy/eigen/blob/561827e46167077b5e53515b4b7349b8ae04610b/file.txt'>file.txt</a>`. It returns a string of multiple anchors if passed an array.
|
@@ -209,7 +220,7 @@ module Danger
|
|
209
220
|
paths = paths.map do |path|
|
210
221
|
url_path = path.start_with?("/") ? path : "/#{path}"
|
211
222
|
text = full_path ? path : File.basename(path)
|
212
|
-
create_link("#{
|
223
|
+
create_link("#{repository_web_url}/blob/#{commit}#{url_path}", text)
|
213
224
|
end
|
214
225
|
|
215
226
|
return paths.first if paths.count < 2
|
@@ -9,7 +9,7 @@ module Danger
|
|
9
9
|
# @example Check that added lines contains agreed form of words
|
10
10
|
#
|
11
11
|
# git.diff.each do |chunk|
|
12
|
-
# chunk.patch.lines.grep(
|
12
|
+
# chunk.patch.lines.grep(/^\+/).each do |added_line|
|
13
13
|
# if added_line.gsub!(/(?<cancel>cancel)(?<rest>[^l[[:space:]][[:punct:]]]+)/i, '>>\k<cancel>-l-\k<rest><<')
|
14
14
|
# fail "Single 'L' for cancellation-alike words in '#{added_line}'"
|
15
15
|
# end
|
@@ -6,9 +6,15 @@ module Danger
|
|
6
6
|
class GitRepo
|
7
7
|
attr_accessor :diff, :log, :folder
|
8
8
|
|
9
|
-
def diff_for_folder(folder, from: "master", to: "HEAD")
|
9
|
+
def diff_for_folder(folder, from: "master", to: "HEAD", lookup_top_level: false)
|
10
10
|
self.folder = folder
|
11
|
-
|
11
|
+
git_top_level = folder
|
12
|
+
if lookup_top_level
|
13
|
+
Dir.chdir(folder) do
|
14
|
+
git_top_level = exec("rev-parse --show-toplevel")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
repo = Git.open git_top_level
|
12
18
|
|
13
19
|
ensure_commitish_exists!(from)
|
14
20
|
ensure_commitish_exists!(to)
|
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.
|
4
|
+
version: 6.2.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:
|
12
|
+
date: 2020-01-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: claide
|
@@ -196,6 +196,7 @@ files:
|
|
196
196
|
- lib/danger/ci_source/appcenter.rb
|
197
197
|
- lib/danger/ci_source/appveyor.rb
|
198
198
|
- lib/danger/ci_source/azure_pipelines.rb
|
199
|
+
- lib/danger/ci_source/bamboo.rb
|
199
200
|
- lib/danger/ci_source/bitbucket_pipelines.rb
|
200
201
|
- lib/danger/ci_source/bitrise.rb
|
201
202
|
- lib/danger/ci_source/buddybuild.rb
|
@@ -318,7 +319,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
318
319
|
- !ruby/object:Gem::Version
|
319
320
|
version: '0'
|
320
321
|
requirements: []
|
321
|
-
|
322
|
+
rubyforge_project:
|
323
|
+
rubygems_version: 2.7.6.2
|
322
324
|
signing_key:
|
323
325
|
specification_version: 4
|
324
326
|
summary: Like Unit Tests, but for your Team Culture.
|