danger 8.2.1 → 8.6.1

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/danger/ci_source/azure_pipelines.rb +5 -1
  4. data/lib/danger/ci_source/buildkite.rb +1 -1
  5. data/lib/danger/ci_source/codefresh.rb +7 -13
  6. data/lib/danger/ci_source/codemagic.rb +58 -0
  7. data/lib/danger/ci_source/gitlab_ci.rb +18 -17
  8. data/lib/danger/ci_source/jenkins.rb +1 -1
  9. data/lib/danger/ci_source/local_git_repo.rb +29 -37
  10. data/lib/danger/ci_source/local_only_git_repo.rb +4 -8
  11. data/lib/danger/ci_source/support/commits.rb +14 -12
  12. data/lib/danger/ci_source/support/pull_request_finder.rb +43 -40
  13. data/lib/danger/ci_source/xcode_cloud.rb +38 -0
  14. data/lib/danger/commands/dangerfile/init.rb +1 -1
  15. data/lib/danger/commands/pr.rb +2 -1
  16. data/lib/danger/comment_generators/gitlab_inline.md.erb +2 -7
  17. data/lib/danger/comment_generators/vsts_inline.md.erb +17 -0
  18. data/lib/danger/danger_core/dangerfile.rb +15 -8
  19. data/lib/danger/danger_core/environment_manager.rb +2 -0
  20. data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +1 -1
  21. data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +8 -0
  22. data/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +16 -0
  23. data/lib/danger/helpers/array_subclass.rb +2 -2
  24. data/lib/danger/helpers/comments_helper.rb +4 -3
  25. data/lib/danger/helpers/emoji_mapper.rb +1 -1
  26. data/lib/danger/plugin_support/plugin.rb +6 -2
  27. data/lib/danger/request_sources/bitbucket_cloud.rb +0 -1
  28. data/lib/danger/request_sources/bitbucket_cloud_api.rb +7 -6
  29. data/lib/danger/request_sources/bitbucket_server.rb +20 -16
  30. data/lib/danger/request_sources/bitbucket_server_api.rb +17 -9
  31. data/lib/danger/request_sources/code_insights_api.rb +2 -3
  32. data/lib/danger/request_sources/github/github.rb +30 -26
  33. data/lib/danger/request_sources/gitlab.rb +24 -24
  34. data/lib/danger/request_sources/local_only.rb +1 -2
  35. data/lib/danger/request_sources/request_source.rb +16 -4
  36. data/lib/danger/request_sources/vsts.rb +171 -9
  37. data/lib/danger/request_sources/vsts_api.rb +34 -3
  38. data/lib/danger/scm_source/git_repo.rb +2 -1
  39. data/lib/danger/version.rb +1 -1
  40. metadata +17 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3930680bc519ec86948df5375ea6ffad444929619c7faf3190e204eee827767b
4
- data.tar.gz: 6ca8c826a895e9d0ef6bf66343e70110026a8a77fafddc6e72f26b129c37801d
3
+ metadata.gz: 691f7a26ea0a29f107e6f848bdf7450d2043dc15f5c385c136c1a9d818120c3f
4
+ data.tar.gz: d5f84a85ec8419dbbfbdcb742ffb15b5fe075d3bf1f676859152a0bb7b466633
5
5
  SHA512:
6
- metadata.gz: '0267983777b8a27f5d90f6221655d18657a0c4ed6276e475631e4984eabbe2f5329ec8df774100052dfd1e6368082b9865fd1bd87956b538fa032042f1e1538d'
7
- data.tar.gz: 700097f2571dd5cb9cac5b9f74d034a53a00e73f747d3aa489cb9cae83b86b85908281a3c910bec25a2299fd828449c9eb82f796d8865f84a0742a46488d2dd3
6
+ metadata.gz: b712f8566113397b952ebd93e33d1d42b38d1b1a9d04e678971c35feb46a5bfb057236b0ccffc250560df6b1da001fe31f848024de318850c93ecb6af6eb0994
7
+ data.tar.gz: c89ab31d3afe5d668046629643d65858d6eeeea3d5f67006170af38e9a8c31673789de472501d37ff923c41fb538193cce767ae9567ef4a9a474aca96cf4aad4
data/README.md CHANGED
@@ -76,7 +76,7 @@ I'd strongly recommend using `bundle exec guard` to run your tests as you work.
76
76
 
77
77
  #### Debugging
78
78
 
79
- Ruby is super dynamic. One of the best ways to debug Ruby code is by using [pry](http://pryrepl.org/). We include pry for developers: when you have a problem, copy these two lines just before your problem and follow the instructions from "[I Want To Be A Danger Wizard](https://danger.systems/guides/troubleshooting.html#i-want-to-be-a-danger-wizard)."
79
+ Ruby is super dynamic. One of the best ways to debug Ruby code is by using [pry](https://pry.github.io/). We include pry for developers: when you have a problem, copy these two lines just before your problem and follow the instructions from "[I Want To Be A Danger Wizard](https://danger.systems/guides/troubleshooting.html#i-want-to-be-a-danger-wizard)."
80
80
 
81
81
  ```ruby
82
82
  require 'pry'
@@ -19,7 +19,11 @@ module Danger
19
19
  #
20
20
  class AzurePipelines < CI
21
21
  def self.validates_as_ci?(env)
22
- env.key? "AGENT_ID"
22
+ # 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
+ # Anyone working with AzurePipelines could provide a better/truly unique env key to avoid checking for AppCenter
24
+ !Danger::Appcenter::validates_as_ci?(env) &&
25
+ env.key?("AGENT_ID") &&
26
+ env["BUILD_REPOSITORY_PROVIDER"] != "TfsGit"
23
27
  end
24
28
 
25
29
  def self.validates_as_pr?(env)
@@ -45,7 +45,7 @@ module Danger
45
45
  end
46
46
 
47
47
  def supported_request_sources
48
- @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab]
48
+ @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketServer]
49
49
  end
50
50
  end
51
51
  end
@@ -31,23 +31,17 @@ module Danger
31
31
  @supported_request_sources ||= [Danger::RequestSources::GitHub]
32
32
  end
33
33
 
34
- def repo_slug
35
- return "" if @env["CF_REPO_OWNER"].to_s.empty?
36
- return "" if @env["CF_REPO_NAME"].to_s.empty?
37
- "#{@env['CF_REPO_OWNER']}/#{@env['CF_REPO_NAME']}".downcase!
38
- end
39
-
40
- def repo_url
41
- return "" if @env["CF_COMMIT_URL"].to_s.empty?
42
- @env["CF_COMMIT_URL"].gsub(/\/commit.+$/, "")
43
- end
34
+ def self.slug_from(env)
35
+ return "" if env["CF_REPO_OWNER"].to_s.empty?
36
+ return "" if env["CF_REPO_NAME"].to_s.empty?
44
37
 
45
- def pull_request_id
46
- @env["CF_PULL_REQUEST_NUMBER"]
38
+ "#{env['CF_REPO_OWNER']}/#{env['CF_REPO_NAME']}".downcase!
47
39
  end
48
40
 
49
41
  def initialize(env)
50
- @env = env
42
+ self.repo_url = env["CF_COMMIT_URL"].to_s.gsub(/\/commit.+$/, "")
43
+ self.repo_slug = self.class.slug_from(env)
44
+ self.pull_request_id = env["CF_PULL_REQUEST_NUMBER"]
51
45
  end
52
46
  end
53
47
  end
@@ -0,0 +1,58 @@
1
+ # https://docs.codemagic.io/building/environment-variables/
2
+
3
+ module Danger
4
+ # ### CI Setup
5
+ #
6
+ # Add a script step to your workflow:
7
+ #
8
+ # ```
9
+ # - name: Running Danger
10
+ # script: |
11
+ # bundle install
12
+ # bundle exec danger
13
+ # ```
14
+ #
15
+ # ### Token Setup
16
+ #
17
+ # Add the following environment variables to your workflow's environment configuration.
18
+ # https://docs.codemagic.io/getting-started/yaml/
19
+ #
20
+ # #### GitHub
21
+ # Add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV.
22
+ #
23
+ # #### GitLab
24
+ # Add the `DANGER_GITLAB_API_TOKEN` to your build user's ENV.
25
+ #
26
+ # #### Bitbucket Cloud
27
+ # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
28
+ # to your build user's ENV.
29
+ #
30
+ # #### Bitbucket server
31
+ # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD`
32
+ # and `DANGER_BITBUCKETSERVER_HOST` to your build user's ENV.
33
+ #
34
+ class Codemagic < CI
35
+ def self.validates_as_ci?(env)
36
+ env.key? "FCI_PROJECT_ID"
37
+ end
38
+
39
+ def self.validates_as_pr?(env)
40
+ return !env["FCI_PULL_REQUEST_NUMBER"].to_s.empty?
41
+ end
42
+
43
+ def supported_request_sources
44
+ @supported_request_sources ||= [
45
+ Danger::RequestSources::GitHub,
46
+ Danger::RequestSources::GitLab,
47
+ Danger::RequestSources::BitbucketServer,
48
+ Danger::RequestSources::BitbucketCloud
49
+ ]
50
+ end
51
+
52
+ def initialize(env)
53
+ self.pull_request_id = env["FCI_PULL_REQUEST_NUMBER"]
54
+ self.repo_slug = env["FCI_REPO_SLUG"]
55
+ self.repo_url = GitRepo.new.origins # Codemagic doesn't provide a repo url env variable for n
56
+ end
57
+ end
58
+ end
@@ -46,10 +46,17 @@ module Danger
46
46
  base_commit = env["CI_COMMIT_SHA"]
47
47
  client = RequestSources::GitLab.new(nil, env).client
48
48
 
49
- if (Gem::Version.new(client.version.version) >= Gem::Version.new("10.7"))
49
+ client_version = Gem::Version.new(client.version.version)
50
+ if (client_version >= Gem::Version.new("10.7"))
50
51
  #Use the 'list merge requests associated with a commit' API, for speeed
51
52
  # (GET /projects/:id/repository/commits/:sha/merge_requests) available for GitLab >= 10.7
52
53
  merge_request = client.commit_merge_requests(project_path, base_commit, state: :opened).first
54
+ if (client_version >= Gem::Version.new("13.8"))
55
+ # Gitlab 13.8.0 started returning merge requests for merge commits and squashed commits
56
+ # By checking for merge_request.state, we can ensure danger only comments on MRs which are open
57
+ return 0 if merge_request.nil?
58
+ return 0 unless merge_request.state == "opened"
59
+ end
53
60
  else
54
61
  merge_requests = client.merge_requests(project_path, state: :opened)
55
62
  merge_request = merge_requests.auto_paginate.find do |mr|
@@ -59,9 +66,17 @@ module Danger
59
66
  merge_request.nil? ? 0 : merge_request.iid
60
67
  end
61
68
 
69
+ def self.slug_from(env)
70
+ if env["DANGER_PROJECT_REPO_URL"]
71
+ env["DANGER_PROJECT_REPO_URL"].split('/').last(2).join('/')
72
+ else
73
+ env["CI_MERGE_REQUEST_PROJECT_PATH"] || env["CI_PROJECT_PATH"]
74
+ end
75
+ end
76
+
62
77
  def initialize(env)
63
- @env = env
64
- @repo_slug = slug_from(env)
78
+ self.repo_slug = self.class.slug_from(env)
79
+ self.pull_request_id = self.class.determine_pull_or_merge_request_id(env)
65
80
  end
66
81
 
67
82
  def supported_request_sources
@@ -70,19 +85,5 @@ module Danger
70
85
  Danger::RequestSources::GitLab
71
86
  ]
72
87
  end
73
-
74
- def pull_request_id
75
- @pull_request_id ||= self.class.determine_pull_or_merge_request_id(@env)
76
- end
77
-
78
- private
79
-
80
- def slug_from(env)
81
- if env["DANGER_PROJECT_REPO_URL"]
82
- env["DANGER_PROJECT_REPO_URL"].split('/').last(2).join('/')
83
- else
84
- env["CI_MERGE_REQUEST_PROJECT_PATH"] || env["CI_PROJECT_PATH"]
85
- end
86
- end
87
88
  end
88
89
  end
@@ -133,7 +133,7 @@ module Danger
133
133
  matches = change_url.match(%r{(.+)\/pull\/[0-9]+})
134
134
  matches[1] unless matches.nil?
135
135
  when %r{\/merge_requests\/} # GitLab
136
- matches = change_url.match(%r{(.+)\/merge_requests\/[0-9]+})
136
+ matches = change_url.match(%r{(.+?)(\/-)?\/merge_requests\/[0-9]+})
137
137
  matches[1] unless matches.nil?
138
138
  when %r{\/pull-requests\/} # Bitbucket
139
139
  matches = change_url.match(%r{(.+)\/pull-requests\/[0-9]+})
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # For more info see: https://github.com/schacon/ruby-git
2
3
 
3
4
  require "git"
@@ -37,8 +38,8 @@ module Danger
37
38
  end
38
39
 
39
40
  def initialize(env = {})
40
- @env = env
41
-
41
+ @remote_info = find_remote_info(env)
42
+ @found_pull_request = find_pull_request(env)
42
43
  self.repo_slug = remote_info.slug
43
44
  raise_error_for_missing_remote if remote_info.kind_of?(NoRepoInfo)
44
45
 
@@ -55,7 +56,7 @@ module Danger
55
56
 
56
57
  private
57
58
 
58
- attr_reader :env
59
+ attr_reader :remote_info, :found_pull_request
59
60
 
60
61
  def raise_error_for_missing_remote
61
62
  raise missing_remote_error_message
@@ -66,45 +67,36 @@ module Danger
66
67
  "And the repository must host on GitHub.com or GitHub Enterprise."
67
68
  end
68
69
 
69
- def remote_info
70
- @_remote_info ||= begin
71
- remote_info = begin
72
- if given_pull_request_url?
73
- FindRepoInfoFromURL.new(env["LOCAL_GIT_PR_URL"]).call
74
- else
75
- FindRepoInfoFromLogs.new(
76
- env["DANGER_GITHUB_HOST"] || "github.com".freeze,
77
- run_git("remote show origin -n".freeze)
78
- ).call
79
- end
80
- end
81
-
82
- remote_info || NoRepoInfo.new
83
- end
70
+ def find_remote_info(env)
71
+ if given_pull_request_url?(env)
72
+ FindRepoInfoFromURL.new(env["LOCAL_GIT_PR_URL"]).call
73
+ else
74
+ FindRepoInfoFromLogs.new(
75
+ env["DANGER_GITHUB_HOST"] || "github.com",
76
+ run_git("remote show origin -n")
77
+ ).call
78
+ end || NoRepoInfo.new
84
79
  end
85
80
 
86
- def found_pull_request
87
- @_found_pull_request ||= begin
88
- if given_pull_request_url?
89
- PullRequestFinder.new(
90
- remote_info.id,
91
- remote_info.slug,
92
- remote: true,
93
- remote_url: env["LOCAL_GIT_PR_URL"],
94
- env: env
95
- ).call
96
- else
97
- PullRequestFinder.new(
98
- env.fetch("LOCAL_GIT_PR_ID") { "".freeze },
99
- remote_info.slug,
100
- remote: false,
101
- git_logs: run_git("log --oneline -1000000".freeze)
102
- ).call
103
- end
81
+ def find_pull_request(env)
82
+ if given_pull_request_url?(env)
83
+ PullRequestFinder.new(
84
+ remote_info.id,
85
+ remote_info.slug,
86
+ remote: true,
87
+ remote_url: env["LOCAL_GIT_PR_URL"]
88
+ ).call(env: env)
89
+ else
90
+ PullRequestFinder.new(
91
+ env.fetch("LOCAL_GIT_PR_ID") { "" },
92
+ remote_info.slug,
93
+ remote: false,
94
+ git_logs: run_git("log --oneline -1000000")
95
+ ).call(env: env)
104
96
  end
105
97
  end
106
98
 
107
- def given_pull_request_url?
99
+ def given_pull_request_url?(env)
108
100
  env["LOCAL_GIT_PR_URL"] && !env["LOCAL_GIT_PR_URL"].empty?
109
101
  end
110
102
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "git"
2
4
  require "danger/request_sources/local_only"
3
5
 
@@ -9,8 +11,8 @@ module Danger
9
11
  #
10
12
  class LocalOnlyGitRepo < CI
11
13
  attr_accessor :base_commit, :head_commit
12
- HEAD_VAR = "DANGER_LOCAL_HEAD".freeze
13
- BASE_VAR = "DANGER_LOCAL_BASE".freeze
14
+ HEAD_VAR = "DANGER_LOCAL_HEAD"
15
+ BASE_VAR = "DANGER_LOCAL_BASE"
14
16
 
15
17
  def self.validates_as_ci?(env)
16
18
  env.key? "DANGER_USE_LOCAL_ONLY_GIT"
@@ -33,15 +35,9 @@ module Danger
33
35
  end
34
36
 
35
37
  def initialize(env = {})
36
- @env = env
37
-
38
38
  # expects --base/--head specified OR origin/master to be base and HEAD head
39
39
  self.base_commit = env[BASE_VAR] || run_git("rev-parse --abbrev-ref origin/master")
40
40
  self.head_commit = env[HEAD_VAR] || run_git("rev-parse --abbrev-ref HEAD")
41
41
  end
42
-
43
- private
44
-
45
- attr_reader :env
46
42
  end
47
43
  end
@@ -1,17 +1,19 @@
1
- class Commits
2
- def initialize(base_head)
3
- @base_head = base_head.strip.split(" ".freeze)
4
- end
1
+ module Danger
2
+ class Commits
3
+ def initialize(base_head)
4
+ @base_head = base_head.strip.split(" ".freeze)
5
+ end
5
6
 
6
- def base
7
- base_head.first
8
- end
7
+ def base
8
+ base_head.first
9
+ end
9
10
 
10
- def head
11
- base_head.last
12
- end
11
+ def head
12
+ base_head.last
13
+ end
13
14
 
14
- private
15
+ private
15
16
 
16
- attr_reader :base_head
17
+ attr_reader :base_head
18
+ end
17
19
  end
@@ -1,67 +1,65 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "danger/ci_source/support/local_pull_request"
2
4
  require "danger/ci_source/support/remote_pull_request"
3
5
  require "danger/ci_source/support/no_pull_request"
4
6
 
5
7
  module Danger
6
8
  class PullRequestFinder
7
- def initialize(specific_pull_request_id, repo_slug = nil, remote: false, git_logs: "", remote_url: "", env: nil)
9
+ def initialize(specific_pull_request_id, repo_slug = nil, remote: false, git_logs: "", remote_url: "")
8
10
  @specific_pull_request_id = specific_pull_request_id
9
11
  @git_logs = git_logs
10
12
  @repo_slug = repo_slug
11
13
  @remote = to_boolean(remote)
12
14
  @remote_url = remote_url
13
- @env = env
14
15
  end
15
16
 
16
- def call
17
- check_if_any_pull_request!
18
-
19
- pull_request
17
+ def call(env: nil)
18
+ find_pull_request(env).tap do |pull_request|
19
+ raise_pull_request_not_found!(pull_request) unless pull_request.valid?
20
+ end
20
21
  end
21
22
 
22
23
  private
23
24
 
24
- attr_reader :specific_pull_request_id, :git_logs, :repo_slug, :remote, :remote_url, :env
25
+ attr_reader :specific_pull_request_id, :git_logs, :repo_slug, :remote, :remote_url
25
26
 
26
27
  def to_boolean(maybe_string)
27
28
  ["true", "1", "yes", "y", true].include?(maybe_string)
28
29
  end
29
30
 
30
- def check_if_any_pull_request!
31
- unless pull_request.valid?
32
- if !specific_pull_request_id.empty?
33
- raise "Could not find the Pull Request (#{specific_pull_request_id}) inside the git history for this repo."
34
- else
35
- raise "No recent Pull Requests found for this repo, danger requires at least one Pull Request for the local mode.".freeze
36
- end
31
+ def raise_pull_request_not_found!(pull_request)
32
+ if specific_pull_request_id.empty?
33
+ raise "No recent Pull Requests found for this repo, danger requires at least one Pull Request for the local mode."
34
+ else
35
+ raise "Could not find the Pull Request (#{specific_pull_request_id}) inside the git history for this repo."
37
36
  end
38
37
  end
39
38
 
40
39
  # @return [String] Log line of most recent merged Pull Request
41
- def pull_request
42
- @pull_request ||= begin
43
- return if pull_request_ref.empty?
44
-
45
- if both_present?
46
- LocalPullRequest.new(pick_the_most_recent_one_from_two_matches)
47
- elsif only_merged_pull_request_present?
48
- LocalPullRequest.new(most_recent_merged_pull_request)
49
- elsif only_squash_and_merged_pull_request_present?
50
- LocalPullRequest.new(most_recent_squash_and_merged_pull_request)
51
- elsif remote && remote_pull_request
52
- generate_remote_pull_request
53
- else
54
- NoPullRequest.new
55
- end
40
+ def find_pull_request(env)
41
+ return if pull_request_ref.empty?
42
+
43
+ if both_present?
44
+ LocalPullRequest.new(pick_the_most_recent_one_from_two_matches)
45
+ elsif only_merged_pull_request_present?
46
+ LocalPullRequest.new(most_recent_merged_pull_request)
47
+ elsif only_squash_and_merged_pull_request_present?
48
+ LocalPullRequest.new(most_recent_squash_and_merged_pull_request)
49
+ elsif remote
50
+ remote_pull_request = find_remote_pull_request(env)
51
+ remote_pull_request ? generate_remote_pull_request(remote_pull_request) : NoPullRequest.new
52
+ else
53
+ NoPullRequest.new
56
54
  end
57
55
  end
58
56
 
59
57
  # @return [String] "#42"
60
58
  def pull_request_ref
61
- !specific_pull_request_id.empty? ? "##{specific_pull_request_id}" : "#\\d+".freeze
59
+ !specific_pull_request_id.empty? ? "##{specific_pull_request_id}" : "#\\d+"
62
60
  end
63
61
 
64
- def generate_remote_pull_request
62
+ def generate_remote_pull_request(remote_pull_request)
65
63
  scm_provider = find_scm_provider(remote_url)
66
64
 
67
65
  case scm_provider
@@ -88,10 +86,8 @@ module Danger
88
86
  end
89
87
  end
90
88
 
91
- def remote_pull_request
92
- @_remote_pull_request ||= begin
93
- client.pull_request(repo_slug, specific_pull_request_id)
94
- end
89
+ def find_remote_pull_request(env)
90
+ client(env).pull_request(repo_slug, specific_pull_request_id)
95
91
  end
96
92
 
97
93
  def both_present?
@@ -135,9 +131,9 @@ module Danger
135
131
  !most_recent_squash_and_merged_pull_request.nil? && !most_recent_squash_and_merged_pull_request.empty?
136
132
  end
137
133
 
138
- def client
134
+ def client(env)
139
135
  scm_provider = find_scm_provider(remote_url)
140
-
136
+
141
137
  case scm_provider
142
138
  when :bitbucket_cloud
143
139
  require "danger/request_sources/bitbucket_cloud_api"
@@ -151,8 +147,15 @@ module Danger
151
147
 
152
148
  when :github
153
149
  require "octokit"
154
- Octokit::Client.new(access_token: ENV["DANGER_GITHUB_API_TOKEN"], api_endpoint: api_url)
155
-
150
+ access_token = ENV["DANGER_GITHUB_API_TOKEN"]
151
+ bearer_token = ENV["DANGER_GITHUB_BEARER_TOKEN"]
152
+ if bearer_token && !bearer_token.empty?
153
+ Octokit::Client.new(bearer_token: bearer_token, api_endpoint: api_url)
154
+ elsif access_token && !access_token.empty?
155
+ Octokit::Client.new(access_token: access_token, api_endpoint: api_url)
156
+ else
157
+ raise "No API token given, please provide one using `DANGER_GITHUB_API_TOKEN` or `DANGER_GITHUB_BEARER_TOKEN`"
158
+ end
156
159
  else
157
160
  raise "SCM provider not supported: #{scm_provider}"
158
161
  end
@@ -161,7 +164,7 @@ module Danger
161
164
  def api_url
162
165
  ENV.fetch("DANGER_GITHUB_API_HOST") do
163
166
  ENV.fetch("DANGER_GITHUB_API_BASE_URL") do
164
- "https://api.github.com/".freeze
167
+ "https://api.github.com/"
165
168
  end
166
169
  end
167
170
  end
@@ -0,0 +1,38 @@
1
+ module Danger
2
+ # ### CI Setup
3
+ #
4
+ # In order to work with Xcode Cloud and Danger, you will need to add `bundle exec danger` to
5
+ # the `ci_scripts/ci_post_xcodebuild.sh` (Xcode Cloud's expected filename for a post-action build script).
6
+ # More details and documentation on Xcode Cloud configuration can be found [here](https://developer.apple.com/documentation/xcode/writing-custom-build-scripts).
7
+ #
8
+ # ### Token Setup
9
+ #
10
+ # You will need to add the `DANGER_GITHUB_API_TOKEN` to your build environment.
11
+ # If running on GitHub Enterprise, make sure you also set the expected values for
12
+ # both `DANGER_GITHUB_API_HOST` and `DANGER_GITHUB_HOST`.
13
+ #
14
+ class XcodeCloud < CI
15
+ def self.validates_as_ci?(env)
16
+ env.key? "CI_XCODEBUILD_ACTION"
17
+ end
18
+
19
+ def self.validates_as_pr?(env)
20
+ env.key? "CI_PULL_REQUEST_NUMBER"
21
+ end
22
+
23
+ def supported_request_sources
24
+ @supported_request_sources ||= [
25
+ Danger::RequestSources::GitHub,
26
+ Danger::RequestSources::GitLab,
27
+ Danger::RequestSources::BitbucketCloud,
28
+ Danger::RequestSources::BitbucketServer
29
+ ]
30
+ end
31
+
32
+ def initialize(env)
33
+ self.repo_slug = env["CI_PULL_REQUEST_SOURCE_REPO"]
34
+ self.pull_request_id = env["CI_PULL_REQUEST_NUMBER"]
35
+ self.repo_url = env["CI_PULL_REQUEST_HTML_URL"]
36
+ end
37
+ end
38
+ end
@@ -4,7 +4,7 @@ require "danger/danger_core/dangerfile_generator"
4
4
 
5
5
  module Danger
6
6
  class DangerfileCommand < Runner
7
- self.summary = "Easily create you Dangerfiles."
7
+ self.summary = "Easily create your Dangerfiles."
8
8
  self.command = "dangerfile"
9
9
 
10
10
  self.abstract_command = true
@@ -67,7 +67,8 @@ module Danger
67
67
  @dangerfile_path,
68
68
  nil,
69
69
  nil,
70
- nil
70
+ nil,
71
+ false
71
72
  )
72
73
  end
73
74
  end
@@ -17,10 +17,5 @@
17
17
  <%= current %>
18
18
  <%# the previous line has to be aligned far to the left, otherwise markdown can break easily %>
19
19
  <%- end -%>
20
- <%# We need to add the generated_by_ to identify comments from danger. But with inlines %>
21
- <%# it might be a little annoying, so we set on the table, but if we have markdown we add the footer anyway %>
22
- <%- if @markdowns.count > 0 -%>
23
- <p align="right" data-meta="generated_by_<%= @danger_id %>">
24
- Generated by :no_entry_sign: <a href="http://danger.systems/">Danger</a>
25
- </p>
26
- <%- end -%>
20
+ <%# Add the generated_by_ as a html coment to identify comments from danger. %>
21
+ <!-- "generated_by_<%= @danger_id %>" -->
@@ -0,0 +1,17 @@
1
+ <%- @tables.each do |table| -%>
2
+ <%- if table[:content].any? || table[:resolved].any? -%>
3
+ | | |
4
+ |---|---|
5
+ <%- table[:content].each do |violation| -%>
6
+ | <%= @emoji_mapper.map(table[:emoji]) %> | <%= "~~" if table[:resolved] %><%= violation.message %><%= "~~" if table[:resolved] %> |
7
+ <%- end -%>
8
+
9
+ <%- end -%>
10
+ <%- end -%>
11
+
12
+ <%- @markdowns.each do |current| -%>
13
+ <%= current %>
14
+ <%# the previous line has to be aligned far to the left, otherwise markdown can break easily %>
15
+ <%- end -%>
16
+
17
+ Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>")