danger 9.5.3 → 9.6.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.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/bin/danger +2 -0
  3. data/lib/danger/ci_source/appcenter.rb +2 -0
  4. data/lib/danger/ci_source/appcircle.rb +2 -0
  5. data/lib/danger/ci_source/appveyor.rb +2 -0
  6. data/lib/danger/ci_source/azure_pipelines.rb +2 -0
  7. data/lib/danger/ci_source/bamboo.rb +2 -0
  8. data/lib/danger/ci_source/bitbucket_pipelines.rb +2 -0
  9. data/lib/danger/ci_source/bitrise.rb +2 -1
  10. data/lib/danger/ci_source/buddybuild.rb +2 -0
  11. data/lib/danger/ci_source/buildkite.rb +2 -0
  12. data/lib/danger/ci_source/ci_source.rb +2 -0
  13. data/lib/danger/ci_source/circle.rb +3 -1
  14. data/lib/danger/ci_source/circle_api.rb +5 -3
  15. data/lib/danger/ci_source/cirrus.rb +2 -0
  16. data/lib/danger/ci_source/code_build.rb +2 -0
  17. data/lib/danger/ci_source/codefresh.rb +3 -1
  18. data/lib/danger/ci_source/codemagic.rb +2 -0
  19. data/lib/danger/ci_source/codeship.rb +2 -0
  20. data/lib/danger/ci_source/concourse.rb +2 -0
  21. data/lib/danger/ci_source/dotci.rb +2 -0
  22. data/lib/danger/ci_source/drone.rb +2 -0
  23. data/lib/danger/ci_source/github_actions.rb +2 -0
  24. data/lib/danger/ci_source/gitlab_ci.rb +2 -0
  25. data/lib/danger/ci_source/jenkins.rb +2 -0
  26. data/lib/danger/ci_source/local_git_repo.rb +9 -5
  27. data/lib/danger/ci_source/screwdriver.rb +2 -0
  28. data/lib/danger/ci_source/semaphore.rb +2 -0
  29. data/lib/danger/ci_source/support/commits.rb +3 -1
  30. data/lib/danger/ci_source/support/find_repo_info_from_logs.rb +3 -1
  31. data/lib/danger/ci_source/support/find_repo_info_from_url.rb +5 -1
  32. data/lib/danger/ci_source/support/local_pull_request.rb +3 -1
  33. data/lib/danger/ci_source/support/no_pull_request.rb +2 -0
  34. data/lib/danger/ci_source/support/no_repo_info.rb +2 -0
  35. data/lib/danger/ci_source/support/pull_request_finder.rb +67 -28
  36. data/lib/danger/ci_source/support/remote_pull_request.rb +2 -0
  37. data/lib/danger/ci_source/support/repo_info.rb +2 -0
  38. data/lib/danger/ci_source/surf.rb +2 -0
  39. data/lib/danger/ci_source/teamcity.rb +14 -1
  40. data/lib/danger/ci_source/travis.rb +2 -0
  41. data/lib/danger/ci_source/xcode_cloud.rb +2 -0
  42. data/lib/danger/ci_source/xcode_server.rb +2 -0
  43. data/lib/danger/clients/rubygems_client.rb +4 -2
  44. data/lib/danger/commands/dangerfile/gem.rb +3 -1
  45. data/lib/danger/commands/dangerfile/init.rb +3 -1
  46. data/lib/danger/commands/dry_run.rb +2 -0
  47. data/lib/danger/commands/init.rb +22 -20
  48. data/lib/danger/commands/init_helpers/interviewer.rb +6 -4
  49. data/lib/danger/commands/local.rb +2 -0
  50. data/lib/danger/commands/local_helpers/http_cache.rb +2 -0
  51. data/lib/danger/commands/local_helpers/local_setup.rb +4 -5
  52. data/lib/danger/commands/local_helpers/pry_setup.rb +3 -1
  53. data/lib/danger/commands/mr.rb +91 -0
  54. data/lib/danger/commands/plugins/plugin_json.rb +2 -0
  55. data/lib/danger/commands/plugins/plugin_lint.rb +2 -0
  56. data/lib/danger/commands/plugins/plugin_readme.rb +2 -0
  57. data/lib/danger/commands/pr.rb +4 -2
  58. data/lib/danger/commands/runner.rb +3 -0
  59. data/lib/danger/commands/staging.rb +2 -0
  60. data/lib/danger/commands/systems.rb +3 -1
  61. data/lib/danger/core_ext/file_list.rb +2 -0
  62. data/lib/danger/core_ext/string.rb +6 -4
  63. data/lib/danger/danger_core/dangerfile.rb +7 -4
  64. data/lib/danger/danger_core/dangerfile_dsl.rb +2 -0
  65. data/lib/danger/danger_core/dangerfile_generator.rb +2 -0
  66. data/lib/danger/danger_core/environment_manager.rb +13 -10
  67. data/lib/danger/danger_core/executor.rb +3 -1
  68. data/lib/danger/danger_core/messages/base.rb +7 -2
  69. data/lib/danger/danger_core/messages/markdown.rb +36 -6
  70. data/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb +2 -0
  71. data/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb +4 -2
  72. data/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb +2 -0
  73. data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +2 -0
  74. data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +3 -1
  75. data/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +3 -1
  76. data/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +2 -0
  77. data/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +19 -1
  78. data/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb +4 -2
  79. data/lib/danger/danger_core/standard_error.rb +5 -3
  80. data/lib/danger/helpers/array_subclass.rb +2 -0
  81. data/lib/danger/helpers/comment.rb +2 -0
  82. data/lib/danger/helpers/comments_helper.rb +2 -0
  83. data/lib/danger/helpers/comments_parsing_helper.rb +6 -3
  84. data/lib/danger/helpers/emoji_mapper.rb +5 -3
  85. data/lib/danger/helpers/find_max_num_violations.rb +2 -0
  86. data/lib/danger/helpers/message_groups_array_helper.rb +2 -0
  87. data/lib/danger/plugin_support/gems_resolver.rb +2 -0
  88. data/lib/danger/plugin_support/plugin.rb +2 -0
  89. data/lib/danger/plugin_support/plugin_file_resolver.rb +3 -1
  90. data/lib/danger/plugin_support/plugin_linter.rb +8 -6
  91. data/lib/danger/request_sources/bitbucket_cloud.rb +2 -0
  92. data/lib/danger/request_sources/bitbucket_cloud_api.rb +2 -2
  93. data/lib/danger/request_sources/bitbucket_server.rb +3 -1
  94. data/lib/danger/request_sources/bitbucket_server_api.rb +2 -2
  95. data/lib/danger/request_sources/code_insights_api.rb +2 -2
  96. data/lib/danger/request_sources/github/github.rb +71 -11
  97. data/lib/danger/request_sources/github/github_review.rb +9 -7
  98. data/lib/danger/request_sources/github/github_review_resolver.rb +2 -0
  99. data/lib/danger/request_sources/github/github_review_unsupported.rb +2 -0
  100. data/lib/danger/request_sources/gitlab.rb +17 -18
  101. data/lib/danger/request_sources/local_only.rb +2 -0
  102. data/lib/danger/request_sources/request_source.rb +3 -3
  103. data/lib/danger/request_sources/support/get_ignored_violation.rb +2 -0
  104. data/lib/danger/request_sources/vsts.rb +2 -1
  105. data/lib/danger/request_sources/vsts_api.rb +2 -2
  106. data/lib/danger/scm_source/git_repo.rb +2 -0
  107. data/lib/danger/version.rb +4 -2
  108. data/lib/danger.rb +4 -2
  109. metadata +4 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1a29ac64cb5013e28a0e137ba85672f035a3116508c15815ff34e2e4c2efe71
4
- data.tar.gz: ccd8f3bf454de07224648c91fcff6f4e63d8173b50215d769de44230b4621e16
3
+ metadata.gz: 3c20de89d82a1a32f926300a84b0a1313a7d3c1d5c35c91b4eed2667eec5788c
4
+ data.tar.gz: 208508f00a6542efe5c5f7357a87f943e50384b7c999771e669c9c585df4e3a7
5
5
  SHA512:
6
- metadata.gz: 11a8ad39bcfbddb55c4683e7a7852d79ac17f74f5da55dcfabc796ac4b83a5f4b45d2ad5de53cc8bfdb47034c0572d546ff225b021c4420a751c3d9e0cd9962e
7
- data.tar.gz: 6dd015355fb17c8bf4a4f79eec81e4e755b1e6eb94268d55809f4146b41367ed474969ce08358e8ef2deb05998af89ec04414ae0caed6407ff28ef24c374452d
6
+ metadata.gz: bc94ca5d7d28214e3cf4166dce28369a1a22e7173eee2d5c1c0a34a826c32c97c7d58e37ba66a9e87a2ea3540ffe6674ea64be705e0ca920166df856b7bcd116
7
+ data.tar.gz: 3929c665775cf4af212c36a9ea898b9850dc3358d79597707fdd4b166d4b605777d85c793b54eeb72ac8e3207be217b17be602a3d395c2a749962d076bc5aaf1
data/bin/danger CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
2
4
  $LOAD_PATH.push File.expand_path("../lib", __dir__)
3
5
 
4
6
  require "danger"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://docs.microsoft.com/en-us/appcenter/build/custom/variables/
2
4
  require "uri"
3
5
  require "danger/request_sources/github/github"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://docs.appcircle.io/environment-variables/managing-variables
2
4
  # https://docs.appcircle.io/build/build-profile-configuration#environment-variables-configuration
3
5
  require "danger/request_sources/github/github"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://www.appveyor.com/docs/build-configuration/
2
4
  module Danger
3
5
  # ### CI Setup
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables
2
4
  require "uri"
3
5
  require "danger/request_sources/github/github"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "set"
2
4
 
3
5
  module Danger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  # ### CI Setup
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # http://devcenter.bitrise.io/docs/available-environment-variables
2
4
  require "danger/request_sources/github/github"
3
5
  require "danger/request_sources/gitlab"
@@ -49,7 +51,6 @@ module Danger
49
51
  self.pull_request_id = env["BITRISE_PULL_REQUEST"]
50
52
  self.repo_url = env["GIT_REPOSITORY_URL"]
51
53
 
52
- matcher_url = self.repo_url
53
54
  self.repo_slug = repo_slug_from(self.repo_url)
54
55
  end
55
56
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  # ### CI Setup
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://buildkite.com/docs/agent/osx
2
4
  # https://buildkite.com/docs/guides/environment-variables
3
5
  require "danger/request_sources/github/github"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "set"
2
4
 
3
5
  module Danger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://circleci.com/docs/environment-variables
2
4
  require "uri"
3
5
  require "danger/ci_source/circle_api"
@@ -78,7 +80,7 @@ module Danger
78
80
  pr_path = URI.parse(pr_url).path.split("/")
79
81
  if pr_path.count == 5
80
82
  # The first one is an extra slash, ignore it
81
- self.repo_slug = pr_path[1] + "/" + pr_path[2]
83
+ self.repo_slug = "#{pr_path[1]}/#{pr_path[2]}"
82
84
  self.pull_request_id = pr_path[4]
83
85
 
84
86
  else
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "faraday"
2
4
 
3
5
  module Danger
@@ -15,10 +17,10 @@ module Danger
15
17
  url = env["CI_PULL_REQUEST"]
16
18
 
17
19
  if url.nil? && !env["CIRCLE_PROJECT_USERNAME"].nil? && !env["CIRCLE_PROJECT_REPONAME"].nil?
18
- repo_slug = env["CIRCLE_PROJECT_USERNAME"] + "/" + env["CIRCLE_PROJECT_REPONAME"]
20
+ repo_slug = "#{env['CIRCLE_PROJECT_USERNAME']}/#{env['CIRCLE_PROJECT_REPONAME']}"
19
21
  if !env["CIRCLE_PR_NUMBER"].nil?
20
22
  host = env["DANGER_GITHUB_HOST"] || "github.com"
21
- url = "https://" + host + "/" + repo_slug + "/pull/" + env["CIRCLE_PR_NUMBER"]
23
+ url = "https://#{host}/#{repo_slug}/pull/#{env['CIRCLE_PR_NUMBER']}"
22
24
  else
23
25
  token = env["DANGER_CIRCLE_CI_API_TOKEN"]
24
26
  url = fetch_pull_request_url(repo_slug, env["CIRCLE_BUILD_NUM"], token)
@@ -35,7 +37,7 @@ module Danger
35
37
  def fetch_pull_request_url(repo_slug, build_number, token)
36
38
  build_json = fetch_build(repo_slug, build_number, token)
37
39
  pull_requests = build_json[:pull_requests]
38
- return nil unless pull_requests && pull_requests.first
40
+ return nil unless pull_requests&.first
39
41
 
40
42
  pull_requests.first[:url]
41
43
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/request_sources/github/github"
2
4
 
3
5
  module Danger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
2
4
  require "danger/request_sources/github/github"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://semaphoreci.com/docs/available-environment-variables.html
2
4
  require "danger/request_sources/github/github"
3
5
 
@@ -35,7 +37,7 @@ module Danger
35
37
  return "" if env["CF_REPO_OWNER"].to_s.empty?
36
38
  return "" if env["CF_REPO_NAME"].to_s.empty?
37
39
 
38
- "#{env['CF_REPO_OWNER']}/#{env['CF_REPO_NAME']}".downcase!
40
+ "#{env['CF_REPO_OWNER']}/#{env['CF_REPO_NAME']}".downcase
39
41
  end
40
42
 
41
43
  def initialize(env)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://docs.codemagic.io/building/environment-variables/
2
4
 
3
5
  module Danger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://semaphoreci.com/docs/available-environment-variables.html
2
4
  require "danger/request_sources/github/github"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "git"
2
4
  require "danger/request_sources/local_only"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/request_sources/github/github"
2
4
 
3
5
  module Danger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # http://readme.drone.io/usage/variables/
2
4
  require "danger/request_sources/github/github"
3
5
  require "danger/request_sources/gitlab"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/request_sources/github/github"
2
4
 
3
5
  module Danger
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # http://docs.gitlab.com/ce/ci/variables/README.html
2
4
  require "uri"
3
5
  require "danger/request_sources/github/github"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables
2
4
  # https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
3
5
  require "danger/request_sources/github/github"
@@ -38,7 +38,8 @@ module Danger
38
38
  Danger::RequestSources::GitHub,
39
39
  Danger::RequestSources::BitbucketServer,
40
40
  Danger::RequestSources::BitbucketCloud,
41
- Danger::RequestSources::VSTS
41
+ Danger::RequestSources::VSTS,
42
+ Danger::RequestSources::GitLab
42
43
  ]
43
44
  end
44
45
 
@@ -74,7 +75,8 @@ module Danger
74
75
 
75
76
  def find_remote_info(env)
76
77
  if given_pull_request_url?(env)
77
- FindRepoInfoFromURL.new(env["LOCAL_GIT_PR_URL"]).call
78
+ pr_url = env["LOCAL_GIT_PR_URL"] || env["LOCAL_GIT_MR_URL"]
79
+ FindRepoInfoFromURL.new(pr_url).call
78
80
  else
79
81
  FindRepoInfoFromLogs.new(
80
82
  env["DANGER_GITHUB_HOST"] || "github.com",
@@ -85,15 +87,16 @@ module Danger
85
87
 
86
88
  def find_pull_request(env)
87
89
  if given_pull_request_url?(env)
90
+ remote_url = env["LOCAL_GIT_PR_URL"] || env["LOCAL_GIT_MR_URL"]
88
91
  PullRequestFinder.new(
89
92
  remote_info.id,
90
93
  remote_info.slug,
91
94
  remote: true,
92
- remote_url: env["LOCAL_GIT_PR_URL"]
95
+ remote_url: remote_url
93
96
  ).call(env: env)
94
97
  else
95
98
  PullRequestFinder.new(
96
- env.fetch("LOCAL_GIT_PR_ID") { "" },
99
+ env.fetch("LOCAL_GIT_PR_ID") { env.fetch("LOCAL_GIT_MR_ID", "") },
97
100
  remote_info.slug,
98
101
  remote: false,
99
102
  git_logs: run_git("log --oneline -1000000")
@@ -102,7 +105,8 @@ module Danger
102
105
  end
103
106
 
104
107
  def given_pull_request_url?(env)
105
- env["LOCAL_GIT_PR_URL"] && !env["LOCAL_GIT_PR_URL"].empty?
108
+ (env["LOCAL_GIT_PR_URL"] && !env["LOCAL_GIT_PR_URL"].empty?) ||
109
+ (env["LOCAL_GIT_MR_URL"] && !env["LOCAL_GIT_MR_URL"].empty?)
106
110
  end
107
111
 
108
112
  def sha
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # http://screwdriver.cd
2
4
  # https://docs.screwdriver.cd/user-guide/environment-variables
3
5
  require "danger/request_sources/github/github"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://docs.semaphoreci.com/article/12-environment-variables
2
4
  require "danger/request_sources/github/github"
3
5
 
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  class Commits
3
5
  def initialize(base_head)
4
- @base_head = base_head.strip.split(" ".freeze)
6
+ @base_head = base_head.strip.split(" ")
5
7
  end
6
8
 
7
9
  def base
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/ci_source/support/repo_info"
2
4
 
3
5
  module Danger
@@ -20,7 +22,7 @@ module Danger
20
22
  attr_reader :remote_logs, :github_host
21
23
 
22
24
  def remote
23
- remote_logs.lines.grep(/Fetch URL/)[0].split(": ".freeze, 2)[1]
25
+ remote_logs.lines.grep(/Fetch URL/)[0].split(": ", 2)[1]
24
26
  end
25
27
 
26
28
  def regexp
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/ci_source/support/repo_info"
2
4
 
3
5
  module Danger
@@ -31,7 +33,9 @@ module Danger
31
33
  else
32
34
  matched = url.match(REGEXP)
33
35
  if matched
34
- RepoInfo.new(matched[:slug], matched[:id])
36
+ # Clean up the slug to remove any trailing dashes or slashes that might be part of the GitLab URL format
37
+ clean_slug = matched[:slug].gsub(%r{[-/]+$}, "")
38
+ RepoInfo.new(clean_slug, matched[:id])
35
39
  end
36
40
  end
37
41
  end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  class LocalPullRequest
3
5
  attr_reader :pull_request_id, :sha
4
6
 
5
7
  def initialize(log_line)
6
8
  @pull_request_id = log_line.match(/#(?<id>[0-9]+)/)[:id]
7
- @sha = log_line.split(" ".freeze).first
9
+ @sha = log_line.split(" ").first
8
10
  end
9
11
 
10
12
  def valid?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  class NoPullRequest
3
5
  def valid?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  class NoRepoInfo
3
5
  attr_reader :slug, :id
@@ -81,6 +81,12 @@ module Danger
81
81
  remote_pull_request.head.sha,
82
82
  remote_pull_request.base.sha
83
83
  )
84
+ when :gitlab
85
+ RemotePullRequest.new(
86
+ remote_pull_request.iid.to_s,
87
+ remote_pull_request.diff_refs.head_sha,
88
+ remote_pull_request.diff_refs.base_sha
89
+ )
84
90
  when :vsts
85
91
  RemotePullRequest.new(
86
92
  remote_pull_request[:pullRequestId].to_s,
@@ -93,7 +99,13 @@ module Danger
93
99
  end
94
100
 
95
101
  def find_remote_pull_request(env)
96
- client(env).pull_request(repo_slug, specific_pull_request_id)
102
+ scm_provider = find_scm_provider(remote_url)
103
+
104
+ if scm_provider == :gitlab
105
+ client(env).merge_request(repo_slug, specific_pull_request_id)
106
+ else
107
+ client(env).pull_request(repo_slug, specific_pull_request_id)
108
+ end
97
109
  end
98
110
 
99
111
  def both_present?
@@ -138,50 +150,77 @@ module Danger
138
150
 
139
151
  case scm_provider
140
152
  when :bitbucket_cloud
141
- require "danger/request_sources/bitbucket_cloud_api"
142
- branch_name = ENV["DANGER_BITBUCKET_TARGET_BRANCH"] # Optional env variable (specifying the target branch) to help find the PR.
143
- RequestSources::BitbucketCloudAPI.new(repo_slug, specific_pull_request_id, branch_name, env)
144
-
153
+ bitbucket_cloud_client(env)
145
154
  when :bitbucket_server
146
- require "danger/request_sources/bitbucket_server_api"
147
- project, slug = repo_slug.split("/")
148
- RequestSources::BitbucketServerAPI.new(project, slug, specific_pull_request_id, env)
149
-
155
+ bitbucket_server_client(env)
150
156
  when :vsts
151
- require "danger/request_sources/vsts_api"
152
- RequestSources::VSTSAPI.new(repo_slug, specific_pull_request_id, env)
153
-
157
+ vsts_client(env)
158
+ when :gitlab
159
+ gitlab_client(env)
154
160
  when :github
155
- require "octokit"
156
- access_token = ENV["DANGER_GITHUB_API_TOKEN"]
157
- bearer_token = ENV["DANGER_GITHUB_BEARER_TOKEN"]
158
- if bearer_token && !bearer_token.empty?
159
- Octokit::Client.new(bearer_token: bearer_token, api_endpoint: api_url)
160
- elsif access_token && !access_token.empty?
161
- Octokit::Client.new(access_token: access_token, api_endpoint: api_url)
162
- else
163
- raise "No API token given, please provide one using `DANGER_GITHUB_API_TOKEN` or `DANGER_GITHUB_BEARER_TOKEN`"
164
- end
161
+ github_client(env)
165
162
  else
166
163
  raise "SCM provider not supported: #{scm_provider}"
167
164
  end
168
165
  end
169
166
 
167
+ def bitbucket_cloud_client(env)
168
+ require "danger/request_sources/bitbucket_cloud_api"
169
+ branch_name = ENV["DANGER_BITBUCKET_TARGET_BRANCH"] # Optional env variable (specifying the target branch) to help find the PR.
170
+ RequestSources::BitbucketCloudAPI.new(repo_slug, specific_pull_request_id, branch_name, env)
171
+ end
172
+
173
+ def bitbucket_server_client(env)
174
+ require "danger/request_sources/bitbucket_server_api"
175
+ project, slug = repo_slug.split("/")
176
+ RequestSources::BitbucketServerAPI.new(project, slug, specific_pull_request_id, env)
177
+ end
178
+
179
+ def vsts_client(env)
180
+ require "danger/request_sources/vsts_api"
181
+ RequestSources::VSTSAPI.new(repo_slug, specific_pull_request_id, env)
182
+ end
183
+
184
+ def gitlab_client(env)
185
+ require "gitlab"
186
+ token = env&.fetch("DANGER_GITLAB_API_TOKEN", nil) || ENV["DANGER_GITLAB_API_TOKEN"]
187
+ if token && !token.empty?
188
+ endpoint = env&.fetch("DANGER_GITLAB_API_BASE_URL", nil) || env&.fetch("CI_API_V4_URL", nil) || ENV["DANGER_GITLAB_API_BASE_URL"] || ENV.fetch("CI_API_V4_URL", "https://gitlab.com/api/v4")
189
+ Gitlab.client(endpoint: endpoint, private_token: token)
190
+ else
191
+ raise "No API token given, please provide one using `DANGER_GITLAB_API_TOKEN`"
192
+ end
193
+ end
194
+
195
+ def github_client(env)
196
+ require "octokit"
197
+ access_token = env&.fetch("DANGER_GITHUB_API_TOKEN", nil) || ENV["DANGER_GITHUB_API_TOKEN"]
198
+ bearer_token = env&.fetch("DANGER_GITHUB_BEARER_TOKEN", nil) || ENV["DANGER_GITHUB_BEARER_TOKEN"]
199
+ if bearer_token && !bearer_token.empty?
200
+ Octokit::Client.new(bearer_token: bearer_token, api_endpoint: api_url)
201
+ elsif access_token && !access_token.empty?
202
+ Octokit::Client.new(access_token: access_token, api_endpoint: api_url)
203
+ else
204
+ raise "No API token given, please provide one using `DANGER_GITHUB_API_TOKEN` or `DANGER_GITHUB_BEARER_TOKEN`"
205
+ end
206
+ end
207
+
170
208
  def api_url
171
209
  ENV.fetch("DANGER_GITHUB_API_HOST") do
172
- ENV.fetch("DANGER_GITHUB_API_BASE_URL") do
173
- "https://api.github.com/"
174
- end
210
+ ENV.fetch("DANGER_GITHUB_API_BASE_URL", "https://api.github.com/")
175
211
  end
176
212
  end
177
213
 
178
214
  def find_scm_provider(remote_url)
179
- if remote_url =~ %r{/bitbucket.org/}
215
+ case remote_url
216
+ when %r{/bitbucket.org/}
180
217
  :bitbucket_cloud
181
- elsif remote_url =~ %r{/pull-requests/}
218
+ when %r{/pull-requests/}
182
219
  :bitbucket_server
183
- elsif remote_url =~ /\.visualstudio\.com/i || remote_url =~ /dev\.azure\.com/i
220
+ when /\.visualstudio\.com/i, /dev\.azure\.com/i
184
221
  :vsts
222
+ when /gitlab\.com/, %r{-/merge_requests/}
223
+ :gitlab
185
224
  else
186
225
  :github
187
226
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  class RemotePullRequest
3
5
  attr_reader :pull_request_id, :sha, :head, :base
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  class RepoInfo
3
5
  attr_reader :slug, :id
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # http://github.com/surf-build/surf
2
4
  require "danger/request_sources/github/github"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://www.jetbrains.com/teamcity/
2
4
  require "danger/request_sources/github/github"
3
5
  require "danger/request_sources/gitlab"
@@ -65,6 +67,14 @@ module Danger
65
67
  # export BITBUCKET_BRANCH_NAME="%teamcity.build.branch%"
66
68
  # ```
67
69
  #
70
+ # Optionally, you can set `BITBUCKET_PULL_REQUEST_ID` to skip the API call that resolves
71
+ # the pull request ID from the branch name. If you are using the TeamCity
72
+ # [Pull Requests](https://www.jetbrains.com/help/teamcity/pull-requests.html) build feature:
73
+ #
74
+ # ```sh
75
+ # export BITBUCKET_PULL_REQUEST_ID="%teamcity.pullRequest.number%"
76
+ # ```
77
+ #
68
78
  # #### BitBucket Server
69
79
  #
70
80
  # You will need to add the following environment variables as build parameters or by exporting them inside your
@@ -149,8 +159,11 @@ module Danger
149
159
  self.repo_url = env["BITBUCKETSERVER_REPO_URL"]
150
160
  end
151
161
 
152
- # This is a little hacky, because Bitbucket doesn't provide us a PR id
162
+ # Uses BITBUCKET_PULL_REQUEST_ID from the environment if available,
163
+ # otherwise falls back to fetching the PR id from the Bitbucket API.
153
164
  def bitbucket_pr_from_env(env)
165
+ return env["BITBUCKET_PULL_REQUEST_ID"].to_i if env["BITBUCKET_PULL_REQUEST_ID"]
166
+
154
167
  branch_name = env["BITBUCKET_BRANCH_NAME"]
155
168
  repo_slug = env["BITBUCKET_REPO_SLUG"]
156
169
  begin
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # http://docs.travis-ci.com/user/osx-ci-environment/
2
4
  # http://docs.travis-ci.com/user/environment-variables/
3
5
  require "danger/request_sources/github/github"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  # ### CI Setup
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Following the advice from @czechboy0 https://github.com/danger/danger/issues/171
2
4
  # https://github.com/czechboy0/Buildasaur
3
5
  require "danger/request_sources/github/github"
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Danger
2
4
  class RubyGemsClient
3
- API_URL = "https://rubygems.org/api/v1/versions/danger/latest.json".freeze
4
- DUMMY_VERSION = "0.0.0".freeze
5
+ API_URL = "https://rubygems.org/api/v1/versions/danger/latest.json"
6
+ DUMMY_VERSION = "0.0.0"
5
7
 
6
8
  def self.latest_danger_version
7
9
  require "json"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "claide_plugin"
2
4
  require "danger/commands/dangerfile/init"
3
5
 
@@ -17,7 +19,7 @@ module Danger
17
19
 
18
20
  def initialize(argv)
19
21
  @name = argv.shift_argument
20
- prefix = "dangerfile" + "-"
22
+ prefix = "dangerfile-"
21
23
  unless @name.nil? || @name.empty? || @name.start_with?(prefix)
22
24
  @name = prefix + @name.dup
23
25
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/danger_core/dangerfile_generator"
2
4
 
3
5
  # Mainly so we can have a nice structure for commands
@@ -24,7 +26,7 @@ module Danger
24
26
  def run
25
27
  content = DangerfileGenerator.create_dangerfile(".", cork)
26
28
  File.write("Dangerfile", content)
27
- cork.puts "Created" + "./Dangerfile".green
29
+ cork.puts "Created#{'./Dangerfile'.green}"
28
30
  end
29
31
  end
30
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/commands/local_helpers/pry_setup"
2
4
  require "fileutils"
3
5