danger 9.1.0 → 9.2.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 +4 -4
- data/bin/danger +1 -1
- data/lib/danger/ci_source/appcircle.rb +71 -71
- data/lib/danger/ci_source/appveyor.rb +1 -0
- data/lib/danger/ci_source/azure_pipelines.rb +20 -5
- data/lib/danger/ci_source/bamboo.rb +1 -1
- data/lib/danger/ci_source/bitbucket_pipelines.rb +1 -2
- data/lib/danger/ci_source/bitrise.rb +3 -3
- data/lib/danger/ci_source/buildkite.rb +1 -1
- data/lib/danger/ci_source/circle_api.rb +2 -2
- data/lib/danger/ci_source/code_build.rb +1 -1
- data/lib/danger/ci_source/codefresh.rb +1 -1
- data/lib/danger/ci_source/concourse.rb +4 -5
- data/lib/danger/ci_source/dotci.rb +4 -6
- data/lib/danger/ci_source/github_actions.rb +6 -6
- data/lib/danger/ci_source/gitlab_ci.rb +4 -4
- data/lib/danger/ci_source/jenkins.rb +21 -22
- data/lib/danger/ci_source/local_git_repo.rb +7 -1
- data/lib/danger/ci_source/local_only_git_repo.rb +1 -0
- data/lib/danger/ci_source/support/find_repo_info_from_url.rb +11 -10
- data/lib/danger/ci_source/support/pull_request_finder.rb +15 -7
- data/lib/danger/ci_source/teamcity.rb +1 -1
- data/lib/danger/ci_source/xcode_cloud.rb +7 -7
- data/lib/danger/commands/init.rb +1 -1
- data/lib/danger/commands/local.rb +1 -1
- data/lib/danger/commands/local_helpers/http_cache.rb +2 -0
- data/lib/danger/commands/local_helpers/local_setup.rb +2 -0
- data/lib/danger/commands/local_helpers/pry_setup.rb +1 -0
- data/lib/danger/commands/plugins/plugin_json.rb +1 -3
- data/lib/danger/commands/plugins/plugin_lint.rb +0 -2
- data/lib/danger/commands/plugins/plugin_readme.rb +2 -5
- data/lib/danger/commands/runner.rb +1 -1
- data/lib/danger/commands/staging.rb +7 -7
- data/lib/danger/commands/systems.rb +4 -6
- data/lib/danger/core_ext/file_list.rb +2 -2
- data/lib/danger/danger_core/dangerfile.rb +13 -13
- data/lib/danger/danger_core/environment_manager.rb +2 -1
- data/lib/danger/danger_core/executor.rb +10 -11
- data/lib/danger/danger_core/message_aggregator.rb +1 -0
- data/lib/danger/danger_core/messages/base.rb +1 -0
- data/lib/danger/danger_core/messages/markdown.rb +3 -4
- data/lib/danger/danger_core/messages/violation.rb +1 -2
- data/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb +1 -3
- data/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb +4 -4
- data/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb +8 -2
- data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +3 -2
- data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +2 -0
- data/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +3 -1
- data/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +3 -2
- data/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +3 -1
- data/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb +3 -3
- data/lib/danger/danger_core/standard_error.rb +2 -3
- data/lib/danger/helpers/comments_helper.rb +5 -5
- data/lib/danger/helpers/comments_parsing_helper.rb +3 -2
- data/lib/danger/helpers/emoji_mapper.rb +1 -1
- data/lib/danger/plugin_support/plugin.rb +0 -1
- data/lib/danger/plugin_support/plugin_linter.rb +1 -0
- data/lib/danger/request_sources/bitbucket_cloud.rb +3 -5
- data/lib/danger/request_sources/bitbucket_cloud_api.rb +2 -4
- data/lib/danger/request_sources/bitbucket_server.rb +10 -13
- data/lib/danger/request_sources/bitbucket_server_api.rb +9 -10
- data/lib/danger/request_sources/code_insights_api.rb +7 -11
- data/lib/danger/request_sources/github/github.rb +15 -14
- data/lib/danger/request_sources/github/github_review.rb +3 -2
- data/lib/danger/request_sources/github/github_review_resolver.rb +0 -2
- data/lib/danger/request_sources/github/github_review_unsupported.rb +0 -2
- data/lib/danger/request_sources/gitlab.rb +46 -58
- data/lib/danger/request_sources/local_only.rb +0 -2
- data/lib/danger/request_sources/request_source.rb +4 -4
- data/lib/danger/request_sources/support/get_ignored_violation.rb +1 -1
- data/lib/danger/request_sources/vsts.rb +8 -10
- data/lib/danger/request_sources/vsts_api.rb +5 -2
- data/lib/danger/version.rb +1 -1
- data/lib/danger.rb +1 -0
- metadata +34 -35
- data/lib/danger/ci_source/vsts.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ad61c252b1b62b1fb4e7aa07c2ef21727ada06dcfdd66e23ce70840ab37fcff
|
4
|
+
data.tar.gz: a1e98cfa27d937448822f2ece399fc157b5f30358ed675f976ccc7c20b7bfb5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4531b7f35bccbfdc0df07dedae51b009e1a9a0bcf00d566293d28c143c1a00e29f3ef8f7e47421a6ff32e48cd8b2b640866392aab161d0e95d16d9eff6ad1b6
|
7
|
+
data.tar.gz: fcce02992e6488c454ca914e4a81be0d397cbd19b9f3e63cf058c05068606376020281b552cb489b9d88bf8d0958b6a99b442093d62123a095c3d4418955a1c1
|
data/bin/danger
CHANGED
@@ -3,81 +3,81 @@
|
|
3
3
|
require "danger/request_sources/github/github"
|
4
4
|
require "danger/request_sources/gitlab"
|
5
5
|
module Danger
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
def self.validates_as_pr?(env)
|
41
|
-
return false unless env.key? "AC_PULL_NUMBER"
|
42
|
-
env["AC_PULL_NUMBER"].to_i > 0
|
43
|
-
end
|
6
|
+
# ### CI Setup
|
7
|
+
#
|
8
|
+
# Add a Custom Script step to your workflow and set it as a bash:
|
9
|
+
#
|
10
|
+
# ```shell
|
11
|
+
# cd $AC_REPOSITORY_DIR
|
12
|
+
# bundle install
|
13
|
+
# bundle exec danger
|
14
|
+
# ```
|
15
|
+
# ### Token Setup
|
16
|
+
#
|
17
|
+
# Login to Appcircle and select your build profile. Go to your *Config* and
|
18
|
+
# choose *Environment Variables*.
|
19
|
+
# https://docs.appcircle.io/environment-variables/managing-variables
|
20
|
+
#
|
21
|
+
# #### GitHub
|
22
|
+
# Add the `DANGER_GITHUB_API_TOKEN` to your profile's ENV.
|
23
|
+
#
|
24
|
+
# #### GitLab
|
25
|
+
# Add the `DANGER_GITLAB_API_TOKEN` to your profile's ENV.
|
26
|
+
#
|
27
|
+
# #### Bitbucket Cloud
|
28
|
+
# Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
|
29
|
+
# to your profile's ENV.
|
30
|
+
#
|
31
|
+
# #### Bitbucket server
|
32
|
+
# Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
|
33
|
+
# and `DANGER_BITBUCKETSERVER_HOST` to your profile's ENV.
|
34
|
+
#
|
35
|
+
class Appcircle < CI
|
36
|
+
def self.validates_as_ci?(env)
|
37
|
+
env.key? "AC_APPCIRCLE"
|
38
|
+
end
|
44
39
|
|
45
|
-
|
46
|
-
|
47
|
-
Danger::RequestSources::GitHub,
|
48
|
-
Danger::RequestSources::BitbucketCloud,
|
49
|
-
Danger::RequestSources::BitbucketServer,
|
50
|
-
Danger::RequestSources::GitLab
|
51
|
-
]
|
52
|
-
end
|
40
|
+
def self.validates_as_pr?(env)
|
41
|
+
return false unless env.key? "AC_PULL_NUMBER"
|
53
42
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
43
|
+
env["AC_PULL_NUMBER"].to_i > 0
|
44
|
+
end
|
45
|
+
|
46
|
+
def supported_request_sources
|
47
|
+
@supported_request_sources ||= [
|
48
|
+
Danger::RequestSources::GitHub,
|
49
|
+
Danger::RequestSources::BitbucketCloud,
|
50
|
+
Danger::RequestSources::BitbucketServer,
|
51
|
+
Danger::RequestSources::GitLab
|
52
|
+
]
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize(env)
|
56
|
+
self.pull_request_id = env["AC_PULL_NUMBER"]
|
57
|
+
self.repo_url = env["AC_GIT_URL"]
|
58
|
+
self.repo_slug = repo_slug_from(self.repo_url)
|
59
|
+
end
|
60
|
+
|
61
|
+
def repo_slug_from(url)
|
62
|
+
if url =~ URI::DEFAULT_PARSER.make_regexp
|
63
|
+
# Try to parse the URL as a valid URI. This should cover the cases of http/https/ssh URLs.
|
64
|
+
begin
|
65
|
+
uri = URI.parse(url)
|
66
|
+
return uri.path.sub(%r{^(/)}, "").sub(/(.git)$/, "")
|
67
|
+
rescue URI::InvalidURIError
|
68
|
+
# In case URL could not be parsed fallback to git URL parsing.
|
72
69
|
repo_slug_asgiturl(url)
|
73
70
|
end
|
71
|
+
else
|
72
|
+
# In case URL could not be parsed fallback to git URL parsing. git@github.com:organization/repo.git
|
73
|
+
repo_slug_asgiturl(url)
|
74
74
|
end
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
75
|
+
end
|
76
|
+
|
77
|
+
def repo_slug_asgiturl(url)
|
78
|
+
matcher_url = url
|
79
|
+
repo_matches = matcher_url.match(%r{([/:])(([^/]+/)+[^/]+?)(\.git$|$)})[2]
|
80
|
+
return repo_matches unless repo_matches.nil?
|
81
81
|
end
|
82
82
|
end
|
83
|
-
|
83
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables
|
2
2
|
require "uri"
|
3
3
|
require "danger/request_sources/github/github"
|
4
|
+
require "danger/request_sources/vsts"
|
4
5
|
|
5
6
|
module Danger
|
6
7
|
# ### CI Setup
|
@@ -15,15 +16,28 @@ module Danger
|
|
15
16
|
#
|
16
17
|
# ### Token Setup
|
17
18
|
#
|
18
|
-
#
|
19
|
+
# #### GitHub
|
20
|
+
#
|
21
|
+
# You need to add the `DANGER_GITHUB_API_TOKEN` environment variable, to do this, go to your build definition's variables tab.
|
22
|
+
# #
|
23
|
+
# #### Azure Git
|
24
|
+
#
|
25
|
+
# You need to add the `DANGER_VSTS_API_TOKEN` and `DANGER_VSTS_HOST` environment variable, to do this,
|
26
|
+
# go to your build definition's variables tab. The `DANGER_VSTS_API_TOKEN` is your vsts personal access token.
|
27
|
+
# Instructions for creating a personal access token can be found [here](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/use-personal-access-tokens-to-authenticate).
|
28
|
+
# For the `DANGER_VSTS_HOST` variable the suggested value is `$(System.TeamFoundationCollectionUri)$(System.TeamProject)`
|
29
|
+
# which will automatically get your vsts domain and your project name needed for the vsts api.
|
19
30
|
#
|
20
31
|
class AzurePipelines < CI
|
32
|
+
|
33
|
+
|
21
34
|
def self.validates_as_ci?(env)
|
35
|
+
has_all_variables = ["AGENT_ID", "BUILD_SOURCEBRANCH", "BUILD_REPOSITORY_URI", "BUILD_REASON", "BUILD_REPOSITORY_NAME"].all? { |x| env[x] && !env[x].empty? }
|
36
|
+
|
22
37
|
# AGENT_ID is being used by AppCenter as well, so checking here to make sure AppCenter CI doesn't get a false positive for AzurePipelines
|
23
38
|
# Anyone working with AzurePipelines could provide a better/truly unique env key to avoid checking for AppCenter
|
24
|
-
!Danger::Appcenter
|
25
|
-
|
26
|
-
env["BUILD_REPOSITORY_PROVIDER"] != "TfsGit"
|
39
|
+
!Danger::Appcenter.validates_as_ci?(env) &&
|
40
|
+
has_all_variables
|
27
41
|
end
|
28
42
|
|
29
43
|
def self.validates_as_pr?(env)
|
@@ -35,7 +49,8 @@ module Danger
|
|
35
49
|
Danger::RequestSources::GitHub,
|
36
50
|
Danger::RequestSources::GitLab,
|
37
51
|
Danger::RequestSources::BitbucketServer,
|
38
|
-
Danger::RequestSources::BitbucketCloud
|
52
|
+
Danger::RequestSources::BitbucketCloud,
|
53
|
+
Danger::RequestSources::VSTS
|
39
54
|
]
|
40
55
|
end
|
41
56
|
|
@@ -34,7 +34,7 @@ module Danger
|
|
34
34
|
def initialize(env)
|
35
35
|
self.repo_url = env["bamboo_planRepository_repositoryUrl"]
|
36
36
|
self.pull_request_id = env["bamboo_repository_pr_key"]
|
37
|
-
repo_matches = self.repo_url.match(%r{([
|
37
|
+
repo_matches = self.repo_url.match(%r{([/:])([^/]+/[^/]+?)(\.git$|$)})
|
38
38
|
self.repo_slug = repo_matches[2] unless repo_matches.nil?
|
39
39
|
end
|
40
40
|
end
|
@@ -16,7 +16,6 @@ module Danger
|
|
16
16
|
# You can find them in Settings > Pipelines > Repository Variables
|
17
17
|
|
18
18
|
class BitbucketPipelines < CI
|
19
|
-
|
20
19
|
def self.validates_as_ci?(env)
|
21
20
|
env.key? "BITBUCKET_BUILD_NUMBER"
|
22
21
|
end
|
@@ -31,7 +30,7 @@ module Danger
|
|
31
30
|
|
32
31
|
def initialize(env)
|
33
32
|
self.repo_url = env["BITBUCKET_GIT_HTTP_ORIGIN"]
|
34
|
-
self.repo_slug = "#{env[
|
33
|
+
self.repo_slug = "#{env['BITBUCKET_REPO_OWNER']}/#{env['BITBUCKET_REPO_SLUG']}"
|
35
34
|
self.pull_request_id = env["BITBUCKET_PR_ID"]
|
36
35
|
end
|
37
36
|
end
|
@@ -54,11 +54,11 @@ module Danger
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def repo_slug_from(url)
|
57
|
-
if url =~ URI::
|
57
|
+
if url =~ URI::DEFAULT_PARSER.make_regexp
|
58
58
|
# Try to parse the URL as a valid URI. This should cover the cases of http/https/ssh URLs.
|
59
59
|
begin
|
60
60
|
uri = URI.parse(url)
|
61
|
-
return uri.path.sub(
|
61
|
+
return uri.path.sub(%r{^(/)}, "").sub(/(.git)$/, "")
|
62
62
|
rescue URI::InvalidURIError
|
63
63
|
# In case URL could not be parsed fallback to git URL parsing.
|
64
64
|
repo_slug_asgiturl(url)
|
@@ -71,7 +71,7 @@ module Danger
|
|
71
71
|
|
72
72
|
def repo_slug_asgiturl(url)
|
73
73
|
matcher_url = url
|
74
|
-
repo_matches = matcher_url.match(%r{([
|
74
|
+
repo_matches = matcher_url.match(%r{([/:])(([^/]+/)+[^/]+?)(\.git$|$)})[2]
|
75
75
|
return repo_matches unless repo_matches.nil?
|
76
76
|
end
|
77
77
|
end
|
@@ -40,7 +40,7 @@ module Danger
|
|
40
40
|
self.repo_url = env["BUILDKITE_REPO"]
|
41
41
|
self.pull_request_id = env["BUILDKITE_PULL_REQUEST"]
|
42
42
|
|
43
|
-
repo_matches = self.repo_url.match(%r{([
|
43
|
+
repo_matches = self.repo_url.match(%r{([/:])([^/]+/[^/]+?)(\.git$|$)})
|
44
44
|
self.repo_slug = repo_matches[2] unless repo_matches.nil?
|
45
45
|
end
|
46
46
|
|
@@ -36,6 +36,7 @@ module Danger
|
|
36
36
|
build_json = fetch_build(repo_slug, build_number, token)
|
37
37
|
pull_requests = build_json[:pull_requests]
|
38
38
|
return nil unless pull_requests && pull_requests.first
|
39
|
+
|
39
40
|
pull_requests.first[:url]
|
40
41
|
end
|
41
42
|
|
@@ -44,8 +45,7 @@ module Danger
|
|
44
45
|
url = "project/#{repo_slug}/#{build_number}"
|
45
46
|
params = { "circle-token" => token }
|
46
47
|
response = client.get url, params, accept: "application/json"
|
47
|
-
|
48
|
-
json
|
48
|
+
JSON.parse(response.body, symbolize_names: true)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -39,7 +39,7 @@ module Danger
|
|
39
39
|
|
40
40
|
gh_host = env["DANGER_GITHUB_HOST"] || "github.com"
|
41
41
|
|
42
|
-
env["CODEBUILD_SOURCE_REPO_URL"].gsub(%r{^.*?#{Regexp.escape(gh_host)}
|
42
|
+
env["CODEBUILD_SOURCE_REPO_URL"].gsub(%r{^.*?#{Regexp.escape(gh_host)}/(.*?)(\.git)?$}, '\1')
|
43
43
|
end
|
44
44
|
|
45
45
|
def self.extract_repo_url(env)
|
@@ -39,7 +39,7 @@ module Danger
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def initialize(env)
|
42
|
-
self.repo_url = env["CF_COMMIT_URL"].to_s.gsub(
|
42
|
+
self.repo_url = env["CF_COMMIT_URL"].to_s.gsub(%r{/commit.+$}, "")
|
43
43
|
self.repo_slug = self.class.slug_from(env)
|
44
44
|
self.pull_request_id = env["CF_PULL_REQUEST_NUMBER"]
|
45
45
|
end
|
@@ -2,10 +2,10 @@ require "git"
|
|
2
2
|
require "danger/request_sources/local_only"
|
3
3
|
|
4
4
|
module Danger
|
5
|
-
# Concourse CI Integration
|
6
|
-
#
|
7
|
-
# https://concourse-ci.org/
|
8
|
-
#
|
5
|
+
# Concourse CI Integration
|
6
|
+
#
|
7
|
+
# https://concourse-ci.org/
|
8
|
+
#
|
9
9
|
# ### CI Setup
|
10
10
|
#
|
11
11
|
# With Concourse, you run the docker images yourself, so you will want to add `yarn danger ci` within one of your build jobs.
|
@@ -56,6 +56,5 @@ module Danger
|
|
56
56
|
end
|
57
57
|
self.repo_url = GitRepo.new.origins
|
58
58
|
end
|
59
|
-
|
60
59
|
end
|
61
60
|
end
|
@@ -21,17 +21,15 @@ module Danger
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def supported_request_sources
|
24
|
-
@supported_request_sources ||=
|
25
|
-
|
26
|
-
|
27
|
-
]
|
28
|
-
end
|
24
|
+
@supported_request_sources ||= [
|
25
|
+
Danger::RequestSources::GitHub
|
26
|
+
]
|
29
27
|
end
|
30
28
|
|
31
29
|
def initialize(env)
|
32
30
|
self.repo_url = self.class.repo_url(env)
|
33
31
|
self.pull_request_id = self.class.pull_request_id(env)
|
34
|
-
repo_matches = self.repo_url.match(%r{([
|
32
|
+
repo_matches = self.repo_url.match(%r{([/:])([^/]+/[^/]+)$})
|
35
33
|
self.repo_slug = repo_matches[2].gsub(/\.git$/, "") unless repo_matches.nil?
|
36
34
|
end
|
37
35
|
|
@@ -9,7 +9,7 @@ module Danger
|
|
9
9
|
# ```yml
|
10
10
|
# ...
|
11
11
|
# steps:
|
12
|
-
# - uses: actions/checkout@
|
12
|
+
# - uses: actions/checkout@v3
|
13
13
|
# - uses: danger/danger@master
|
14
14
|
# env:
|
15
15
|
# DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
@@ -22,7 +22,7 @@ module Danger
|
|
22
22
|
|
23
23
|
def self.validates_as_pr?(env)
|
24
24
|
value = env["GITHUB_EVENT_NAME"]
|
25
|
-
|
25
|
+
["pull_request", "pull_request_target"].include?(value)
|
26
26
|
end
|
27
27
|
|
28
28
|
def supported_request_sources
|
@@ -32,12 +32,12 @@ module Danger
|
|
32
32
|
def initialize(env)
|
33
33
|
self.repo_slug = env["GITHUB_REPOSITORY"]
|
34
34
|
pull_request_event = JSON.parse(File.read(env["GITHUB_EVENT_PATH"]))
|
35
|
-
self.pull_request_id = pull_request_event[
|
36
|
-
self.repo_url = pull_request_event[
|
35
|
+
self.pull_request_id = pull_request_event["number"]
|
36
|
+
self.repo_url = pull_request_event["repository"]["clone_url"]
|
37
37
|
|
38
38
|
# if environment variable DANGER_GITHUB_API_TOKEN is not set, use env GITHUB_TOKEN
|
39
|
-
if (env.key? "GITHUB_ACTION") && (!env.key?
|
40
|
-
env[
|
39
|
+
if (env.key? "GITHUB_ACTION") && (!env.key? "DANGER_GITHUB_API_TOKEN")
|
40
|
+
env["DANGER_GITHUB_API_TOKEN"] = env["GITHUB_TOKEN"]
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -47,11 +47,11 @@ module Danger
|
|
47
47
|
client = RequestSources::GitLab.new(nil, env).client
|
48
48
|
|
49
49
|
client_version = Gem::Version.new(client.version.version)
|
50
|
-
if
|
51
|
-
#Use the 'list merge requests associated with a commit' API, for speed
|
50
|
+
if client_version >= Gem::Version.new("10.7")
|
51
|
+
# Use the 'list merge requests associated with a commit' API, for speed
|
52
52
|
# (GET /projects/:id/repository/commits/:sha/merge_requests) available for GitLab >= 10.7
|
53
53
|
merge_request = client.commit_merge_requests(project_path, base_commit, state: :opened).first
|
54
|
-
if
|
54
|
+
if client_version >= Gem::Version.new("13.8")
|
55
55
|
# Gitlab 13.8.0 started returning merge requests for merge commits and squashed commits
|
56
56
|
# By checking for merge_request.state, we can ensure danger only comments on MRs which are open
|
57
57
|
return 0 if merge_request.nil?
|
@@ -68,7 +68,7 @@ module Danger
|
|
68
68
|
|
69
69
|
def self.slug_from(env)
|
70
70
|
if env["DANGER_PROJECT_REPO_URL"]
|
71
|
-
env["DANGER_PROJECT_REPO_URL"].split(
|
71
|
+
env["DANGER_PROJECT_REPO_URL"].split("/").last(2).join("/")
|
72
72
|
else
|
73
73
|
env["CI_MERGE_REQUEST_PROJECT_PATH"] || env["CI_PROJECT_PATH"]
|
74
74
|
end
|
@@ -48,6 +48,7 @@ module Danger
|
|
48
48
|
#
|
49
49
|
class Jenkins < CI
|
50
50
|
attr_accessor :project_url
|
51
|
+
|
51
52
|
class EnvNotFound < StandardError
|
52
53
|
def initialize
|
53
54
|
super("ENV not found, please check your Jenkins. Related: https://stackoverflow.com/search?q=jenkins+env+null")
|
@@ -60,18 +61,16 @@ module Danger
|
|
60
61
|
|
61
62
|
def self.validates_as_pr?(env)
|
62
63
|
id = pull_request_id(env)
|
63
|
-
!id.nil? && !id.empty? && !!id.match(
|
64
|
+
!id.nil? && !id.empty? && !!id.match(/^\d+$/)
|
64
65
|
end
|
65
66
|
|
66
67
|
def supported_request_sources
|
67
|
-
@supported_request_sources ||=
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
]
|
74
|
-
end
|
68
|
+
@supported_request_sources ||= [
|
69
|
+
Danger::RequestSources::GitHub,
|
70
|
+
Danger::RequestSources::GitLab,
|
71
|
+
Danger::RequestSources::BitbucketServer,
|
72
|
+
Danger::RequestSources::BitbucketCloud
|
73
|
+
]
|
75
74
|
end
|
76
75
|
|
77
76
|
def initialize(env)
|
@@ -85,29 +84,29 @@ module Danger
|
|
85
84
|
|
86
85
|
def self.repo_slug(repo_url)
|
87
86
|
slug = self.slug_ssh(repo_url)
|
88
|
-
slug
|
89
|
-
slug
|
90
|
-
slug
|
87
|
+
slug ||= self.slug_http(repo_url)
|
88
|
+
slug ||= self.slug_bitbucket(repo_url)
|
89
|
+
slug ||= self.slug_fallback(repo_url)
|
91
90
|
return slug.gsub(/\.git$/, "") unless slug.nil?
|
92
91
|
end
|
93
92
|
|
94
93
|
def self.slug_bitbucket(repo_url)
|
95
|
-
repo_matches = repo_url.match(%r{(?:[
|
94
|
+
repo_matches = repo_url.match(%r{(?:[/:])projects/([^/.]+)/repos/([^/.]+)})
|
96
95
|
return "#{repo_matches[1]}/#{repo_matches[2]}" if repo_matches
|
97
96
|
end
|
98
97
|
|
99
98
|
def self.slug_ssh(repo_url)
|
100
|
-
repo_matches = repo_url.match(
|
99
|
+
repo_matches = repo_url.match(/^git@.+:(.+)/)
|
101
100
|
return repo_matches[1] if repo_matches
|
102
101
|
end
|
103
102
|
|
104
103
|
def self.slug_http(repo_url)
|
105
|
-
repo_matches = repo_url.match(%r{^https?.+(?>\.\w*\d
|
104
|
+
repo_matches = repo_url.match(%r{^https?.+(?>\.\w*\d*/)(.+.git$)})
|
106
105
|
return repo_matches[1] if repo_matches
|
107
106
|
end
|
108
107
|
|
109
108
|
def self.slug_fallback(repo_url)
|
110
|
-
repo_matches = repo_url.match(%r{([
|
109
|
+
repo_matches = repo_url.match(%r{([/:])([^/]+/[^/]+)$})
|
111
110
|
return repo_matches[2]
|
112
111
|
end
|
113
112
|
|
@@ -129,14 +128,14 @@ module Danger
|
|
129
128
|
elsif env["CHANGE_URL"]
|
130
129
|
change_url = env["CHANGE_URL"]
|
131
130
|
case change_url
|
132
|
-
when %r{
|
133
|
-
matches = change_url.match(%r{(.+)
|
131
|
+
when %r{/pull/} # GitHub
|
132
|
+
matches = change_url.match(%r{(.+)/pull/[0-9]+})
|
134
133
|
matches[1] unless matches.nil?
|
135
|
-
when %r{
|
136
|
-
matches = change_url.match(%r{(.+?)(
|
134
|
+
when %r{/merge_requests/} # GitLab
|
135
|
+
matches = change_url.match(%r{(.+?)(/-)?/merge_requests/[0-9]+})
|
137
136
|
matches[1] unless matches.nil?
|
138
|
-
when %r{
|
139
|
-
matches = change_url.match(%r{(.+)
|
137
|
+
when %r{/pull-requests/} # Bitbucket
|
138
|
+
matches = change_url.match(%r{(.+)/pull-requests/[0-9]+})
|
140
139
|
matches[1] unless matches.nil?
|
141
140
|
else
|
142
141
|
change_url
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
# For more info see: https://github.com/schacon/ruby-git
|
3
4
|
|
4
5
|
require "git"
|
@@ -34,7 +35,12 @@ module Danger
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def supported_request_sources
|
37
|
-
@supported_request_sources ||= [
|
38
|
+
@supported_request_sources ||= [
|
39
|
+
Danger::RequestSources::GitHub,
|
40
|
+
Danger::RequestSources::BitbucketServer,
|
41
|
+
Danger::RequestSources::BitbucketCloud,
|
42
|
+
Danger::RequestSources::VSTS
|
43
|
+
]
|
38
44
|
end
|
39
45
|
|
40
46
|
def initialize(env = {})
|
@@ -4,19 +4,20 @@ module Danger
|
|
4
4
|
class FindRepoInfoFromURL
|
5
5
|
REGEXP = %r{
|
6
6
|
://[^/]+/
|
7
|
-
(
|
8
|
-
(
|
7
|
+
(([^/]+/){1,2}_git/)?
|
8
|
+
(?<slug>[^/]+(/[^/]+){0,2})
|
9
|
+
(/(pull|pullrequest|merge_requests|pull-requests)/)
|
9
10
|
(?<id>\d+)
|
10
|
-
}x
|
11
|
-
|
11
|
+
}x.freeze
|
12
|
+
|
12
13
|
# Regex used to extract info from Bitbucket server URLs, as they use a quite different format
|
13
14
|
REGEXPBB = %r{
|
14
|
-
(?:[
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
}x
|
15
|
+
(?:[/:])projects
|
16
|
+
/([^/.]+)
|
17
|
+
/repos/([^/.]+)
|
18
|
+
/pull-requests
|
19
|
+
/(\d+)
|
20
|
+
}x.freeze
|
20
21
|
|
21
22
|
def initialize(url)
|
22
23
|
@url = url
|
@@ -28,7 +28,7 @@ module Danger
|
|
28
28
|
["true", "1", "yes", "y", true].include?(maybe_string)
|
29
29
|
end
|
30
30
|
|
31
|
-
def raise_pull_request_not_found!(
|
31
|
+
def raise_pull_request_not_found!(_pull_request)
|
32
32
|
if specific_pull_request_id.empty?
|
33
33
|
raise "No recent Pull Requests found for this repo, danger requires at least one Pull Request for the local mode."
|
34
34
|
else
|
@@ -81,6 +81,12 @@ module Danger
|
|
81
81
|
remote_pull_request.head.sha,
|
82
82
|
remote_pull_request.base.sha
|
83
83
|
)
|
84
|
+
when :vsts
|
85
|
+
RemotePullRequest.new(
|
86
|
+
remote_pull_request[:pullRequestId].to_s,
|
87
|
+
remote_pull_request[:lastMergeSourceCommit][:commitId],
|
88
|
+
remote_pull_request[:lastMergeTargetCommit][:commitId]
|
89
|
+
)
|
84
90
|
else
|
85
91
|
raise "SCM provider not supported: #{scm_provider}"
|
86
92
|
end
|
@@ -96,16 +102,12 @@ module Danger
|
|
96
102
|
|
97
103
|
# @return [String] Log line of format: "Merge pull request #42"
|
98
104
|
def most_recent_merged_pull_request
|
99
|
-
@most_recent_merged_pull_request ||=
|
100
|
-
git_logs.lines.grep(/Merge pull request #{pull_request_ref} from/)[0]
|
101
|
-
end
|
105
|
+
@most_recent_merged_pull_request ||= git_logs.lines.grep(/Merge pull request #{pull_request_ref} from/)[0]
|
102
106
|
end
|
103
107
|
|
104
108
|
# @return [String] Log line of format: "description (#42)"
|
105
109
|
def most_recent_squash_and_merged_pull_request
|
106
|
-
@most_recent_squash_and_merged_pull_request ||=
|
107
|
-
git_logs.lines.grep(/\(#{pull_request_ref}\)/)[0]
|
108
|
-
end
|
110
|
+
@most_recent_squash_and_merged_pull_request ||= git_logs.lines.grep(/\(#{pull_request_ref}\)/)[0]
|
109
111
|
end
|
110
112
|
|
111
113
|
def pick_the_most_recent_one_from_two_matches
|
@@ -144,6 +146,10 @@ module Danger
|
|
144
146
|
require "danger/request_sources/bitbucket_server_api"
|
145
147
|
project, slug = repo_slug.split("/")
|
146
148
|
RequestSources::BitbucketServerAPI.new(project, slug, specific_pull_request_id, env)
|
149
|
+
|
150
|
+
when :vsts
|
151
|
+
require "danger/request_sources/vsts_api"
|
152
|
+
RequestSources::VSTSAPI.new(repo_slug, specific_pull_request_id, env)
|
147
153
|
|
148
154
|
when :github
|
149
155
|
require "octokit"
|
@@ -174,6 +180,8 @@ module Danger
|
|
174
180
|
:bitbucket_cloud
|
175
181
|
elsif remote_url =~ %r{/pull-requests/}
|
176
182
|
:bitbucket_server
|
183
|
+
elsif remote_url =~ /\.visualstudio\.com/i || remote_url =~ /dev\.azure\.com/i
|
184
|
+
:vsts
|
177
185
|
else
|
178
186
|
:github
|
179
187
|
end
|