danger 8.0.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 +7 -0
- data/LICENSE +22 -0
- data/README.md +94 -0
- data/bin/danger +5 -0
- data/lib/assets/DangerfileTemplate +13 -0
- data/lib/danger.rb +44 -0
- data/lib/danger/ci_source/appcenter.rb +55 -0
- data/lib/danger/ci_source/appveyor.rb +60 -0
- data/lib/danger/ci_source/azure_pipelines.rb +44 -0
- data/lib/danger/ci_source/bamboo.rb +41 -0
- data/lib/danger/ci_source/bitbucket_pipelines.rb +37 -0
- data/lib/danger/ci_source/bitrise.rb +65 -0
- data/lib/danger/ci_source/buddybuild.rb +62 -0
- data/lib/danger/ci_source/buildkite.rb +51 -0
- data/lib/danger/ci_source/ci_source.rb +37 -0
- data/lib/danger/ci_source/circle.rb +94 -0
- data/lib/danger/ci_source/circle_api.rb +51 -0
- data/lib/danger/ci_source/cirrus.rb +31 -0
- data/lib/danger/ci_source/code_build.rb +57 -0
- data/lib/danger/ci_source/codefresh.rb +53 -0
- data/lib/danger/ci_source/codeship.rb +44 -0
- data/lib/danger/ci_source/dotci.rb +52 -0
- data/lib/danger/ci_source/drone.rb +71 -0
- data/lib/danger/ci_source/github_actions.rb +43 -0
- data/lib/danger/ci_source/gitlab_ci.rb +86 -0
- data/lib/danger/ci_source/jenkins.rb +149 -0
- data/lib/danger/ci_source/local_git_repo.rb +119 -0
- data/lib/danger/ci_source/local_only_git_repo.rb +47 -0
- data/lib/danger/ci_source/screwdriver.rb +47 -0
- data/lib/danger/ci_source/semaphore.rb +37 -0
- data/lib/danger/ci_source/support/commits.rb +17 -0
- data/lib/danger/ci_source/support/find_repo_info_from_logs.rb +35 -0
- data/lib/danger/ci_source/support/find_repo_info_from_url.rb +42 -0
- data/lib/danger/ci_source/support/local_pull_request.rb +14 -0
- data/lib/danger/ci_source/support/no_pull_request.rb +7 -0
- data/lib/danger/ci_source/support/no_repo_info.rb +5 -0
- data/lib/danger/ci_source/support/pull_request_finder.rb +179 -0
- data/lib/danger/ci_source/support/remote_pull_request.rb +15 -0
- data/lib/danger/ci_source/support/repo_info.rb +10 -0
- data/lib/danger/ci_source/surf.rb +37 -0
- data/lib/danger/ci_source/teamcity.rb +161 -0
- data/lib/danger/ci_source/travis.rb +51 -0
- data/lib/danger/ci_source/vsts.rb +73 -0
- data/lib/danger/ci_source/xcode_server.rb +48 -0
- data/lib/danger/clients/rubygems_client.rb +14 -0
- data/lib/danger/commands/dangerfile/gem.rb +43 -0
- data/lib/danger/commands/dangerfile/init.rb +30 -0
- data/lib/danger/commands/dry_run.rb +54 -0
- data/lib/danger/commands/init.rb +297 -0
- data/lib/danger/commands/init_helpers/interviewer.rb +92 -0
- data/lib/danger/commands/local.rb +83 -0
- data/lib/danger/commands/local_helpers/http_cache.rb +36 -0
- data/lib/danger/commands/local_helpers/local_setup.rb +46 -0
- data/lib/danger/commands/local_helpers/pry_setup.rb +31 -0
- data/lib/danger/commands/plugins/plugin_json.rb +46 -0
- data/lib/danger/commands/plugins/plugin_lint.rb +54 -0
- data/lib/danger/commands/plugins/plugin_readme.rb +45 -0
- data/lib/danger/commands/pr.rb +92 -0
- data/lib/danger/commands/runner.rb +94 -0
- data/lib/danger/commands/staging.rb +53 -0
- data/lib/danger/commands/systems.rb +43 -0
- data/lib/danger/comment_generators/bitbucket_server.md.erb +20 -0
- data/lib/danger/comment_generators/bitbucket_server_inline.md.erb +15 -0
- data/lib/danger/comment_generators/bitbucket_server_message_group.md.erb +12 -0
- data/lib/danger/comment_generators/github.md.erb +55 -0
- data/lib/danger/comment_generators/github_inline.md.erb +26 -0
- data/lib/danger/comment_generators/gitlab.md.erb +40 -0
- data/lib/danger/comment_generators/gitlab_inline.md.erb +26 -0
- data/lib/danger/comment_generators/vsts.md.erb +20 -0
- data/lib/danger/core_ext/file_list.rb +18 -0
- data/lib/danger/core_ext/string.rb +20 -0
- data/lib/danger/danger_core/dangerfile.rb +341 -0
- data/lib/danger/danger_core/dangerfile_dsl.rb +29 -0
- data/lib/danger/danger_core/dangerfile_generator.rb +11 -0
- data/lib/danger/danger_core/environment_manager.rb +123 -0
- data/lib/danger/danger_core/executor.rb +92 -0
- data/lib/danger/danger_core/message_aggregator.rb +49 -0
- data/lib/danger/danger_core/message_group.rb +68 -0
- data/lib/danger/danger_core/messages/base.rb +56 -0
- data/lib/danger/danger_core/messages/markdown.rb +42 -0
- data/lib/danger/danger_core/messages/violation.rb +54 -0
- data/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb +144 -0
- data/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb +211 -0
- data/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb +248 -0
- data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +158 -0
- data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +254 -0
- data/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +240 -0
- data/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +42 -0
- data/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +218 -0
- data/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb +191 -0
- data/lib/danger/danger_core/standard_error.rb +143 -0
- data/lib/danger/helpers/array_subclass.rb +61 -0
- data/lib/danger/helpers/comment.rb +32 -0
- data/lib/danger/helpers/comments_helper.rb +178 -0
- data/lib/danger/helpers/comments_parsing_helper.rb +70 -0
- data/lib/danger/helpers/emoji_mapper.rb +41 -0
- data/lib/danger/helpers/find_max_num_violations.rb +31 -0
- data/lib/danger/helpers/message_groups_array_helper.rb +31 -0
- data/lib/danger/plugin_support/gems_resolver.rb +77 -0
- data/lib/danger/plugin_support/plugin.rb +49 -0
- data/lib/danger/plugin_support/plugin_file_resolver.rb +30 -0
- data/lib/danger/plugin_support/plugin_linter.rb +161 -0
- data/lib/danger/plugin_support/plugin_parser.rb +199 -0
- data/lib/danger/plugin_support/templates/readme_table.html.erb +26 -0
- data/lib/danger/request_sources/bitbucket_cloud.rb +171 -0
- data/lib/danger/request_sources/bitbucket_cloud_api.rb +181 -0
- data/lib/danger/request_sources/bitbucket_server.rb +105 -0
- data/lib/danger/request_sources/bitbucket_server_api.rb +117 -0
- data/lib/danger/request_sources/github/github.rb +530 -0
- data/lib/danger/request_sources/github/github_review.rb +126 -0
- data/lib/danger/request_sources/github/github_review_resolver.rb +19 -0
- data/lib/danger/request_sources/github/github_review_unsupported.rb +25 -0
- data/lib/danger/request_sources/gitlab.rb +525 -0
- data/lib/danger/request_sources/local_only.rb +53 -0
- data/lib/danger/request_sources/request_source.rb +85 -0
- data/lib/danger/request_sources/support/get_ignored_violation.rb +17 -0
- data/lib/danger/request_sources/vsts.rb +118 -0
- data/lib/danger/request_sources/vsts_api.rb +138 -0
- data/lib/danger/scm_source/git_repo.rb +181 -0
- data/lib/danger/version.rb +4 -0
- metadata +339 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
require "pstore"
|
2
|
+
|
3
|
+
module Danger
|
4
|
+
class HTTPCache
|
5
|
+
attr_reader :expires_in
|
6
|
+
def initialize(cache_file = nil, options = {})
|
7
|
+
File.delete(cache_file) if options[:clear_cache]
|
8
|
+
@store = PStore.new(cache_file)
|
9
|
+
@expires_in = options[:expires_in] || 300 # 5 minutes
|
10
|
+
end
|
11
|
+
|
12
|
+
def read(key)
|
13
|
+
@store.transaction do
|
14
|
+
entry = @store[key]
|
15
|
+
return nil unless entry
|
16
|
+
return entry[:value] unless entry_has_expired(entry, @expires_in)
|
17
|
+
@store.delete key
|
18
|
+
return nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete(key)
|
23
|
+
@store.transaction { @store.delete key }
|
24
|
+
end
|
25
|
+
|
26
|
+
def write(key, value)
|
27
|
+
@store.transaction do
|
28
|
+
@store[key] = { updated_at: Time.now.to_i, value: value }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def entry_has_expired(entry, ttl)
|
33
|
+
Time.now.to_i > entry[:updated_at].to_i + ttl.to_i
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Danger
|
2
|
+
class LocalSetup
|
3
|
+
attr_reader :dm, :cork
|
4
|
+
|
5
|
+
def initialize(dangerfile, cork)
|
6
|
+
@dm = dangerfile
|
7
|
+
@cork = cork
|
8
|
+
end
|
9
|
+
|
10
|
+
def setup(verbose: false)
|
11
|
+
source = dm.env.ci_source
|
12
|
+
if source.nil? or source.repo_slug.empty?
|
13
|
+
cork.puts "danger local failed because it only works with GitHub and Bitbucket server projects at the moment. Sorry.".red
|
14
|
+
exit 0
|
15
|
+
end
|
16
|
+
gh = dm.env.request_source
|
17
|
+
# We can use tokenless here, as it's running on someone's computer
|
18
|
+
# and is IP locked, as opposed to on the CI. Only for Github PRs
|
19
|
+
if gh.instance_of? Danger::RequestSources::GitHub
|
20
|
+
gh.support_tokenless_auth = true
|
21
|
+
end
|
22
|
+
|
23
|
+
if gh.instance_of? Danger::RequestSources::BitbucketServer
|
24
|
+
cork.puts "Running your Dangerfile against this PR - #{gh.host}/projects/#{source.repo_slug.split('/').first}/repos/#{source.repo_slug.split('/').last}/pull-requests/#{source.pull_request_id}"
|
25
|
+
else
|
26
|
+
cork.puts "Running your Dangerfile against this PR - https://#{gh.host}/#{source.repo_slug}/pull/#{source.pull_request_id}"
|
27
|
+
end
|
28
|
+
|
29
|
+
unless verbose
|
30
|
+
cork.puts "Turning on --verbose"
|
31
|
+
dm.verbose = true
|
32
|
+
end
|
33
|
+
|
34
|
+
cork.puts
|
35
|
+
|
36
|
+
begin
|
37
|
+
gh.fetch_details
|
38
|
+
rescue Octokit::NotFound
|
39
|
+
cork.puts "Local repository was not found on GitHub. If you're trying to test a private repository please provide a valid API token through " + "DANGER_GITHUB_API_TOKEN".yellow + " environment variable."
|
40
|
+
return
|
41
|
+
end
|
42
|
+
|
43
|
+
yield
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Danger
|
2
|
+
class PrySetup
|
3
|
+
def initialize(cork)
|
4
|
+
@cork = cork
|
5
|
+
end
|
6
|
+
|
7
|
+
def setup_pry(dangerfile_path)
|
8
|
+
return dangerfile_path if dangerfile_path.empty?
|
9
|
+
validate_pry_available
|
10
|
+
FileUtils.cp dangerfile_path, DANGERFILE_COPY
|
11
|
+
File.open(DANGERFILE_COPY, "a") do |f|
|
12
|
+
f.write("\nbinding.pry; File.delete(\"#{DANGERFILE_COPY}\")")
|
13
|
+
end
|
14
|
+
DANGERFILE_COPY
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :cork
|
20
|
+
|
21
|
+
DANGERFILE_COPY = "_Dangerfile.tmp".freeze
|
22
|
+
|
23
|
+
def validate_pry_available
|
24
|
+
Kernel.require "pry"
|
25
|
+
rescue LoadError
|
26
|
+
cork.warn "Pry was not found, and is required for 'danger pr --pry'."
|
27
|
+
cork.print_warnings
|
28
|
+
abort
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "danger/plugin_support/plugin_parser"
|
2
|
+
require "danger/plugin_support/plugin_file_resolver"
|
3
|
+
|
4
|
+
module Danger
|
5
|
+
class PluginJSON < CLAide::Command::Plugins
|
6
|
+
self.summary = "Prints the JSON documentation representing a plugin"
|
7
|
+
self.command = "json"
|
8
|
+
|
9
|
+
attr_accessor :cork
|
10
|
+
|
11
|
+
def initialize(argv)
|
12
|
+
@refs = argv.arguments! unless argv.arguments.empty?
|
13
|
+
@cork = Cork::Board.new(silent: argv.option("silent", false),
|
14
|
+
verbose: argv.option("verbose", false))
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
self.summary = "Lint plugins from files, gems or the current folder. Outputs JSON array representation of Plugins on success."
|
19
|
+
|
20
|
+
self.description = <<-DESC
|
21
|
+
Converts a collection of file paths of Danger plugins into a JSON format.
|
22
|
+
DESC
|
23
|
+
|
24
|
+
self.arguments = [
|
25
|
+
CLAide::Argument.new("Paths, Gems or Nothing", false, true)
|
26
|
+
]
|
27
|
+
|
28
|
+
def run
|
29
|
+
file_resolver = PluginFileResolver.new(@refs)
|
30
|
+
data = file_resolver.resolve
|
31
|
+
|
32
|
+
parser = PluginParser.new(data[:paths])
|
33
|
+
parser.parse
|
34
|
+
json = parser.to_json
|
35
|
+
|
36
|
+
# Append gem metadata into every plugin
|
37
|
+
data[:gems].each do |gem_data|
|
38
|
+
json.each do |plugin|
|
39
|
+
plugin[:gem_metadata] = gem_data if plugin[:gem] == gem_data[:gem]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
cork.puts json.to_json
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "danger/plugin_support/plugin_parser"
|
2
|
+
require "danger/plugin_support/plugin_file_resolver"
|
3
|
+
require "danger/plugin_support/plugin_linter"
|
4
|
+
|
5
|
+
module Danger
|
6
|
+
class PluginLint < CLAide::Command::Plugins
|
7
|
+
self.summary = "Lints a plugin"
|
8
|
+
self.command = "lint"
|
9
|
+
|
10
|
+
attr_accessor :cork
|
11
|
+
|
12
|
+
def initialize(argv)
|
13
|
+
@warnings_as_errors = argv.flag?("warnings-as-errors", false)
|
14
|
+
@refs = argv.arguments! unless argv.arguments.empty?
|
15
|
+
@cork = Cork::Board.new(silent: argv.option("silent", false),
|
16
|
+
verbose: argv.option("verbose", false))
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
self.summary = "Lint plugins from files, gems or the current folder. Outputs JSON array representation of Plugins on success."
|
21
|
+
|
22
|
+
self.description = <<-DESC
|
23
|
+
Converts a collection of file paths of Danger plugins into a JSON format.
|
24
|
+
Note: Before 1.0, it will also parse the represented JSON to validate whether https://danger.systems would
|
25
|
+
show the plugin on the website.
|
26
|
+
DESC
|
27
|
+
|
28
|
+
self.arguments = [
|
29
|
+
CLAide::Argument.new("Paths, Gems or Nothing", false, true)
|
30
|
+
]
|
31
|
+
|
32
|
+
def self.options
|
33
|
+
[
|
34
|
+
["--warnings-as-errors", "Ensure strict linting."]
|
35
|
+
].concat(super)
|
36
|
+
end
|
37
|
+
|
38
|
+
def run
|
39
|
+
file_resolver = PluginFileResolver.new(@refs)
|
40
|
+
data = file_resolver.resolve
|
41
|
+
|
42
|
+
parser = PluginParser.new(data[:paths], verbose: true)
|
43
|
+
parser.parse
|
44
|
+
json = parser.to_json
|
45
|
+
|
46
|
+
linter = PluginLinter.new(json)
|
47
|
+
linter.lint
|
48
|
+
linter.print_summary(cork)
|
49
|
+
|
50
|
+
abort("Failing due to errors\n".red) if linter.failed?
|
51
|
+
abort("Failing due to warnings as errors\n".red) if @warnings_as_errors && !linter.warnings.empty?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "danger/plugin_support/plugin_parser"
|
2
|
+
require "danger/plugin_support/plugin_file_resolver"
|
3
|
+
require "json"
|
4
|
+
require "erb"
|
5
|
+
|
6
|
+
module Danger
|
7
|
+
class PluginReadme < CLAide::Command::Plugins
|
8
|
+
self.summary = "Generates a README from a set of plugins"
|
9
|
+
self.command = "readme"
|
10
|
+
|
11
|
+
attr_accessor :cork, :json
|
12
|
+
|
13
|
+
def initialize(argv)
|
14
|
+
@refs = argv.arguments! unless argv.arguments.empty?
|
15
|
+
@cork = Cork::Board.new(silent: argv.option("silent", false),
|
16
|
+
verbose: argv.option("verbose", false))
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
self.summary = "Lint plugins from files, gems or the current folder. Outputs JSON array representation of Plugins on success."
|
21
|
+
|
22
|
+
self.description = <<-DESC
|
23
|
+
Converts a collection of file paths of Danger plugins into a format usable in a README.
|
24
|
+
This is useful for Danger itself, but also for any plugins wanting to showcase their API.
|
25
|
+
DESC
|
26
|
+
|
27
|
+
self.arguments = [
|
28
|
+
CLAide::Argument.new("Paths, Gems or Nothing", false, true)
|
29
|
+
]
|
30
|
+
|
31
|
+
attr_accessor :json, :markdown
|
32
|
+
def run
|
33
|
+
file_resolver = PluginFileResolver.new(@refs)
|
34
|
+
data = file_resolver.resolve
|
35
|
+
|
36
|
+
parser = PluginParser.new(data[:paths])
|
37
|
+
parser.parse
|
38
|
+
|
39
|
+
self.json = JSON.parse(parser.to_json_string)
|
40
|
+
|
41
|
+
template = File.join(Danger.gem_path, "lib/danger/plugin_support/templates/readme_table.html.erb")
|
42
|
+
cork.puts ERB.new(File.read(template), 0, "-").result(binding)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require "danger/commands/local_helpers/http_cache"
|
2
|
+
require "danger/commands/local_helpers/pry_setup"
|
3
|
+
require "faraday/http_cache"
|
4
|
+
require "fileutils"
|
5
|
+
require "octokit"
|
6
|
+
require "tmpdir"
|
7
|
+
require "no_proxy_fix"
|
8
|
+
|
9
|
+
module Danger
|
10
|
+
class PR < Runner
|
11
|
+
self.summary = "Run the Dangerfile locally against Pull Requests (works with forks, too). Does not post to the PR. Usage: danger pr <URL>".freeze
|
12
|
+
self.command = "pr".freeze
|
13
|
+
|
14
|
+
def self.options
|
15
|
+
[
|
16
|
+
["--clear-http-cache", "Clear the local http cache before running Danger locally."],
|
17
|
+
["--pry", "Drop into a Pry shell after evaluating the Dangerfile."],
|
18
|
+
["--dangerfile=<path/to/dangerfile>", "The location of your Dangerfile"],
|
19
|
+
["--verify-ssl", "Verify SSL in Octokit"]
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(argv)
|
24
|
+
show_help = true if argv.arguments == ["-h"]
|
25
|
+
|
26
|
+
@pr_url = argv.shift_argument
|
27
|
+
@clear_http_cache = argv.flag?("clear-http-cache", false)
|
28
|
+
dangerfile = argv.option("dangerfile", "Dangerfile")
|
29
|
+
@verify_ssl = argv.flag?("verify-ssl", true)
|
30
|
+
|
31
|
+
# Currently CLAide doesn't support short option like -h https://github.com/CocoaPods/CLAide/pull/60
|
32
|
+
# when user pass in -h, mimic the behavior of passing in --help.
|
33
|
+
argv = CLAide::ARGV.new ["--help"] if show_help
|
34
|
+
|
35
|
+
super
|
36
|
+
|
37
|
+
@dangerfile_path = dangerfile if File.exist?(dangerfile)
|
38
|
+
|
39
|
+
if argv.flag?("pry", false)
|
40
|
+
@dangerfile_path = PrySetup.new(cork).setup_pry(@dangerfile_path)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def validate!
|
45
|
+
super
|
46
|
+
unless @dangerfile_path
|
47
|
+
help! "Could not find a Dangerfile."
|
48
|
+
end
|
49
|
+
unless @pr_url
|
50
|
+
help! "Could not find a pull-request. Usage: danger pr <URL>"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def run
|
55
|
+
ENV["DANGER_USE_LOCAL_GIT"] = "YES"
|
56
|
+
ENV["LOCAL_GIT_PR_URL"] = @pr_url if @pr_url
|
57
|
+
|
58
|
+
configure_octokit(ENV["DANGER_TMPDIR"] || Dir.tmpdir)
|
59
|
+
|
60
|
+
env = EnvironmentManager.new(ENV, cork)
|
61
|
+
dm = Dangerfile.new(env, cork)
|
62
|
+
|
63
|
+
LocalSetup.new(dm, cork).setup(verbose: verbose) do
|
64
|
+
dm.run(
|
65
|
+
Danger::EnvironmentManager.danger_base_branch,
|
66
|
+
Danger::EnvironmentManager.danger_head_branch,
|
67
|
+
@dangerfile_path,
|
68
|
+
nil,
|
69
|
+
nil,
|
70
|
+
nil
|
71
|
+
)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def configure_octokit(cache_dir)
|
78
|
+
# setup caching for Github calls to hitting the API rate limit too quickly
|
79
|
+
cache_file = File.join(cache_dir, "danger_local_cache")
|
80
|
+
cache = HTTPCache.new(cache_file, clear_cache: @clear_http_cache)
|
81
|
+
Octokit.configure do |config|
|
82
|
+
config.connection_options[:ssl] = { verify: @verify_ssl }
|
83
|
+
end
|
84
|
+
Octokit.middleware = Faraday::RackBuilder.new do |builder|
|
85
|
+
builder.use Faraday::HttpCache, store: cache, serializer: Marshal, shared_cache: false
|
86
|
+
builder.use Octokit::Middleware::FollowRedirects
|
87
|
+
builder.use Octokit::Response::RaiseError
|
88
|
+
builder.adapter Faraday.default_adapter
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Danger
|
2
|
+
class Runner < CLAide::Command
|
3
|
+
require "danger/commands/init"
|
4
|
+
require "danger/commands/local"
|
5
|
+
require "danger/commands/dry_run"
|
6
|
+
require "danger/commands/staging"
|
7
|
+
require "danger/commands/systems"
|
8
|
+
require "danger/commands/pr"
|
9
|
+
|
10
|
+
# manually set claide plugins as a subcommand
|
11
|
+
require "claide_plugin"
|
12
|
+
@subcommands << CLAide::Command::Plugins
|
13
|
+
CLAide::Plugins.config =
|
14
|
+
CLAide::Plugins::Configuration.new(
|
15
|
+
"Danger",
|
16
|
+
"danger",
|
17
|
+
"https://gitlab.com/danger-systems/danger.systems/raw/master/plugins-search-generated.json",
|
18
|
+
"https://github.com/danger/danger-plugin-template"
|
19
|
+
)
|
20
|
+
|
21
|
+
require "danger/commands/plugins/plugin_lint"
|
22
|
+
require "danger/commands/plugins/plugin_json"
|
23
|
+
require "danger/commands/plugins/plugin_readme"
|
24
|
+
|
25
|
+
require "danger/commands/dangerfile/init"
|
26
|
+
require "danger/commands/dangerfile/gem"
|
27
|
+
|
28
|
+
attr_accessor :cork
|
29
|
+
|
30
|
+
self.summary = "Run the Dangerfile."
|
31
|
+
self.command = "danger"
|
32
|
+
self.version = Danger::VERSION
|
33
|
+
|
34
|
+
self.plugin_prefixes = %w(claide danger)
|
35
|
+
|
36
|
+
def initialize(argv)
|
37
|
+
dangerfile = argv.option("dangerfile", "Dangerfile")
|
38
|
+
@dangerfile_path = dangerfile if File.exist?(dangerfile)
|
39
|
+
@base = argv.option("base")
|
40
|
+
@head = argv.option("head")
|
41
|
+
@fail_on_errors = argv.option("fail-on-errors", false)
|
42
|
+
@fail_if_no_pr = argv.option("fail-if-no-pr", false)
|
43
|
+
@new_comment = argv.flag?("new-comment")
|
44
|
+
@remove_previous_comments = argv.flag?("remove-previous-comments")
|
45
|
+
@danger_id = argv.option("danger_id", "danger")
|
46
|
+
@cork = Cork::Board.new(silent: argv.option("silent", false),
|
47
|
+
verbose: argv.option("verbose", false))
|
48
|
+
adjust_colored2_output(argv)
|
49
|
+
super
|
50
|
+
end
|
51
|
+
|
52
|
+
def validate!
|
53
|
+
super
|
54
|
+
if self.class == Runner && !@dangerfile_path
|
55
|
+
help!("Could not find a Dangerfile.")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.options
|
60
|
+
[
|
61
|
+
["--base=[master|dev|stable]", "A branch/tag/commit to use as the base of the diff"],
|
62
|
+
["--head=[master|dev|stable]", "A branch/tag/commit to use as the head"],
|
63
|
+
["--fail-on-errors=<true|false>", "Should always fail the build process, defaults to false"],
|
64
|
+
["--fail-if-no-pr=<true|false>", "Should fail the build process if no PR is found (useful for CircleCI), defaults to false"],
|
65
|
+
["--dangerfile=<path/to/dangerfile>", "The location of your Dangerfile"],
|
66
|
+
["--danger_id=<id>", "The identifier of this Danger instance"],
|
67
|
+
["--new-comment", "Makes Danger post a new comment instead of editing its previous one"],
|
68
|
+
["--remove-previous-comments", "Removes all previous comment and create a new one in the end of the list"]
|
69
|
+
].concat(super)
|
70
|
+
end
|
71
|
+
|
72
|
+
def run
|
73
|
+
Executor.new(ENV).run(
|
74
|
+
base: @base,
|
75
|
+
head: @head,
|
76
|
+
dangerfile_path: @dangerfile_path,
|
77
|
+
danger_id: @danger_id,
|
78
|
+
new_comment: @new_comment,
|
79
|
+
fail_on_errors: @fail_on_errors,
|
80
|
+
fail_if_no_pr: @fail_if_no_pr,
|
81
|
+
remove_previous_comments: @remove_previous_comments
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def adjust_colored2_output(argv)
|
88
|
+
# disable/enable colored2 output
|
89
|
+
# consider it execution wide to avoid need to wrap #run and maintain state
|
90
|
+
# ARGV#options is non-destructive way to check flags
|
91
|
+
Colored2.public_send(argv.options.fetch("ansi", true) ? "enable!" : "disable!")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|