danger 0.5.2 → 0.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.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/lib/danger/ci_source/local_git_repo.rb +3 -8
- data/lib/danger/circle_api.rb +1 -1
- data/lib/danger/commands/init.rb +12 -12
- data/lib/danger/commands/local.rb +1 -1
- data/lib/danger/dangerfile_dsl.rb +15 -4
- data/lib/danger/plugins/protect_files.rb +23 -0
- data/lib/danger/request_sources/github.rb +11 -4
- data/lib/danger/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bf96232696dca35c69a7d338d10bf16af6917a2
|
4
|
+
data.tar.gz: e5e7f69f74d8419ce1c0f2c0df2725aa8b1874bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c69c8d1096130a36a0749c55a6f1e7e90d2df55ee0048bfdd13d13f83760071e66c7a65ad188b3c12a4d71613f75d982698e3e7776438bc1dc3ec227a94fd445
|
7
|
+
data.tar.gz: 16a07e94b369b7da16ab0bab5c4d9935c40442a3284c43985254811f92da77439d81dc8c19dbb6f4a9893f1ea89fcac6155736f9dd07f9b000b1457c1d2d31ad
|
data/README.md
CHANGED
@@ -124,6 +124,14 @@ open to turning useful bits into the official API.
|
|
124
124
|
Using `danger local` will look for the last merged pull request in your git history, and apply your current
|
125
125
|
`Dangerfile` against that Pull Request. Useful when editing.
|
126
126
|
|
127
|
+
## Suppress Violations
|
128
|
+
|
129
|
+
You can tell Danger to ignore a specific warning or error by commenting on the PR body:
|
130
|
+
|
131
|
+
```
|
132
|
+
> Danger: Ignore "Developer Specific file shouldn't be changed"
|
133
|
+
```
|
134
|
+
|
127
135
|
## Useful bits of knowledge
|
128
136
|
|
129
137
|
* You can set the base branch in the command line arguments see: `bundle exec danger --help`, if you commonly merge into non-master branches.
|
@@ -25,14 +25,9 @@ module Danger
|
|
25
25
|
# get the remote URL
|
26
26
|
remote = run_git "remote show origin -n | grep \"Fetch URL\" | cut -d ':' -f 2-"
|
27
27
|
if remote
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
self.repo_slug = url.gsub("https://github.com/", "").gsub(".git", '')
|
32
|
-
|
33
|
-
# deal with SSH origin
|
34
|
-
elsif url.start_with? "git@github.com:"
|
35
|
-
self.repo_slug = url.gsub("git@github.com:", "").gsub(".git", '')
|
28
|
+
remote_url_matches = remote.first.chomp.match(%r{github\.com(:|/)(?<repo_slug>.+/.+?)(?:\.git)?$})
|
29
|
+
if !remote_url_matches.nil? and remote_url_matches["repo_slug"]
|
30
|
+
self.repo_slug = remote_url_matches["repo_slug"]
|
36
31
|
else
|
37
32
|
puts "Danger local requires a repository hosted on github."
|
38
33
|
end
|
data/lib/danger/circle_api.rb
CHANGED
@@ -14,7 +14,7 @@ module Danger
|
|
14
14
|
|
15
15
|
def fetch_build(repo_slug, build_number)
|
16
16
|
url = "project/#{repo_slug}/#{build_number}"
|
17
|
-
params = {
|
17
|
+
params = { 'circle-token' => circle_token }
|
18
18
|
response = client.get url, params, accept: 'application/json'
|
19
19
|
json = JSON.parse(response.body, symbolize_names: true)
|
20
20
|
json
|
data/lib/danger/commands/init.rb
CHANGED
@@ -75,7 +75,7 @@ module Danger
|
|
75
75
|
ui.say "that come up in day to day programming. It can be difficult to try and see those from day 1."
|
76
76
|
|
77
77
|
ui.say "\nIf you'd like to investigate the file, and make some changes - I'll wait here,"
|
78
|
-
ui.say "press return when you're ready to move on
|
78
|
+
ui.say "press return when you're ready to move on..."
|
79
79
|
ui.wait_for_return
|
80
80
|
end
|
81
81
|
|
@@ -96,7 +96,7 @@ module Danger
|
|
96
96
|
ui.say ""
|
97
97
|
note_about_clicking_links
|
98
98
|
ui.pause 1
|
99
|
-
ui.say "\nCool, please press return when you have your account ready (and you've verified the email
|
99
|
+
ui.say "\nCool, please press return when you have your account ready (and you've verified the email...)"
|
100
100
|
ui.wait_for_return
|
101
101
|
end
|
102
102
|
|
@@ -111,7 +111,7 @@ module Danger
|
|
111
111
|
|
112
112
|
if considered_an_oss_repo?
|
113
113
|
ui.say "For Open Source projects, I'd recommend giving the token the smallest scope possible."
|
114
|
-
ui.say "This means only providing access to " + "
|
114
|
+
ui.say "This means only providing access to " + "public_repo".yellow + " in the token.\n\n"
|
115
115
|
ui.pause 1
|
116
116
|
ui.say "This token limits Danger's abilities to just to writing comments on OSS projects. I recommend"
|
117
117
|
ui.say "this because the token can quite easily be extracted from the environment via pull requests."
|
@@ -122,10 +122,10 @@ module Danger
|
|
122
122
|
ui.say "This means only providing access to " + "repo".yellow + ", and its children in the token.\n\n"
|
123
123
|
ui.pause 1
|
124
124
|
ui.say "It's worth noting that you " + "should not".bold.white + " re-use this token for OSS repos."
|
125
|
-
ui.say "Make a new one for those repos with just " + "
|
125
|
+
ui.say "Make a new one for those repos with just " + "public_repo".yellow + "."
|
126
126
|
end
|
127
127
|
|
128
|
-
ui.say "\n👍, please press return when you have your token set up
|
128
|
+
ui.say "\n👍, please press return when you have your token set up..."
|
129
129
|
ui.wait_for_return
|
130
130
|
end
|
131
131
|
|
@@ -145,7 +145,7 @@ module Danger
|
|
145
145
|
uses_circle if File.exist? "circle.yml"
|
146
146
|
unsure_ci unless File.exist?(".travis.yml") || File.exist?(".circle.yml")
|
147
147
|
|
148
|
-
ui.say "\nOK, I'll give you a moment to do this
|
148
|
+
ui.say "\nOK, I'll give you a moment to do this..."
|
149
149
|
ui.wait_for_return
|
150
150
|
|
151
151
|
ui.say "Final step: exposing the GitHub token as an environment build variable."
|
@@ -161,7 +161,7 @@ module Danger
|
|
161
161
|
unsure_token unless File.exist?(".travis.yml") || File.exist?(".circle.yml")
|
162
162
|
|
163
163
|
ui.pause 0.6
|
164
|
-
ui.say "This is the last step, I can give you a second
|
164
|
+
ui.say "This is the last step, I can give you a second..."
|
165
165
|
ui.wait_for_return
|
166
166
|
end
|
167
167
|
|
@@ -179,7 +179,7 @@ module Danger
|
|
179
179
|
end
|
180
180
|
|
181
181
|
def uses_circle
|
182
|
-
danger = "bundle exec danger".yellow
|
182
|
+
danger = "- bundle exec danger".yellow
|
183
183
|
config = YAML.load(File.read("circle.yml"))
|
184
184
|
|
185
185
|
if config["test"]
|
@@ -192,7 +192,7 @@ module Danger
|
|
192
192
|
ui.say "Add this to the bottom of your circle.yml file:"
|
193
193
|
ui.say "test:".green
|
194
194
|
ui.say " post:".green
|
195
|
-
ui.say "
|
195
|
+
ui.say " #{danger}".green
|
196
196
|
end
|
197
197
|
end
|
198
198
|
|
@@ -221,13 +221,13 @@ module Danger
|
|
221
221
|
ui.say "the ramifications of turning on a setting I'm about to advise.\n"
|
222
222
|
ui.link "https://circleci.com/docs/fork-pr-builds"
|
223
223
|
ui.say "TLDR: If you have anything other than Danger config settings in CircleCI, then you should not turn on the setting."
|
224
|
-
ui.say "I'll give you a minute to read it
|
224
|
+
ui.say "I'll give you a minute to read it..."
|
225
225
|
ui.wait_for_return
|
226
226
|
|
227
227
|
ui.say "On Danger/Danger we turn on " + "Permissive building of fork pull requests".yellow + " this exposes the token to Danger"
|
228
228
|
ui.say "You can find this setting at:"
|
229
229
|
ui.link "https://circleci.com/gh/#{current_repo_slug}/edit#experimental\n"
|
230
|
-
ui.say "I'll hold
|
230
|
+
ui.say "I'll hold..."
|
231
231
|
ui.wait_for_return
|
232
232
|
end
|
233
233
|
|
@@ -249,7 +249,7 @@ module Danger
|
|
249
249
|
ui.header "Useful info"
|
250
250
|
ui.say "- One of the best ways to test out new rules locally is via " + "bundle exec danger local".yellow + "."
|
251
251
|
ui.pause 0.6
|
252
|
-
ui.say "- You can have Danger output all of its variables to the console via the " + "--verbose".yellow + "option."
|
252
|
+
ui.say "- You can have Danger output all of its variables to the console via the " + "--verbose".yellow + " option."
|
253
253
|
ui.pause 0.6
|
254
254
|
ui.say "- You can look at the following Dangerfiles to get some more ideas:"
|
255
255
|
ui.pause 0.6
|
@@ -27,7 +27,7 @@ module Danger
|
|
27
27
|
exit 0
|
28
28
|
end
|
29
29
|
|
30
|
-
puts "Running your Dangerfile against this PR - https://github.com/#{source.repo_slug}/
|
30
|
+
puts "Running your Dangerfile against this PR - https://github.com/#{source.repo_slug}/pull/#{source.pull_request_id}"
|
31
31
|
|
32
32
|
if verbose != true
|
33
33
|
puts "Turning on --verbose"
|
@@ -13,6 +13,17 @@ module Danger
|
|
13
13
|
self.warnings = []
|
14
14
|
self.errors = []
|
15
15
|
self.messages = []
|
16
|
+
load_plugins
|
17
|
+
end
|
18
|
+
|
19
|
+
def load_plugins
|
20
|
+
Dir['./lib/danger/plugins/*.rb'].each do |file|
|
21
|
+
require file
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def should_ignore_violation(message)
|
26
|
+
env.request_source.ignored_violations.include? message
|
16
27
|
end
|
17
28
|
|
18
29
|
# Declares a CI blocking error
|
@@ -20,6 +31,7 @@ module Danger
|
|
20
31
|
# @param [String] message
|
21
32
|
# The message to present to the user
|
22
33
|
def fail(message)
|
34
|
+
return if should_ignore_violation(message)
|
23
35
|
self.errors << message
|
24
36
|
puts "Raising error '#{message}'"
|
25
37
|
end
|
@@ -29,6 +41,7 @@ module Danger
|
|
29
41
|
# @param [String] message
|
30
42
|
# The message to present to the user
|
31
43
|
def warn(message)
|
44
|
+
return if should_ignore_violation(message)
|
32
45
|
self.warnings << message
|
33
46
|
puts "Printing warning '#{message}'"
|
34
47
|
end
|
@@ -46,10 +59,6 @@ module Danger
|
|
46
59
|
# that either the `scm` or the `request_source` can handle.
|
47
60
|
# This opens us up to letting those object extend themselves naturally.
|
48
61
|
def method_missing(method_sym, *_arguments, &_block)
|
49
|
-
unless AvailableValues.all.include?(method_sym)
|
50
|
-
raise "Unknown method '#{method_sym}', please check out the documentation for available variables".red
|
51
|
-
end
|
52
|
-
|
53
62
|
if AvailableValues.scm.include?(method_sym)
|
54
63
|
# SCM Source
|
55
64
|
return env.scm.send(method_sym)
|
@@ -59,6 +68,8 @@ module Danger
|
|
59
68
|
# Request Source
|
60
69
|
return env.request_source.send(method_sym)
|
61
70
|
end
|
71
|
+
|
72
|
+
raise "Unknown method '#{method_sym}', please check out the documentation for available variables".red
|
62
73
|
end
|
63
74
|
end
|
64
75
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Danger
|
2
|
+
class Dangerfile
|
3
|
+
module DSL
|
4
|
+
# Protect a file from being changed. This can
|
5
|
+
# be used in combination with some kind of
|
6
|
+
# permission check if a user is inside the org
|
7
|
+
def protect_files(path: nil, message: nil, fail_build: true)
|
8
|
+
broken_rule = false
|
9
|
+
Dir.glob(path) do |current|
|
10
|
+
broken_rule = true if self.env.scm.files_modified.include?(current)
|
11
|
+
end
|
12
|
+
|
13
|
+
return unless broken_rule
|
14
|
+
|
15
|
+
if fail_build
|
16
|
+
self.errors << message
|
17
|
+
else
|
18
|
+
self.messages << message
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -4,7 +4,7 @@ require 'redcarpet'
|
|
4
4
|
|
5
5
|
module Danger
|
6
6
|
class GitHub
|
7
|
-
attr_accessor :ci_source, :pr_json, :issue_json, :environment, :base_commit, :head_commit, :support_tokenless_auth
|
7
|
+
attr_accessor :ci_source, :pr_json, :issue_json, :environment, :base_commit, :head_commit, :support_tokenless_auth, :ignored_violations
|
8
8
|
|
9
9
|
def initialize(ci_source, environment)
|
10
10
|
self.ci_source = ci_source
|
@@ -30,6 +30,13 @@ module Danger
|
|
30
30
|
def fetch_details
|
31
31
|
self.pr_json = client.pull_request(ci_source.repo_slug, ci_source.pull_request_id)
|
32
32
|
fetch_issue_details(self.pr_json)
|
33
|
+
self.ignored_violations = ignored_violations_from_pr(self.pr_json)
|
34
|
+
end
|
35
|
+
|
36
|
+
def ignored_violations_from_pr(pr_json)
|
37
|
+
pr_body = pr_json[:body]
|
38
|
+
return [] if pr_body.nil?
|
39
|
+
pr_body.chomp.scan(/>\s*danger\s*:\s*ignore\s*"(.*)"/i).flatten
|
33
40
|
end
|
34
41
|
|
35
42
|
def fetch_issue_details(pr_json)
|
@@ -46,15 +53,15 @@ module Danger
|
|
46
53
|
end
|
47
54
|
|
48
55
|
def pr_title
|
49
|
-
self.pr_json[:title]
|
56
|
+
self.pr_json[:title].to_s
|
50
57
|
end
|
51
58
|
|
52
59
|
def pr_body
|
53
|
-
self.pr_json[:body]
|
60
|
+
self.pr_json[:body].to_s
|
54
61
|
end
|
55
62
|
|
56
63
|
def pr_author
|
57
|
-
self.pr_json[:user][:login]
|
64
|
+
self.pr_json[:user][:login].to_s
|
58
65
|
end
|
59
66
|
|
60
67
|
def pr_labels
|
data/lib/danger/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orta Therox
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: claide
|
@@ -224,6 +224,7 @@ files:
|
|
224
224
|
- lib/danger/dangerfile.rb
|
225
225
|
- lib/danger/dangerfile_dsl.rb
|
226
226
|
- lib/danger/environment_manager.rb
|
227
|
+
- lib/danger/plugins/protect_files.rb
|
227
228
|
- lib/danger/request_sources/github.rb
|
228
229
|
- lib/danger/scm_source/git_repo.rb
|
229
230
|
- lib/danger/standard_error.rb
|