codecov 0.2.1 → 0.2.6
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/lib/codecov.rb +29 -13
- data/test/test_codecov.rb +106 -20
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b2e67c7bb37041adf9adb9dbe2fd8f9c2966131d338961785a29b25090e7206
|
4
|
+
data.tar.gz: 2ada93e046953b7e77397831259a21fcaef09012f4ea0c2c4584668b080d68a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faf56288e9f75ee77f230da561da1ee87e3305fa7220e4b5962e2011e7f7d8c1f3c1a234a386ac698b00ad8999f500787f6b218c78c9009cb25bc096c056093c
|
7
|
+
data.tar.gz: 233cbebb75102d82b62daf1087a490493ee3cef84de7e91163bc8c5040076f2f1798ebde32aa7971c2234c306adcc13c7a3abcc1929489c1aba124a319f195cb
|
data/lib/codecov.rb
CHANGED
@@ -8,7 +8,7 @@ require 'colorize'
|
|
8
8
|
require 'zlib'
|
9
9
|
|
10
10
|
class SimpleCov::Formatter::Codecov
|
11
|
-
VERSION = '0.2.
|
11
|
+
VERSION = '0.2.6'
|
12
12
|
|
13
13
|
### CIs
|
14
14
|
RECOGNIZED_CIS = [
|
@@ -20,6 +20,7 @@ class SimpleCov::Formatter::Codecov
|
|
20
20
|
CIRCLE = 'Circle CI',
|
21
21
|
CODESHIP = 'Codeship CI',
|
22
22
|
DRONEIO = 'Drone CI',
|
23
|
+
GITHUB = 'GitHub Actions',
|
23
24
|
GITLAB = 'GitLab CI',
|
24
25
|
HEROKU = 'Heroku CI',
|
25
26
|
JENKINS = 'Jenkins CI',
|
@@ -62,6 +63,8 @@ class SimpleCov::Formatter::Codecov
|
|
62
63
|
CODESHIP
|
63
64
|
elsif ((ENV['CI'] == 'true') || (ENV['CI'] == 'drone')) && (ENV['DRONE'] == 'true')
|
64
65
|
DRONEIO
|
66
|
+
elsif (ENV['CI'] == 'true') && (ENV['GITHUB_ACTIONS'] == 'true')
|
67
|
+
GITHUB
|
65
68
|
elsif !ENV['GITLAB_CI'].nil?
|
66
69
|
GITLAB
|
67
70
|
elsif ENV['HEROKU_TEST_RUN_ID']
|
@@ -172,6 +175,15 @@ class SimpleCov::Formatter::Codecov
|
|
172
175
|
params[:build_url] = ENV['DRONE_BUILD_LINK'] || ENV['DRONE_BUILD_URL'] || ENV['CI_BUILD_URL']
|
173
176
|
params[:pr] = ENV['DRONE_PULL_REQUEST']
|
174
177
|
params[:tag] = ENV['DRONE_TAG']
|
178
|
+
when GITHUB
|
179
|
+
# https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables
|
180
|
+
params[:service] = 'github-actions'
|
181
|
+
params[:branch] = ENV['GITHUB_HEAD_REF'] || ENV['GITHUB_REF'].sub('refs/head/', '')
|
182
|
+
# PR refs are in the format: refs/pull/7/merge for pull_request events
|
183
|
+
params[:pr] = ENV['GITHUB_REF'].split('/')[2] unless ENV['GITHUB_HEAD_REF'].nil? || ENV['GITHUB_HEAD_REF'].empty?
|
184
|
+
params[:slug] = ENV['GITHUB_REPOSITORY']
|
185
|
+
params[:build] = ENV['GITHUB_RUN_ID']
|
186
|
+
params[:commit] = ENV['GITHUB_SHA']
|
175
187
|
when GITLAB
|
176
188
|
# http://doc.gitlab.com/ci/examples/README.html#environmental-variables
|
177
189
|
# https://gitlab.com/gitlab-org/gitlab-ci-runner/blob/master/lib/build.rb#L96
|
@@ -280,20 +292,21 @@ class SimpleCov::Formatter::Codecov
|
|
280
292
|
retries = 3
|
281
293
|
begin
|
282
294
|
response = https.request(req)
|
283
|
-
rescue Timeout::Error => e
|
295
|
+
rescue Timeout::Error, SocketError => e
|
284
296
|
retries -= 1
|
285
297
|
|
286
298
|
if retries.zero?
|
287
|
-
puts 'Timeout error uploading coverage reports to Codecov. Out of retries.'
|
299
|
+
puts 'Timeout or connection error uploading coverage reports to Codecov. Out of retries.'
|
288
300
|
puts e
|
289
301
|
return response
|
290
302
|
end
|
291
303
|
|
292
|
-
puts 'Timeout error uploading coverage reports to Codecov. Retrying...'
|
304
|
+
puts 'Timeout or connection error uploading coverage reports to Codecov. Retrying...'
|
293
305
|
puts e
|
294
306
|
retry
|
295
307
|
rescue StandardError => e
|
296
308
|
puts 'Error uploading coverage reports to Codecov. Sorry'
|
309
|
+
puts e.class.name
|
297
310
|
puts e
|
298
311
|
return response
|
299
312
|
end
|
@@ -304,7 +317,7 @@ class SimpleCov::Formatter::Codecov
|
|
304
317
|
def create_report(report)
|
305
318
|
result = {
|
306
319
|
'meta' => {
|
307
|
-
'version' => 'codecov-ruby/v' +
|
320
|
+
'version' => 'codecov-ruby/v' + VERSION
|
308
321
|
}
|
309
322
|
}
|
310
323
|
result.update(result_to_codecov(report))
|
@@ -314,10 +327,12 @@ class SimpleCov::Formatter::Codecov
|
|
314
327
|
def gzip_report(report)
|
315
328
|
puts ['==>'.green, 'Gzipping contents'].join(' ')
|
316
329
|
|
317
|
-
|
330
|
+
io = StringIO.new
|
331
|
+
gzip = Zlib::GzipWriter.new(io)
|
318
332
|
gzip << report
|
333
|
+
gzip.close
|
319
334
|
|
320
|
-
|
335
|
+
io.string
|
321
336
|
end
|
322
337
|
|
323
338
|
def upload_to_codecov(ci, report)
|
@@ -351,7 +366,7 @@ class SimpleCov::Formatter::Codecov
|
|
351
366
|
https.use_ssl = !url.match(/^https/).nil?
|
352
367
|
|
353
368
|
puts ['-> '.green, 'Pinging Codecov'].join(' ')
|
354
|
-
puts "#{url}
|
369
|
+
puts "#{url}#{uri.path}?#{query_without_token}"
|
355
370
|
|
356
371
|
req = Net::HTTP::Post.new(
|
357
372
|
"#{uri.path}?#{query}",
|
@@ -362,8 +377,8 @@ class SimpleCov::Formatter::Codecov
|
|
362
377
|
}
|
363
378
|
)
|
364
379
|
response = retry_request(req, https)
|
365
|
-
if response.code == '400'
|
366
|
-
puts response
|
380
|
+
if !response&.code || response.code == '400'
|
381
|
+
puts response&.body&.red
|
367
382
|
return false
|
368
383
|
end
|
369
384
|
|
@@ -429,8 +444,8 @@ class SimpleCov::Formatter::Codecov
|
|
429
444
|
end
|
430
445
|
end
|
431
446
|
|
432
|
-
def format(result)
|
433
|
-
net_blockers(:off)
|
447
|
+
def format(result, disable_net_blockers = true)
|
448
|
+
net_blockers(:off) if disable_net_blockers
|
434
449
|
|
435
450
|
display_header
|
436
451
|
ci = detect_ci
|
@@ -443,7 +458,8 @@ class SimpleCov::Formatter::Codecov
|
|
443
458
|
|
444
459
|
report['result'] = JSON.parse(response)
|
445
460
|
handle_report_response(report)
|
446
|
-
|
461
|
+
|
462
|
+
net_blockers(:on) if disable_net_blockers
|
447
463
|
report
|
448
464
|
end
|
449
465
|
|
data/test/test_codecov.rb
CHANGED
@@ -3,14 +3,32 @@
|
|
3
3
|
require 'helper'
|
4
4
|
|
5
5
|
class TestCodecov < Minitest::Test
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
CI = SimpleCov::Formatter::Codecov.new.detect_ci
|
7
|
+
|
8
|
+
REALENV =
|
9
|
+
if CI == SimpleCov::Formatter::Codecov::GITHUB
|
10
|
+
{
|
11
|
+
'GITHUB_ACTIONS' => ENV['GITHUB_ACTIONS'],
|
12
|
+
'GITHUB_HEAD_REF' => ENV['GITHUB_HEAD_REF'],
|
13
|
+
'GITHUB_REF' => ENV['GITHUB_REF'],
|
14
|
+
'GITHUB_REPOSITORY' => ENV['GITHUB_REPOSITORY'],
|
15
|
+
'GITHUB_RUN_ID' => ENV['GITHUB_RUN_ID'],
|
16
|
+
'GITHUB_SHA' => ENV['GITHUB_SHA']
|
17
|
+
}
|
18
|
+
elsif CI == SimpleCov::Formatter::Codecov::TRAVIS
|
19
|
+
{
|
20
|
+
'TRAVIS' => ENV['TRAVIS'],
|
21
|
+
'TRAVIS_BRANCH' => ENV['TRAVIS_BRANCH'],
|
22
|
+
'TRAVIS_COMMIT' => ENV['TRAVIS_COMMIT'],
|
23
|
+
'TRAVIS_REPO_SLUG' => ENV['TRAVIS_REPO_SLUG'],
|
24
|
+
'TRAVIS_JOB_NUMBER' => ENV['TRAVIS_JOB_NUMBER'],
|
25
|
+
'TRAVIS_PULL_REQUEST' => ENV['TRAVIS_PULL_REQUEST'],
|
26
|
+
'TRAVIS_JOB_ID' => ENV['TRAVIS_JOB_ID']
|
27
|
+
}
|
28
|
+
else
|
29
|
+
{}
|
30
|
+
end.freeze
|
31
|
+
|
14
32
|
def url
|
15
33
|
ENV['CODECOV_URL'] || 'https://codecov.io'
|
16
34
|
end
|
@@ -32,22 +50,36 @@ class TestCodecov < Minitest::Test
|
|
32
50
|
stub('SimpleCov::SourceFile', filename: filename, lines: lines)
|
33
51
|
end
|
34
52
|
|
35
|
-
def upload(success=true)
|
53
|
+
def upload(success = true)
|
36
54
|
formatter = SimpleCov::Formatter::Codecov.new
|
37
55
|
result = stub('SimpleCov::Result', files: [
|
38
56
|
stub_file('/path/lib/something.rb', [1, 0, 0, nil, 1, nil]),
|
39
57
|
stub_file('/path/lib/somefile.rb', [1, nil, 1, 1, 1, 0, 0, nil, 1, nil])
|
40
58
|
])
|
41
59
|
SimpleCov.stubs(:root).returns('/path')
|
42
|
-
|
60
|
+
success_stubs if success
|
61
|
+
data = formatter.format(result, false)
|
43
62
|
puts data
|
44
63
|
puts data['params']
|
45
|
-
if success
|
46
|
-
|
47
|
-
end
|
64
|
+
assert_successful_upload(data) if success
|
65
|
+
WebMock.reset!
|
48
66
|
data
|
49
67
|
end
|
50
68
|
|
69
|
+
def success_stubs
|
70
|
+
stub_request(:post, %r{https:\/\/codecov.io\/upload})
|
71
|
+
.to_return(
|
72
|
+
status: 200,
|
73
|
+
body: "https://codecov.io/gh/fake\n" \
|
74
|
+
'https://storage.googleapis.com/codecov/fake'
|
75
|
+
)
|
76
|
+
stub_request(:put, %r{https:\/\/storage.googleapis.com\/})
|
77
|
+
.to_return(
|
78
|
+
status: 200,
|
79
|
+
body: ''
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
51
83
|
def assert_successful_upload(data)
|
52
84
|
assert_equal(data['result']['uploaded'], true)
|
53
85
|
assert_equal(data['result']['message'], 'Coverage reports upload successfully')
|
@@ -60,6 +92,7 @@ class TestCodecov < Minitest::Test
|
|
60
92
|
|
61
93
|
def setup
|
62
94
|
ENV['CI'] = nil
|
95
|
+
ENV['GITHUB_ACTIONS'] = nil
|
63
96
|
ENV['TRAVIS'] = nil
|
64
97
|
end
|
65
98
|
|
@@ -134,6 +167,12 @@ class TestCodecov < Minitest::Test
|
|
134
167
|
ENV['ghprbSourceBranch'] = nil
|
135
168
|
ENV['GIT_BRANCH'] = nil
|
136
169
|
ENV['GIT_COMMIT'] = nil
|
170
|
+
ENV['GITHUB_ACTIONS'] = nil
|
171
|
+
ENV['GITHUB_REF'] = nil
|
172
|
+
ENV['GITHUB_HEAD_REF'] = nil
|
173
|
+
ENV['GITHUB_REPOSITORY'] = nil
|
174
|
+
ENV['GITHUB_RUN_ID'] = nil
|
175
|
+
ENV['GITHUB_SHA'] = nil
|
137
176
|
ENV['GITLAB_CI'] = nil
|
138
177
|
ENV['HEROKU_TEST_RUN_ID'] = nil
|
139
178
|
ENV['HEROKU_TEST_RUN_BRANCH'] = nil
|
@@ -149,13 +188,13 @@ class TestCodecov < Minitest::Test
|
|
149
188
|
ENV['SEMAPHORE_REPO_SLUG'] = nil
|
150
189
|
ENV['SHIPPABLE'] = nil
|
151
190
|
ENV['TF_BUILD'] = nil
|
152
|
-
ENV['TRAVIS'] =
|
153
|
-
ENV['TRAVIS_BRANCH'] =
|
154
|
-
ENV['TRAVIS_COMMIT'] =
|
155
|
-
ENV['TRAVIS_JOB_ID'] =
|
156
|
-
ENV['TRAVIS_JOB_NUMBER'] =
|
157
|
-
ENV['TRAVIS_PULL_REQUEST'] =
|
158
|
-
ENV['TRAVIS_REPO_SLUG'] =
|
191
|
+
ENV['TRAVIS'] = nil
|
192
|
+
ENV['TRAVIS_BRANCH'] = nil
|
193
|
+
ENV['TRAVIS_COMMIT'] = nil
|
194
|
+
ENV['TRAVIS_JOB_ID'] = nil
|
195
|
+
ENV['TRAVIS_JOB_NUMBER'] = nil
|
196
|
+
ENV['TRAVIS_PULL_REQUEST'] = nil
|
197
|
+
ENV['TRAVIS_REPO_SLUG'] = nil
|
159
198
|
ENV['VCS_COMMIT_ID'] = nil
|
160
199
|
ENV['WERCKER_GIT_BRANCH'] = nil
|
161
200
|
ENV['WERCKER_GIT_COMMIT'] = nil
|
@@ -163,6 +202,8 @@ class TestCodecov < Minitest::Test
|
|
163
202
|
ENV['WERCKER_GIT_REPOSITORY'] = nil
|
164
203
|
ENV['WERCKER_MAIN_PIPELINE_STARTED'] = nil
|
165
204
|
ENV['WORKSPACE'] = nil
|
205
|
+
|
206
|
+
REALENV.each_pair { |k, v| ENV[k] = v }
|
166
207
|
end
|
167
208
|
|
168
209
|
def test_git
|
@@ -384,6 +425,44 @@ class TestCodecov < Minitest::Test
|
|
384
425
|
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
|
385
426
|
end
|
386
427
|
|
428
|
+
def test_github_pull_request
|
429
|
+
ENV['CI'] = 'true'
|
430
|
+
ENV['GITHUB_ACTIONS'] = 'true'
|
431
|
+
ENV['GITHUB_HEAD_REF'] = 'patch-2'
|
432
|
+
ENV['GITHUB_REF'] = 'refs/pull/7/merge'
|
433
|
+
ENV['GITHUB_REPOSITORY'] = 'codecov/ci-repo'
|
434
|
+
ENV['GITHUB_RUN_ID'] = '1'
|
435
|
+
ENV['GITHUB_SHA'] = 'c739768fcac68144a3a6d82305b9c4106934d31a'
|
436
|
+
ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
|
437
|
+
result = upload
|
438
|
+
assert_equal('github-actions', result['params'][:service])
|
439
|
+
assert_equal('c739768fcac68144a3a6d82305b9c4106934d31a', result['params'][:commit])
|
440
|
+
assert_equal('codecov/ci-repo', result['params'][:slug])
|
441
|
+
assert_equal('1', result['params'][:build])
|
442
|
+
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
|
443
|
+
assert_equal('patch-2', result['params'][:branch])
|
444
|
+
assert_equal('7', result['params'][:pr])
|
445
|
+
end
|
446
|
+
|
447
|
+
def test_github_push
|
448
|
+
ENV['CI'] = 'true'
|
449
|
+
ENV['GITHUB_ACTIONS'] = 'true'
|
450
|
+
ENV['GITHUB_HEAD_REF'] = nil
|
451
|
+
ENV['GITHUB_REF'] = 'refs/head/master'
|
452
|
+
ENV['GITHUB_REPOSITORY'] = 'codecov/ci-repo'
|
453
|
+
ENV['GITHUB_RUN_ID'] = '1'
|
454
|
+
ENV['GITHUB_SHA'] = 'c739768fcac68144a3a6d82305b9c4106934d31a'
|
455
|
+
ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
|
456
|
+
result = upload
|
457
|
+
assert_equal('github-actions', result['params'][:service])
|
458
|
+
assert_equal('c739768fcac68144a3a6d82305b9c4106934d31a', result['params'][:commit])
|
459
|
+
assert_equal('codecov/ci-repo', result['params'][:slug])
|
460
|
+
assert_equal('1', result['params'][:build])
|
461
|
+
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
|
462
|
+
assert_equal('master', result['params'][:branch])
|
463
|
+
assert_equal(false, result['params'].key?(:pr))
|
464
|
+
end
|
465
|
+
|
387
466
|
def test_gitlab
|
388
467
|
ENV['GITLAB_CI'] = 'true'
|
389
468
|
ENV['CI_BUILD_REF_NAME'] = 'master'
|
@@ -521,6 +600,13 @@ class TestCodecov < Minitest::Test
|
|
521
600
|
end
|
522
601
|
|
523
602
|
def test_invalid_token
|
603
|
+
stub_request(:post, %r{https:\/\/codecov.io\/upload})
|
604
|
+
.to_return(
|
605
|
+
status: 400,
|
606
|
+
body: "HTTP 400\n" \
|
607
|
+
'Provided token is not a UUID.'
|
608
|
+
)
|
609
|
+
|
524
610
|
ENV['CODECOV_TOKEN'] = 'fake'
|
525
611
|
result = upload(false)
|
526
612
|
assert_equal(false, result['result']['uploaded'])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codecov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- codecov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: hosted code coverage
|
112
126
|
email:
|
113
127
|
- hello@codecov.io
|
@@ -129,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
143
|
requirements:
|
130
144
|
- - ">="
|
131
145
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
146
|
+
version: '2.4'
|
133
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
148
|
requirements:
|
135
149
|
- - ">="
|