danger 0.8.4 → 0.8.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/danger +1 -1
- data/lib/danger.rb +12 -12
- data/lib/danger/ci_source/buildkite.rb +5 -5
- data/lib/danger/ci_source/ci_source.rb +2 -2
- data/lib/danger/ci_source/circle.rb +11 -11
- data/lib/danger/ci_source/drone.rb +5 -5
- data/lib/danger/ci_source/jenkins.rb +4 -4
- data/lib/danger/ci_source/local_git_repo.rb +10 -10
- data/lib/danger/ci_source/semaphore.rb +5 -5
- data/lib/danger/ci_source/travis.rb +6 -6
- data/lib/danger/ci_source/xcode_server.rb +2 -2
- data/lib/danger/commands/init.rb +66 -66
- data/lib/danger/commands/init_helpers/interviewer.rb +14 -14
- data/lib/danger/commands/local.rb +9 -8
- data/lib/danger/commands/plugins/plugin_new.rb +8 -8
- data/lib/danger/commands/plugins/plugin_readme.rb +2 -2
- data/lib/danger/commands/runner.rb +3 -3
- data/lib/danger/comment_generators/github.md.erb +1 -1
- data/lib/danger/core_ext/string.rb +1 -1
- data/lib/danger/danger_core/dangerfile.rb +12 -12
- data/lib/danger/danger_core/dangerfile_dsl.rb +1 -1
- data/lib/danger/danger_core/environment_manager.rb +6 -6
- data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +9 -9
- data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +9 -9
- data/lib/danger/danger_core/plugins/dangerfile_import_plugin.rb +10 -6
- data/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +1 -1
- data/lib/danger/plugin_support/plugin.rb +1 -1
- data/lib/danger/plugin_support/plugin_file_resolver.rb +23 -23
- data/lib/danger/plugin_support/plugin_parser.rb +40 -3
- data/lib/danger/request_source/github.rb +14 -14
- data/lib/danger/request_source/request_source.rb +4 -4
- data/lib/danger/scm_source/git_repo.rb +2 -2
- data/lib/danger/version.rb +2 -2
- metadata +3 -3
@@ -7,19 +7,19 @@ module Danger
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def show_prompt
|
10
|
-
ui.print
|
10
|
+
ui.print '> '.bold.green
|
11
11
|
end
|
12
12
|
|
13
13
|
def yellow_bang
|
14
|
-
|
14
|
+
'! '.yellow
|
15
15
|
end
|
16
16
|
|
17
17
|
def green_bang
|
18
|
-
|
18
|
+
'! '.green
|
19
19
|
end
|
20
20
|
|
21
21
|
def red_bang
|
22
|
-
|
22
|
+
'! '.red
|
23
23
|
end
|
24
24
|
|
25
25
|
def say(output)
|
@@ -33,7 +33,7 @@ module Danger
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def link(url)
|
36
|
-
say
|
36
|
+
say ' -> ' + url.underline + "\n"
|
37
37
|
end
|
38
38
|
|
39
39
|
def pause(time)
|
@@ -48,12 +48,12 @@ module Danger
|
|
48
48
|
|
49
49
|
def run_command(command, output_command = nil)
|
50
50
|
output_command ||= command
|
51
|
-
ui.puts
|
51
|
+
ui.puts ' ' + output_command.magenta
|
52
52
|
system command
|
53
53
|
end
|
54
54
|
|
55
55
|
def ask(question)
|
56
|
-
answer =
|
56
|
+
answer = ''
|
57
57
|
loop do
|
58
58
|
ui.puts "\n#{question}?"
|
59
59
|
|
@@ -73,26 +73,26 @@ module Danger
|
|
73
73
|
print_info = proc do
|
74
74
|
possible_answers.each_with_index do |answer, i|
|
75
75
|
the_answer = (i == 0) ? answer.underline : answer
|
76
|
-
ui.print
|
77
|
-
ui.print(
|
76
|
+
ui.print ' ' + the_answer
|
77
|
+
ui.print(' /') if i != possible_answers.length - 1
|
78
78
|
end
|
79
79
|
ui.print " ]\n"
|
80
80
|
end
|
81
81
|
print_info.call
|
82
82
|
|
83
|
-
answer =
|
83
|
+
answer = ''
|
84
84
|
|
85
85
|
loop do
|
86
86
|
show_prompt
|
87
87
|
answer = @no_waiting ? possible_answers[0].downcase : STDIN.gets.downcase.chomp
|
88
88
|
|
89
|
-
answer =
|
90
|
-
answer =
|
89
|
+
answer = 'yes' if answer == 'y'
|
90
|
+
answer = 'no' if answer == 'n'
|
91
91
|
|
92
92
|
# default to first answer
|
93
|
-
if answer ==
|
93
|
+
if answer == ''
|
94
94
|
answer = possible_answers[0].downcase
|
95
|
-
ui.puts
|
95
|
+
ui.puts 'Using: ' + answer.yellow
|
96
96
|
end
|
97
97
|
|
98
98
|
break if possible_answers.map(&:downcase).include? answer
|
@@ -4,7 +4,7 @@ module Danger
|
|
4
4
|
self.command = 'local'
|
5
5
|
|
6
6
|
def initialize(argv)
|
7
|
-
@dangerfile_path =
|
7
|
+
@dangerfile_path = 'Dangerfile' if File.exist? 'Dangerfile'
|
8
8
|
@pr_num = argv.option('use-merged-pr')
|
9
9
|
super
|
10
10
|
end
|
@@ -18,13 +18,13 @@ module Danger
|
|
18
18
|
def validate!
|
19
19
|
super
|
20
20
|
unless @dangerfile_path
|
21
|
-
help!
|
21
|
+
help! 'Could not find a Dangerfile.'
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def run
|
26
|
-
ENV[
|
27
|
-
ENV[
|
26
|
+
ENV['DANGER_USE_LOCAL_GIT'] = 'YES'
|
27
|
+
ENV['LOCAL_GIT_PR_ID'] = @pr_num if @pr_num
|
28
28
|
|
29
29
|
env = EnvironmentManager.new(ENV)
|
30
30
|
dm = Dangerfile.new(env, cork)
|
@@ -32,7 +32,7 @@ module Danger
|
|
32
32
|
|
33
33
|
source = dm.env.ci_source
|
34
34
|
if source.nil? or source.repo_slug.empty?
|
35
|
-
cork.puts
|
35
|
+
cork.puts 'danger local failed because it only works with GitHub projects at the moment. Sorry.'.red
|
36
36
|
exit 0
|
37
37
|
end
|
38
38
|
|
@@ -41,7 +41,7 @@ module Danger
|
|
41
41
|
cork.puts "Running your Dangerfile against this PR - https://#{gh.host}/#{source.repo_slug}/pull/#{source.pull_request_id}"
|
42
42
|
|
43
43
|
if verbose != true
|
44
|
-
cork.puts
|
44
|
+
cork.puts 'Turning on --verbose'
|
45
45
|
dm.verbose = true
|
46
46
|
end
|
47
47
|
|
@@ -54,15 +54,16 @@ module Danger
|
|
54
54
|
begin
|
55
55
|
gh.fetch_details
|
56
56
|
rescue Octokit::NotFound
|
57
|
-
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 " +
|
57
|
+
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.'
|
58
58
|
return
|
59
59
|
end
|
60
60
|
|
61
61
|
dm.env.request_source = gh
|
62
62
|
|
63
63
|
begin
|
64
|
+
dm.env.fill_environment_vars
|
64
65
|
dm.env.ensure_danger_branches_are_setup
|
65
|
-
dm.env.scm.diff_for_folder(
|
66
|
+
dm.env.scm.diff_for_folder('.', from: Danger::EnvironmentManager.danger_base_branch, to: Danger::EnvironmentManager.danger_head_branch)
|
66
67
|
dm.parse(Pathname.new(@dangerfile_path))
|
67
68
|
dm.print_results
|
68
69
|
ensure
|
@@ -8,26 +8,26 @@ module Danger
|
|
8
8
|
|
9
9
|
cork.puts "Must be lower case, and use a '_' between words. Do not use '.'".green
|
10
10
|
cork.puts "examples: 'number_of_emojis', 'ensure_pr_title_contains_keyword'".green
|
11
|
-
cork.puts
|
11
|
+
cork.puts 'Name of your new plugin: '
|
12
12
|
name = STDIN.gets.strip
|
13
13
|
|
14
14
|
dir = Danger.gem_path
|
15
|
-
content = File.read(File.join(dir,
|
16
|
-
content.gsub!(
|
15
|
+
content = File.read(File.join(dir, 'lib', 'assets', 'PluginTemplate.rb.template'))
|
16
|
+
content.gsub!('[[CLASS_NAME]]', name.danger_class)
|
17
17
|
|
18
|
-
plugins_path =
|
18
|
+
plugins_path = 'danger_plugins'
|
19
19
|
FileUtils.mkdir_p(plugins_path) unless File.directory?(plugins_path)
|
20
20
|
|
21
21
|
output_path = File.join(plugins_path, "#{name}.rb")
|
22
22
|
raise "File '#{output_path}' already exists!" if File.exist?(output_path)
|
23
23
|
File.write(output_path, content)
|
24
24
|
|
25
|
-
cork.puts
|
25
|
+
cork.puts ''
|
26
26
|
cork.puts "Successfully created new plugin at path '#{output_path}'".green
|
27
|
-
cork.puts
|
28
|
-
cork.puts
|
27
|
+
cork.puts 'Add this to your `Dangerfile` to use it:'
|
28
|
+
cork.puts ''
|
29
29
|
cork.puts "#{name}(parameter1: 123, parameter2: \"Club Mate\")".blue
|
30
|
-
cork.puts
|
30
|
+
cork.puts ''
|
31
31
|
cork.puts "Enjoy ✨"
|
32
32
|
end
|
33
33
|
end
|
@@ -35,8 +35,8 @@ module Danger
|
|
35
35
|
self.markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, no_intra_emphasis: true)
|
36
36
|
self.json = JSON.parse(parser.to_json)
|
37
37
|
|
38
|
-
template = File.join(Danger.gem_path,
|
39
|
-
cork.puts ERB.new(File.read(template), 0,
|
38
|
+
template = File.join(Danger.gem_path, 'lib/danger/plugin_support/templates/readme_table.html.erb')
|
39
|
+
cork.puts ERB.new(File.read(template), 0, '-').result(binding)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -26,7 +26,7 @@ module Danger
|
|
26
26
|
def validate!
|
27
27
|
super
|
28
28
|
if self.class == Runner && !@dangerfile_path
|
29
|
-
help!
|
29
|
+
help! 'Could not find a Dangerfile.'
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -55,7 +55,7 @@ module Danger
|
|
55
55
|
# Offer the chance for a user to specify a branch through the command line
|
56
56
|
ci_base = @base || EnvironmentManager.danger_base_branch
|
57
57
|
ci_head = @head || EnvironmentManager.danger_head_branch
|
58
|
-
dm.env.scm.diff_for_folder(
|
58
|
+
dm.env.scm.diff_for_folder('.', from: ci_base, to: ci_head)
|
59
59
|
|
60
60
|
dm.parse Pathname.new(@dangerfile_path)
|
61
61
|
|
@@ -65,7 +65,7 @@ module Danger
|
|
65
65
|
dm.env.clean_up
|
66
66
|
end
|
67
67
|
else
|
68
|
-
cork.puts
|
68
|
+
cork.puts 'Not a Pull Request - skipping `danger` run'
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -36,5 +36,5 @@
|
|
36
36
|
<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %>
|
37
37
|
<%- end -%>
|
38
38
|
<p align="right" data-meta="generated_by_<%= @danger_id %>">
|
39
|
-
Generated by :no_entry_sign: <a href="
|
39
|
+
Generated by :no_entry_sign: <a href="http://danger.systems/">danger</a>
|
40
40
|
</p>
|
@@ -73,7 +73,7 @@ module Danger
|
|
73
73
|
@env = env_manager
|
74
74
|
|
75
75
|
# Triggers local plugins from the root of a project
|
76
|
-
Dir[
|
76
|
+
Dir['./danger_plugins/*.rb'].each do |file|
|
77
77
|
require File.expand_path(file)
|
78
78
|
end
|
79
79
|
|
@@ -115,10 +115,10 @@ module Danger
|
|
115
115
|
methods.map do |method|
|
116
116
|
case method
|
117
117
|
when :api
|
118
|
-
value =
|
118
|
+
value = 'Octokit::Client'
|
119
119
|
|
120
120
|
when :pr_json
|
121
|
-
value =
|
121
|
+
value = '[Skipped]'
|
122
122
|
|
123
123
|
when :pr_body
|
124
124
|
value = plugin.send(method)
|
@@ -140,14 +140,14 @@ module Danger
|
|
140
140
|
def print_known_info
|
141
141
|
rows = []
|
142
142
|
rows += method_values_for_plugin_hashes(core_dsl_attributes)
|
143
|
-
rows << [
|
143
|
+
rows << ['---', '---']
|
144
144
|
rows += method_values_for_plugin_hashes(external_dsl_attributes)
|
145
|
-
rows << [
|
146
|
-
rows << [
|
147
|
-
rows << [
|
148
|
-
rows << [
|
149
|
-
rows << [
|
150
|
-
rows << [
|
145
|
+
rows << ['---', '---']
|
146
|
+
rows << ['SCM', env.scm.class]
|
147
|
+
rows << ['Source', env.ci_source.class]
|
148
|
+
rows << ['Requests', env.request_source.class]
|
149
|
+
rows << ['Base Commit', env.meta_info_for_base]
|
150
|
+
rows << ['Head Commit', env.meta_info_for_head]
|
151
151
|
|
152
152
|
params = {}
|
153
153
|
params[:rows] = rows.each { |current| current[0] = current[0].yellow }
|
@@ -180,8 +180,8 @@ module Danger
|
|
180
180
|
'you should turn off smart quotes in your editor of choice.'.red
|
181
181
|
end
|
182
182
|
|
183
|
-
if contents.include?(
|
184
|
-
ui.puts
|
183
|
+
if contents.include?('puts')
|
184
|
+
ui.puts 'You used `puts` in your Dangerfile. To print out text to GitHub use `message` instead'
|
185
185
|
end
|
186
186
|
|
187
187
|
self.defined_in_file = path
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'danger/ci_source/ci_source'
|
2
|
+
require 'danger/request_source/request_source'
|
3
3
|
|
4
4
|
module Danger
|
5
5
|
class EnvironmentManager
|
@@ -18,7 +18,7 @@ module Danger
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
raise
|
21
|
+
raise 'Could not find a valid pull request within the known CI sources'.red unless self.ci_source
|
22
22
|
|
23
23
|
RequestSources::RequestSource.available_request_sources.each do |klass|
|
24
24
|
next unless self.ci_source.supports?(klass)
|
@@ -28,7 +28,7 @@ module Danger
|
|
28
28
|
self.request_source = request_source
|
29
29
|
end
|
30
30
|
|
31
|
-
raise
|
31
|
+
raise 'Could not find a Request Source'.red unless self.request_source
|
32
32
|
|
33
33
|
self.scm = self.request_source.scm
|
34
34
|
end
|
@@ -62,11 +62,11 @@ module Danger
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.danger_head_branch
|
65
|
-
|
65
|
+
'danger_head'
|
66
66
|
end
|
67
67
|
|
68
68
|
def self.danger_base_branch
|
69
|
-
|
69
|
+
'danger_base'
|
70
70
|
end
|
71
71
|
end
|
72
72
|
end
|
@@ -31,7 +31,7 @@ module Danger
|
|
31
31
|
|
32
32
|
class DangerfileGitPlugin < Plugin
|
33
33
|
def self.instance_name
|
34
|
-
|
34
|
+
'git'
|
35
35
|
end
|
36
36
|
|
37
37
|
def initialize(dangerfile)
|
@@ -43,23 +43,23 @@ module Danger
|
|
43
43
|
|
44
44
|
# @!group Git Files
|
45
45
|
# Paths for files that were added during the diff
|
46
|
-
# @return [FileList] an [Array] subclass
|
46
|
+
# @return [FileList<String>] an [Array] subclass
|
47
47
|
#
|
48
48
|
def added_files
|
49
|
-
Danger::FileList.new(@git.diff.select { |diff| diff.type ==
|
49
|
+
Danger::FileList.new(@git.diff.select { |diff| diff.type == 'new' }.map(&:path))
|
50
50
|
end
|
51
51
|
|
52
52
|
# @!group Git Files
|
53
53
|
# Paths for files that were removed during the diff
|
54
|
-
# @return [FileList] an [Array] subclass
|
54
|
+
# @return [FileList<String>] an [Array] subclass
|
55
55
|
#
|
56
56
|
def deleted_files
|
57
|
-
Danger::FileList.new(@git.diff.select { |diff| diff.type ==
|
57
|
+
Danger::FileList.new(@git.diff.select { |diff| diff.type == 'deleted' }.map(&:path))
|
58
58
|
end
|
59
59
|
|
60
60
|
# @!group Git Files
|
61
61
|
# Paths for files that changed during the diff
|
62
|
-
# @return [FileList] an [Array] subclass
|
62
|
+
# @return [FileList<String>] an [Array] subclass
|
63
63
|
#
|
64
64
|
def modified_files
|
65
65
|
Danger::FileList.new(@git.diff.stats[:files].keys)
|
@@ -67,7 +67,7 @@ module Danger
|
|
67
67
|
|
68
68
|
# @!group Git Metadata
|
69
69
|
# The overall lines of code added/removed in the diff
|
70
|
-
# @return
|
70
|
+
# @return [Fixnum]
|
71
71
|
#
|
72
72
|
def lines_of_code
|
73
73
|
@git.diff.lines
|
@@ -75,7 +75,7 @@ module Danger
|
|
75
75
|
|
76
76
|
# @!group Git Metadata
|
77
77
|
# The overall lines of code removed in the diff
|
78
|
-
# @return
|
78
|
+
# @return [Fixnum]
|
79
79
|
#
|
80
80
|
def deletions
|
81
81
|
@git.diff.deletions
|
@@ -83,7 +83,7 @@ module Danger
|
|
83
83
|
|
84
84
|
# @!group Git Metadata
|
85
85
|
# The overall lines of code added in the diff
|
86
|
-
# @return
|
86
|
+
# @return [Fixnum]
|
87
87
|
#
|
88
88
|
def insertions
|
89
89
|
@git.diff.insertions
|
@@ -34,12 +34,12 @@ module Danger
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.instance_name
|
37
|
-
|
37
|
+
'github'
|
38
38
|
end
|
39
39
|
|
40
40
|
# @!group PR Metadata
|
41
41
|
# The title of the Pull Request.
|
42
|
-
# @return String
|
42
|
+
# @return [String]
|
43
43
|
#
|
44
44
|
def pr_title
|
45
45
|
@github.pr_json[:title].to_s
|
@@ -47,7 +47,7 @@ module Danger
|
|
47
47
|
|
48
48
|
# @!group PR Metadata
|
49
49
|
# The body text of the Pull Request.
|
50
|
-
# @return String
|
50
|
+
# @return [String]
|
51
51
|
#
|
52
52
|
def pr_body
|
53
53
|
pr_json[:body].to_s
|
@@ -55,7 +55,7 @@ module Danger
|
|
55
55
|
|
56
56
|
# @!group PR Metadata
|
57
57
|
# The username of the author of the Pull Request.
|
58
|
-
# @return String
|
58
|
+
# @return [String]
|
59
59
|
#
|
60
60
|
def pr_author
|
61
61
|
pr_json[:user][:login].to_s
|
@@ -71,7 +71,7 @@ module Danger
|
|
71
71
|
|
72
72
|
# @!group PR Commit Metadata
|
73
73
|
# The branch to which the PR is going to be merged into.
|
74
|
-
# @return String
|
74
|
+
# @return [String]
|
75
75
|
#
|
76
76
|
def branch_for_base
|
77
77
|
pr_json[:base][:ref]
|
@@ -79,7 +79,7 @@ module Danger
|
|
79
79
|
|
80
80
|
# @!group PR Commit Metadata
|
81
81
|
# The branch to which the PR is going to be merged from.
|
82
|
-
# @return String
|
82
|
+
# @return [String]
|
83
83
|
#
|
84
84
|
def branch_for_head
|
85
85
|
pr_json[:head][:ref]
|
@@ -95,7 +95,7 @@ module Danger
|
|
95
95
|
|
96
96
|
# @!group PR Commit Metadata
|
97
97
|
# The head commit to which the PR is requesting to be merged from.
|
98
|
-
# @return String
|
98
|
+
# @return [String]
|
99
99
|
#
|
100
100
|
def head_commit
|
101
101
|
pr_json[:head][:sha]
|
@@ -104,7 +104,7 @@ module Danger
|
|
104
104
|
# @!group GitHub Misca
|
105
105
|
# The hash that represents the PR's JSON. For an example of what this looks like
|
106
106
|
# see the [Danger Fixture'd one](https://raw.githubusercontent.com/danger/danger/master/spec/fixtures/pr_response.json).
|
107
|
-
# @return Hash
|
107
|
+
# @return [Hash]
|
108
108
|
#
|
109
109
|
def pr_json
|
110
110
|
@github.pr_json
|
@@ -113,7 +113,7 @@ module Danger
|
|
113
113
|
# @!group GitHub Misc
|
114
114
|
# Provides access to the GitHub API client used inside Danger. Making
|
115
115
|
# it easy to use the GitHub API inside a Dangerfile.
|
116
|
-
# @return Octokit::Client
|
116
|
+
# @return [Octokit::Client]
|
117
117
|
def api
|
118
118
|
@github.client
|
119
119
|
end
|