codeclimate-services 1.11.0 → 1.11.3
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/.circleci/config.yml +26 -0
- data/.ruby-version +1 -1
- data/Gemfile +0 -1
- data/README.md +12 -0
- data/lib/cc/presenters/pull_requests_presenter.rb +4 -2
- data/lib/cc/pull_requests.rb +22 -19
- data/lib/cc/service/formatter.rb +1 -1
- data/lib/cc/service.rb +1 -0
- data/lib/cc/services/github_pull_requests.rb +5 -0
- data/lib/cc/services/jira.rb +1 -1
- data/lib/cc/services/version.rb +1 -1
- data/spec/cc/presenters/pull_requests_presenter_spec.rb +9 -1
- data/spec/cc/pull_requests_spec.rb +123 -0
- data/spec/cc/service/formatter_spec.rb +21 -0
- data/spec/cc/service/github_pull_requests_spec.rb +20 -0
- metadata +8 -5
- data/circle.yml +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9857632046cf9409d85f8ff2429efabf13c6eb5ab1300023d52407dc381deac0
|
4
|
+
data.tar.gz: 65fd4acdcc300cf00472ac8c8df740d0ec75dd382014a8963117680393629578
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51e15698f1fbe51598067be6452db4b19ff6c4f913392ef172a772d58cb2c548805f569d34f11c74cb9ab486937cc75395104ffc082966b3a2edd7ee5866d832
|
7
|
+
data.tar.gz: 758fea2bc59978563b7a133affb1c8fd1d63d94250e88bbcabcd1d945a406c76845065abe7f249bd4ba33c4249b6620dd129d7ccfb8288a00297aa2309426b0a
|
@@ -0,0 +1,26 @@
|
|
1
|
+
version: 2.0
|
2
|
+
jobs:
|
3
|
+
test:
|
4
|
+
environment:
|
5
|
+
CC_TEST_REPORTER_ID: ad21bc049a323138b0a88086069115e9df6dba417912095b7bb17b7a65fc6182
|
6
|
+
docker:
|
7
|
+
- image: "circleci/ruby:2.7.5"
|
8
|
+
working_directory: ~/codeclimate/codeclimate-services
|
9
|
+
steps:
|
10
|
+
- checkout
|
11
|
+
- run:
|
12
|
+
name: Setup Coverage
|
13
|
+
command: |
|
14
|
+
(curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > cc-test-reporter && chmod +x ./cc-test-reporter) || echo "Couldn't download test reporter"
|
15
|
+
- run: bundle install && bundle exec rake
|
16
|
+
- persist_to_workspace:
|
17
|
+
root: .
|
18
|
+
paths:
|
19
|
+
- coverage
|
20
|
+
- run: ./cc-test-reporter after-build --exit-code $? || echo "Send coverage skipped..."
|
21
|
+
|
22
|
+
workflows:
|
23
|
+
version: 2
|
24
|
+
test:
|
25
|
+
jobs:
|
26
|
+
- test
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.5
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -131,6 +131,18 @@ and always return a hash of `{ ok: true|false, message: "String (HTML ok)" }`.
|
|
131
131
|
|
132
132
|
When you open your PR, please include an image for your service.
|
133
133
|
|
134
|
+
## Release
|
135
|
+
|
136
|
+
1. Bump the version on `lib/cc/services/version`
|
137
|
+
2. A gem owner developer should run the following: (check owners here https://rubygems.org/gems/codeclimate-services)
|
138
|
+
```shell
|
139
|
+
bundle install
|
140
|
+
gem build codeclimate-services.gemspec
|
141
|
+
gem push codeclimate-services-<VERSION>.gem
|
142
|
+
git tag v<VERSION>
|
143
|
+
git push origin master --tags
|
144
|
+
```
|
145
|
+
|
134
146
|
## License
|
135
147
|
|
136
148
|
See LICENSE.txt. This incorporates code from bugsnag-notification-plugins and
|
@@ -36,9 +36,11 @@ module CC
|
|
36
36
|
def coverage_message
|
37
37
|
message = "#{formatted_percent(@covered_percent)}%"
|
38
38
|
|
39
|
-
if @covered_percent_delta
|
39
|
+
return message if @covered_percent_delta.nil?
|
40
|
+
|
41
|
+
if @covered_percent_delta.round(2) > 0
|
40
42
|
message += " (+#{formatted_percent(@covered_percent_delta)}%)"
|
41
|
-
elsif @covered_percent_delta < 0
|
43
|
+
elsif @covered_percent_delta.round(2) < 0
|
42
44
|
message += " (#{formatted_percent(@covered_percent_delta)}%)"
|
43
45
|
end
|
44
46
|
|
data/lib/cc/pull_requests.rb
CHANGED
@@ -6,29 +6,15 @@ class CC::PullRequests < CC::Service
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def receive_pull_request
|
9
|
-
|
10
|
-
state = @payload["state"]
|
11
|
-
|
12
|
-
if %w[pending success failure skipped error].include?(state) && report_status?
|
13
|
-
send("update_status_#{state}")
|
14
|
-
else
|
15
|
-
@response = simple_failure("Unknown state")
|
16
|
-
end
|
17
|
-
|
18
|
-
response
|
9
|
+
receive_request(%w[pending success failure skipped error], :update_status)
|
19
10
|
end
|
20
11
|
|
21
12
|
def receive_pull_request_coverage
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
if state == "success" && report_status?
|
26
|
-
update_coverage_status_success
|
27
|
-
else
|
28
|
-
@response = simple_failure("Unknown state")
|
29
|
-
end
|
13
|
+
receive_request("success", :update_coverage_status)
|
14
|
+
end
|
30
15
|
|
31
|
-
|
16
|
+
def receive_pull_request_diff_coverage
|
17
|
+
receive_request("skipped", :update_diff_coverage_status)
|
32
18
|
end
|
33
19
|
|
34
20
|
private
|
@@ -57,6 +43,10 @@ class CC::PullRequests < CC::Service
|
|
57
43
|
raise NotImplementedError
|
58
44
|
end
|
59
45
|
|
46
|
+
def update_diff_coverage_status_skipped
|
47
|
+
raise NotImplementedError
|
48
|
+
end
|
49
|
+
|
60
50
|
def update_status_failure
|
61
51
|
raise NotImplementedError
|
62
52
|
end
|
@@ -91,6 +81,19 @@ class CC::PullRequests < CC::Service
|
|
91
81
|
end
|
92
82
|
end
|
93
83
|
|
84
|
+
def receive_request(*permitted_statuses, call_method)
|
85
|
+
setup_http
|
86
|
+
state = @payload["state"]
|
87
|
+
|
88
|
+
if permitted_statuses.flatten.include?(state) && report_status?
|
89
|
+
send(call_method.to_s + "_#{state}")
|
90
|
+
else
|
91
|
+
@response = simple_failure("Unknown state")
|
92
|
+
end
|
93
|
+
|
94
|
+
response
|
95
|
+
end
|
96
|
+
|
94
97
|
def presenter
|
95
98
|
CC::Service::PullRequestsPresenter.new(@payload)
|
96
99
|
end
|
data/lib/cc/service/formatter.rb
CHANGED
data/lib/cc/service.rb
CHANGED
@@ -71,6 +71,11 @@ class CC::Service::GitHubPullRequests < CC::PullRequests
|
|
71
71
|
update_status("success", presenter.coverage_message, "#{config.context}/coverage")
|
72
72
|
end
|
73
73
|
|
74
|
+
def update_diff_coverage_status_skipped
|
75
|
+
update_status("success", presenter.skipped_message, "#{config.context}/diff-coverage")
|
76
|
+
update_status("success", presenter.skipped_message, "#{config.context}/total-coverage")
|
77
|
+
end
|
78
|
+
|
74
79
|
def update_status_failure
|
75
80
|
update_status("failure", presenter.success_message)
|
76
81
|
end
|
data/lib/cc/services/jira.rb
CHANGED
@@ -3,7 +3,7 @@ require "base64"
|
|
3
3
|
class CC::Service::Jira < CC::Service
|
4
4
|
class Config < CC::Service::Config
|
5
5
|
attribute :domain, Axiom::Types::String,
|
6
|
-
description: "Your JIRA host domain (e.g. yourjira.com:PORT, please exclude https://)"
|
6
|
+
description: "Your JIRA host domain (e.g. yourjira.com[:PORT], please exclude https:// and only add PORT if you are using a different port number to access your own server that is not the default)"
|
7
7
|
|
8
8
|
attribute :username, Axiom::Types::String,
|
9
9
|
description: "Must exactly match the 'username' that appears on your JIRA profile page."
|
data/lib/cc/services/version.rb
CHANGED
@@ -30,12 +30,20 @@ describe CC::Service::PullRequestsPresenter, type: :service do
|
|
30
30
|
expect("85%").to eq(build_presenter({}, "covered_percent" => 85, "covered_percent_delta" => 0).coverage_message)
|
31
31
|
end
|
32
32
|
|
33
|
+
it "message coverage without delta" do
|
34
|
+
expect("85%").to eq(build_presenter({}, "covered_percent" => 85, "covered_percent_delta" => nil).coverage_message)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "message coverage the same when rounded" do
|
38
|
+
expect("85%").to eq(build_presenter({}, "covered_percent" => 85, "covered_percent_delta" => 0.0005).coverage_message)
|
39
|
+
end
|
40
|
+
|
33
41
|
it "message coverage up" do
|
34
42
|
expect("85.5% (+2.46%)").to eq(build_presenter({}, "covered_percent" => 85.5, "covered_percent_delta" => 2.4567).coverage_message)
|
35
43
|
end
|
36
44
|
|
37
45
|
it "message coverage down" do
|
38
|
-
expect("85.35% (-3%)").to eq(
|
46
|
+
expect("85.35% (-3%)").to eq(build_presenter({}, "covered_percent" => 85.348, "covered_percent_delta" => -3.0).coverage_message)
|
39
47
|
end
|
40
48
|
|
41
49
|
it "message approved" do
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe CC::PullRequests do
|
4
|
+
shared_examples "receive method" do
|
5
|
+
before do
|
6
|
+
allow(instance).to receive(:report_status?).and_return(true)
|
7
|
+
expect(instance).to receive(:setup_http)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "when the status is valid" do
|
11
|
+
let(:instance) { CC::PullRequests.new({}, name: "test", state: payload_status) }
|
12
|
+
let(:response) do
|
13
|
+
{
|
14
|
+
ok: true,
|
15
|
+
state: 201,
|
16
|
+
message: "Success",
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
it "calls the corresponding method" do
|
21
|
+
expect(instance).to receive(expected_method_name) do
|
22
|
+
instance.instance_variable_set(:@response, response)
|
23
|
+
end
|
24
|
+
result = instance.send(method_to_call)
|
25
|
+
|
26
|
+
expect(result).to eq(response)
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when report_status? is false" do
|
30
|
+
before { expect(instance).to receive(:report_status?).and_return(false) }
|
31
|
+
|
32
|
+
it "returns unknown status message" do
|
33
|
+
expect(instance).not_to receive(expected_method_name)
|
34
|
+
result = instance.send(method_to_call)
|
35
|
+
|
36
|
+
expect(result).to eq({ ok: false, message: "Unknown state" })
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when the status is not valid" do
|
42
|
+
let(:instance) { CC::PullRequests.new({}, name: "test", status: "invalid_status") }
|
43
|
+
|
44
|
+
it "returns unknown status message" do
|
45
|
+
expect(instance).not_to receive(expected_method_name)
|
46
|
+
result = instance.send(method_to_call)
|
47
|
+
|
48
|
+
expect(result).to eq({ ok: false, message: "Unknown state" })
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#receive_test" do
|
54
|
+
let(:instance) { CC::PullRequests.new({}, name: "test") }
|
55
|
+
|
56
|
+
before do
|
57
|
+
expect(instance).to receive(:base_status_url) do |param|
|
58
|
+
"some_url" + param
|
59
|
+
end
|
60
|
+
expect(instance).to receive(:setup_http)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "makes a raw http test post" do
|
64
|
+
expect_any_instance_of(CC::Service::HTTP).to receive(:raw_post).with(
|
65
|
+
"some_url" + ("0" * 40),
|
66
|
+
{ state: "success" }.to_json
|
67
|
+
)
|
68
|
+
|
69
|
+
instance.receive_test
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when raising an HTTPError" do
|
73
|
+
context "when message is equal to test_status_code" do
|
74
|
+
it "returns an ok message" do
|
75
|
+
expect(instance).to receive(:test_status_code) { 777 }
|
76
|
+
expect(instance).to receive(:raw_post).
|
77
|
+
and_raise(CC::Service::HTTPError.new("error", status: 777))
|
78
|
+
|
79
|
+
result = instance.receive_test
|
80
|
+
expect(result).to include(
|
81
|
+
ok: true,
|
82
|
+
status: 777,
|
83
|
+
message: "Access token is valid"
|
84
|
+
)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "when message is different than test_status_code" do
|
89
|
+
it "raises the error" do
|
90
|
+
expect(instance).to receive(:test_status_code) { 777 }
|
91
|
+
expect(instance).to receive(:raw_post).
|
92
|
+
and_raise(CC::Service::HTTPError.new("error", status: 000))
|
93
|
+
|
94
|
+
expect { instance.receive_test }.to raise_error
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#receive_pull_request" do
|
101
|
+
let(:payload_status) { "skipped" }
|
102
|
+
let(:expected_method_name) { :update_status_skipped }
|
103
|
+
let(:method_to_call) { :receive_pull_request }
|
104
|
+
|
105
|
+
it_behaves_like "receive method"
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "#receive_pull_request_coverage" do
|
109
|
+
let(:payload_status) { "success" }
|
110
|
+
let(:expected_method_name) { :update_coverage_status_success }
|
111
|
+
let(:method_to_call) { :receive_pull_request_coverage }
|
112
|
+
|
113
|
+
it_behaves_like "receive method"
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "#receive_pull_request_diff_coverage" do
|
117
|
+
let(:payload_status) { "skipped" }
|
118
|
+
let(:expected_method_name) { :update_diff_coverage_status_skipped }
|
119
|
+
let(:method_to_call) { :receive_pull_request_diff_coverage }
|
120
|
+
|
121
|
+
it_behaves_like "receive method"
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe CC::Service::Formatter do
|
2
|
+
|
3
|
+
class TestFormatter < described_class
|
4
|
+
def format_test
|
5
|
+
message = message_prefix
|
6
|
+
message << "This is a test"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
FakeService = Struct.new(:receive)
|
11
|
+
|
12
|
+
it "supports passing nil as prefix" do
|
13
|
+
formatter = TestFormatter.new(
|
14
|
+
FakeService.new(:some_result),
|
15
|
+
prefix: nil,
|
16
|
+
prefix_with_repo: false,
|
17
|
+
)
|
18
|
+
|
19
|
+
expect(formatter.format_test).to eq("This is a test")
|
20
|
+
end
|
21
|
+
end
|
@@ -82,6 +82,18 @@ describe CC::Service::GitHubPullRequests, type: :service do
|
|
82
82
|
covered_percent_delta: 2.0)
|
83
83
|
end
|
84
84
|
|
85
|
+
it "pull request diff coverage skipped" do
|
86
|
+
expect_status_update("pbrisbin/foo", "abc123", "state" => "success",
|
87
|
+
"description" => /skipped analysis/, "context" => /diff-coverage/)
|
88
|
+
expect_status_update("pbrisbin/foo", "abc123", "state" => "success",
|
89
|
+
"description" => /skipped analysis/, "context" => /total-coverage/)
|
90
|
+
|
91
|
+
receive_pull_request_diff_coverage({},
|
92
|
+
github_slug: "pbrisbin/foo",
|
93
|
+
commit_sha: "abc123",
|
94
|
+
state: "skipped")
|
95
|
+
end
|
96
|
+
|
85
97
|
it "pull request status test success" do
|
86
98
|
http_stubs.post("/repos/pbrisbin/foo/statuses/#{"0" * 40}") { |_env| [422, {}, ""] }
|
87
99
|
|
@@ -213,6 +225,14 @@ describe CC::Service::GitHubPullRequests, type: :service do
|
|
213
225
|
)
|
214
226
|
end
|
215
227
|
|
228
|
+
def receive_pull_request_diff_coverage(config, event_data)
|
229
|
+
service_receive(
|
230
|
+
CC::Service::GitHubPullRequests,
|
231
|
+
{ oauth_token: "123" }.merge(config),
|
232
|
+
{ name: "pull_request_diff_coverage" }.merge(event_data),
|
233
|
+
)
|
234
|
+
end
|
235
|
+
|
216
236
|
def receive_test(config, event_data = {})
|
217
237
|
service_receive(
|
218
238
|
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.11.
|
4
|
+
version: 1.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Helmkamp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -129,6 +129,7 @@ executables: []
|
|
129
129
|
extensions: []
|
130
130
|
extra_rdoc_files: []
|
131
131
|
files:
|
132
|
+
- ".circleci/config.yml"
|
132
133
|
- ".codeclimate.yml"
|
133
134
|
- ".gitignore"
|
134
135
|
- ".rspec"
|
@@ -144,7 +145,6 @@ files:
|
|
144
145
|
- bin/nokogiri
|
145
146
|
- bin/pry
|
146
147
|
- bin/rake
|
147
|
-
- circle.yml
|
148
148
|
- codeclimate-services.gemspec
|
149
149
|
- config/cacert.pem
|
150
150
|
- config/load.rb
|
@@ -194,10 +194,12 @@ files:
|
|
194
194
|
- spec/axiom/types/token_spec.rb
|
195
195
|
- spec/cc/formatters/snapshot_formatter_spec.rb
|
196
196
|
- spec/cc/presenters/pull_requests_presenter_spec.rb
|
197
|
+
- spec/cc/pull_requests_spec.rb
|
197
198
|
- spec/cc/resolve_spec.rb
|
198
199
|
- spec/cc/service/asana_spec.rb
|
199
200
|
- spec/cc/service/campfire_spec.rb
|
200
201
|
- spec/cc/service/flowdock_spec.rb
|
202
|
+
- spec/cc/service/formatter_spec.rb
|
201
203
|
- spec/cc/service/github_issues_spec.rb
|
202
204
|
- spec/cc/service/github_pull_requests_spec.rb
|
203
205
|
- spec/cc/service/gitlab_merge_requests_spec.rb
|
@@ -237,8 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
237
239
|
- !ruby/object:Gem::Version
|
238
240
|
version: '0'
|
239
241
|
requirements: []
|
240
|
-
|
241
|
-
rubygems_version: 2.7.7
|
242
|
+
rubygems_version: 3.3.7
|
242
243
|
signing_key:
|
243
244
|
specification_version: 4
|
244
245
|
summary: Service classes for Code Climate
|
@@ -247,10 +248,12 @@ test_files:
|
|
247
248
|
- spec/axiom/types/token_spec.rb
|
248
249
|
- spec/cc/formatters/snapshot_formatter_spec.rb
|
249
250
|
- spec/cc/presenters/pull_requests_presenter_spec.rb
|
251
|
+
- spec/cc/pull_requests_spec.rb
|
250
252
|
- spec/cc/resolve_spec.rb
|
251
253
|
- spec/cc/service/asana_spec.rb
|
252
254
|
- spec/cc/service/campfire_spec.rb
|
253
255
|
- spec/cc/service/flowdock_spec.rb
|
256
|
+
- spec/cc/service/formatter_spec.rb
|
254
257
|
- spec/cc/service/github_issues_spec.rb
|
255
258
|
- spec/cc/service/github_pull_requests_spec.rb
|
256
259
|
- spec/cc/service/gitlab_merge_requests_spec.rb
|
data/circle.yml
DELETED