codeclimate-services 1.2.0 → 1.3.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 +16 -0
- data/lib/cc/presenters/pull_requests_presenter.rb +6 -0
- data/lib/cc/service.rb +11 -1
- data/lib/cc/services/github_pull_requests.rb +49 -18
- data/lib/cc/services/version.rb +1 -1
- data/test/github_pull_requests_test.rb +22 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a4f61a5b3f784878457cd8e81bfe7982eae48d4
|
4
|
+
data.tar.gz: 5af929445d6091a1c6694eecd0a5f2d4985c8382
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cf81df8fcfe3d364fc4024e2b89529177c5d5e6206b74ce8545168c78c6f3d7424ddeb56d7785f682790f6912a3fe8093764b54fa66f021bd1ed76b8363713b
|
7
|
+
data.tar.gz: efd09827e835d99ed4210525bba7bc764441925670477c7726002e9b02e8d45cbae2f9a9d1aa50589bdfd9e156aed314d97600e5f29699846a4b28d5ed740be6
|
data/README.md
CHANGED
@@ -95,6 +95,22 @@ Event-specific attributes:
|
|
95
95
|
}
|
96
96
|
```
|
97
97
|
|
98
|
+
### Pull Request Coverage
|
99
|
+
|
100
|
+
Event name: `pull_request_coverage`
|
101
|
+
|
102
|
+
Event-specific attributes:
|
103
|
+
|
104
|
+
```javascript
|
105
|
+
{
|
106
|
+
"state": String, // "pending", "success", or "failure"
|
107
|
+
"github_slug": String, // user/repo
|
108
|
+
"number": String,
|
109
|
+
"commit_sha": String,
|
110
|
+
"covered_percent_delta": Float,
|
111
|
+
}
|
112
|
+
```
|
113
|
+
|
98
114
|
## Other Events
|
99
115
|
|
100
116
|
The following are not fully implemented yet.
|
@@ -10,6 +10,8 @@ module CC
|
|
10
10
|
@fixed_count = issue_comparison_counts["fixed"]
|
11
11
|
@new_count = issue_comparison_counts["new"]
|
12
12
|
end
|
13
|
+
|
14
|
+
@covered_percent = payload["covered_percent"]
|
13
15
|
end
|
14
16
|
|
15
17
|
def error_message
|
@@ -24,6 +26,10 @@ module CC
|
|
24
26
|
"Code Climate has skipped analysis of this commit."
|
25
27
|
end
|
26
28
|
|
29
|
+
def coverage_success_message
|
30
|
+
"Test coverage for this commit: #{@covered_percent}%"
|
31
|
+
end
|
32
|
+
|
27
33
|
def success_message
|
28
34
|
if both_issue_counts_zero?
|
29
35
|
"Code Climate didn't find any new or fixed issues."
|
data/lib/cc/service.rb
CHANGED
@@ -30,7 +30,17 @@ module CC
|
|
30
30
|
|
31
31
|
attr_reader :event, :config, :payload
|
32
32
|
|
33
|
-
ALL_EVENTS = %w[
|
33
|
+
ALL_EVENTS = %w[
|
34
|
+
coverage
|
35
|
+
issue
|
36
|
+
pull_request
|
37
|
+
pull_request_coverage
|
38
|
+
quality
|
39
|
+
snapshot
|
40
|
+
test
|
41
|
+
unit
|
42
|
+
vulnerability
|
43
|
+
].freeze
|
34
44
|
|
35
45
|
# Tracks the defined services.
|
36
46
|
def self.services
|
@@ -6,9 +6,13 @@ class CC::Service::GitHubPullRequests < CC::Service
|
|
6
6
|
label: "OAuth Token",
|
7
7
|
description: "A personal OAuth token with permissions for the repo."
|
8
8
|
attribute :update_status, Axiom::Types::Boolean,
|
9
|
-
label: "Update status?",
|
9
|
+
label: "Update analysis status?",
|
10
10
|
description: "Update the pull request status after analyzing?",
|
11
11
|
default: true
|
12
|
+
attribute :update_coverage_status, Axiom::Types::Boolean,
|
13
|
+
label: "Update coverage status?",
|
14
|
+
description: "Update the pull request status with test coverage reports?",
|
15
|
+
default: false
|
12
16
|
attribute :base_url, Axiom::Types::String,
|
13
17
|
label: "Github API Base URL",
|
14
18
|
description: "Base URL for the Github API",
|
@@ -38,13 +42,30 @@ class CC::Service::GitHubPullRequests < CC::Service
|
|
38
42
|
end
|
39
43
|
|
40
44
|
def receive_pull_request
|
41
|
-
|
42
|
-
|
45
|
+
if update_status?
|
46
|
+
setup_http
|
47
|
+
state = @payload["state"]
|
48
|
+
|
49
|
+
if %w[pending success failure skipped error].include?(state)
|
50
|
+
send("update_status_#{state}")
|
51
|
+
else
|
52
|
+
@response = simple_failure("Unknown state")
|
53
|
+
end
|
54
|
+
end
|
43
55
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
56
|
+
response
|
57
|
+
end
|
58
|
+
|
59
|
+
def receive_pull_request_coverage
|
60
|
+
if update_coverage_status?
|
61
|
+
setup_http
|
62
|
+
state = @payload["state"]
|
63
|
+
|
64
|
+
if state == "success"
|
65
|
+
update_coverage_status_success
|
66
|
+
else
|
67
|
+
@response = simple_failure("Unknown state")
|
68
|
+
end
|
48
69
|
end
|
49
70
|
|
50
71
|
response
|
@@ -53,7 +74,15 @@ class CC::Service::GitHubPullRequests < CC::Service
|
|
53
74
|
private
|
54
75
|
|
55
76
|
def update_status?
|
56
|
-
|
77
|
+
effective_boolean?(config.update_status)
|
78
|
+
end
|
79
|
+
|
80
|
+
def update_coverage_status?
|
81
|
+
effective_boolean?(config.update_coverage_status)
|
82
|
+
end
|
83
|
+
|
84
|
+
def effective_boolean?(value)
|
85
|
+
[true, "1"].include?(value)
|
57
86
|
end
|
58
87
|
|
59
88
|
def simple_failure(message)
|
@@ -72,6 +101,10 @@ private
|
|
72
101
|
update_status("success", presenter.success_message)
|
73
102
|
end
|
74
103
|
|
104
|
+
def update_coverage_status_success
|
105
|
+
update_status("success", presenter.coverage_success_message, "#{config.context}/coverage")
|
106
|
+
end
|
107
|
+
|
75
108
|
def update_status_failure
|
76
109
|
update_status("failure", presenter.success_message)
|
77
110
|
end
|
@@ -94,16 +127,14 @@ private
|
|
94
127
|
)
|
95
128
|
end
|
96
129
|
|
97
|
-
def update_status(state, description)
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
@response = service_post(status_url, params.to_json)
|
106
|
-
end
|
130
|
+
def update_status(state, description, context = config.context)
|
131
|
+
params = {
|
132
|
+
state: state,
|
133
|
+
description: description,
|
134
|
+
target_url: @payload["details_url"],
|
135
|
+
context: context,
|
136
|
+
}
|
137
|
+
@response = service_post(status_url, params.to_json)
|
107
138
|
end
|
108
139
|
|
109
140
|
def receive_test_status
|
data/lib/cc/services/version.rb
CHANGED
@@ -100,6 +100,20 @@ class TestGitHubPullRequests < CC::Service::TestCase
|
|
100
100
|
})
|
101
101
|
end
|
102
102
|
|
103
|
+
def test_pull_request_coverage_status_success
|
104
|
+
expect_status_update("pbrisbin/foo", "abc123", {
|
105
|
+
"state" => "success",
|
106
|
+
"description" => "Test coverage for this commit: 87%",
|
107
|
+
})
|
108
|
+
|
109
|
+
receive_pull_request_coverage({ update_coverage_status: true }, {
|
110
|
+
github_slug: "pbrisbin/foo",
|
111
|
+
commit_sha: "abc123",
|
112
|
+
state: "success",
|
113
|
+
covered_percent: 87
|
114
|
+
})
|
115
|
+
end
|
116
|
+
|
103
117
|
def test_no_status_update_for_skips_when_update_status_config_is_falsey
|
104
118
|
# With no POST expectation, test will fail if request is made.
|
105
119
|
|
@@ -233,6 +247,14 @@ private
|
|
233
247
|
)
|
234
248
|
end
|
235
249
|
|
250
|
+
def receive_pull_request_coverage(config, event_data)
|
251
|
+
receive(
|
252
|
+
CC::Service::GitHubPullRequests,
|
253
|
+
{ oauth_token: "123" }.merge(config),
|
254
|
+
{ name: "pull_request_coverage", issue_comparison_counts: {'fixed' => 1, 'new' => 2} }.merge(event_data)
|
255
|
+
)
|
256
|
+
end
|
257
|
+
|
236
258
|
def receive_test(config, event_data = {})
|
237
259
|
receive(
|
238
260
|
CC::Service::GitHubPullRequests,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codeclimate-services
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Helmkamp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -237,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
237
237
|
version: '0'
|
238
238
|
requirements: []
|
239
239
|
rubyforge_project:
|
240
|
-
rubygems_version: 2.
|
240
|
+
rubygems_version: 2.5.1
|
241
241
|
signing_key:
|
242
242
|
specification_version: 4
|
243
243
|
summary: Service classes for Code Climate
|