codecov 0.2.3 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/codecov.rb +42 -6
- data/test/test_codecov.rb +114 -20
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e49b9d2e3374ac7e3f5d6514045a0454c767e200db364059887cb0d0a8a3e13f
|
4
|
+
data.tar.gz: 83f5c298eb2be003da0302d329241f5eaa64a9d5d2d747be0b845437607bce88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c8aba631f40e6fddca4d507613de63caf64207fda359518faceb9267e327cf0d4611ba864083e7ef8158fee9b8f4dfab10e8dfdd6e7f1f6e5d30ac4ae8275cb
|
7
|
+
data.tar.gz: b15d9af39b437902e7f59a749bdf54dee8e12a97f4e78f8c4b918d001ca66606731a17986e4f52e0fe1e4a51b9c87ca652768395d60869da6cb5025cee876827
|
data/lib/codecov.rb
CHANGED
@@ -4,11 +4,10 @@ require 'uri'
|
|
4
4
|
require 'json'
|
5
5
|
require 'net/http'
|
6
6
|
require 'simplecov'
|
7
|
-
require 'colorize'
|
8
7
|
require 'zlib'
|
9
8
|
|
10
9
|
class SimpleCov::Formatter::Codecov
|
11
|
-
VERSION = '0.2.
|
10
|
+
VERSION = '0.2.8'
|
12
11
|
|
13
12
|
### CIs
|
14
13
|
RECOGNIZED_CIS = [
|
@@ -20,6 +19,7 @@ class SimpleCov::Formatter::Codecov
|
|
20
19
|
CIRCLE = 'Circle CI',
|
21
20
|
CODESHIP = 'Codeship CI',
|
22
21
|
DRONEIO = 'Drone CI',
|
22
|
+
GITHUB = 'GitHub Actions',
|
23
23
|
GITLAB = 'GitLab CI',
|
24
24
|
HEROKU = 'Heroku CI',
|
25
25
|
JENKINS = 'Jenkins CI',
|
@@ -62,6 +62,8 @@ class SimpleCov::Formatter::Codecov
|
|
62
62
|
CODESHIP
|
63
63
|
elsif ((ENV['CI'] == 'true') || (ENV['CI'] == 'drone')) && (ENV['DRONE'] == 'true')
|
64
64
|
DRONEIO
|
65
|
+
elsif (ENV['CI'] == 'true') && (ENV['GITHUB_ACTIONS'] == 'true')
|
66
|
+
GITHUB
|
65
67
|
elsif !ENV['GITLAB_CI'].nil?
|
66
68
|
GITLAB
|
67
69
|
elsif ENV['HEROKU_TEST_RUN_ID']
|
@@ -172,6 +174,15 @@ class SimpleCov::Formatter::Codecov
|
|
172
174
|
params[:build_url] = ENV['DRONE_BUILD_LINK'] || ENV['DRONE_BUILD_URL'] || ENV['CI_BUILD_URL']
|
173
175
|
params[:pr] = ENV['DRONE_PULL_REQUEST']
|
174
176
|
params[:tag] = ENV['DRONE_TAG']
|
177
|
+
when GITHUB
|
178
|
+
# https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables
|
179
|
+
params[:service] = 'github-actions'
|
180
|
+
params[:branch] = ENV['GITHUB_HEAD_REF'] || ENV['GITHUB_REF'].sub('refs/head/', '')
|
181
|
+
# PR refs are in the format: refs/pull/7/merge for pull_request events
|
182
|
+
params[:pr] = ENV['GITHUB_REF'].split('/')[2] unless ENV['GITHUB_HEAD_REF'].nil? || ENV['GITHUB_HEAD_REF'].empty?
|
183
|
+
params[:slug] = ENV['GITHUB_REPOSITORY']
|
184
|
+
params[:build] = ENV['GITHUB_RUN_ID']
|
185
|
+
params[:commit] = ENV['GITHUB_SHA']
|
175
186
|
when GITLAB
|
176
187
|
# http://doc.gitlab.com/ci/examples/README.html#environmental-variables
|
177
188
|
# https://gitlab.com/gitlab-org/gitlab-ci-runner/blob/master/lib/build.rb#L96
|
@@ -305,7 +316,7 @@ class SimpleCov::Formatter::Codecov
|
|
305
316
|
def create_report(report)
|
306
317
|
result = {
|
307
318
|
'meta' => {
|
308
|
-
'version' => 'codecov-ruby/v' +
|
319
|
+
'version' => 'codecov-ruby/v' + VERSION
|
309
320
|
}
|
310
321
|
}
|
311
322
|
result.update(result_to_codecov(report))
|
@@ -325,6 +336,7 @@ class SimpleCov::Formatter::Codecov
|
|
325
336
|
|
326
337
|
def upload_to_codecov(ci, report)
|
327
338
|
url = ENV['CODECOV_URL'] || 'https://codecov.io'
|
339
|
+
is_enterprise = url != 'https://codecov.io'
|
328
340
|
|
329
341
|
params = build_params(ci)
|
330
342
|
params_secret_token = params.clone
|
@@ -342,8 +354,11 @@ class SimpleCov::Formatter::Codecov
|
|
342
354
|
puts " url: #{url}"
|
343
355
|
puts " query: #{query_without_token}"
|
344
356
|
|
345
|
-
response =
|
346
|
-
|
357
|
+
response = false
|
358
|
+
unless is_enterprise
|
359
|
+
response = upload_to_v4(url, gzipped_report, query, query_without_token)
|
360
|
+
return false if response == false
|
361
|
+
end
|
347
362
|
|
348
363
|
response || upload_to_v2(url, gzipped_report, query, query_without_token)
|
349
364
|
end
|
@@ -409,11 +424,12 @@ class SimpleCov::Formatter::Codecov
|
|
409
424
|
https.use_ssl = !url.match(/^https/).nil?
|
410
425
|
|
411
426
|
puts ['-> '.green, 'Uploading to Codecov'].join(' ')
|
412
|
-
puts "#{url}
|
427
|
+
puts "#{url}#{uri.path}?#{query_without_token}"
|
413
428
|
|
414
429
|
req = Net::HTTP::Post.new(
|
415
430
|
"#{uri.path}?#{query}",
|
416
431
|
{
|
432
|
+
'Accept' => 'application/json',
|
417
433
|
'Content-Encoding' => 'gzip',
|
418
434
|
'Content-Type' => 'text/plain',
|
419
435
|
'X-Content-Encoding' => 'gzip'
|
@@ -570,3 +586,23 @@ class SimpleCov::Formatter::Codecov
|
|
570
586
|
true
|
571
587
|
end
|
572
588
|
end
|
589
|
+
|
590
|
+
# https://stackoverflow.com/a/11482430/5769383
|
591
|
+
class String
|
592
|
+
# colorization
|
593
|
+
def colorize(color_code)
|
594
|
+
"\e[#{color_code}m#{self}\e[0m"
|
595
|
+
end
|
596
|
+
|
597
|
+
def black
|
598
|
+
colorize(30)
|
599
|
+
end
|
600
|
+
|
601
|
+
def red
|
602
|
+
colorize(31)
|
603
|
+
end
|
604
|
+
|
605
|
+
def green
|
606
|
+
colorize(32)
|
607
|
+
end
|
608
|
+
end
|
data/test/test_codecov.rb
CHANGED
@@ -3,14 +3,44 @@
|
|
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::CIRCLE
|
10
|
+
{
|
11
|
+
'CIRCLECI' => ENV['CIRCLECI'],
|
12
|
+
'CIRCLE_BUILD_NUM' => ENV['CIRCLE_BUILD_NUM'],
|
13
|
+
'CIRCLE_NODE_INDEX' => ENV['CIRCLE_NODE_INDEX'],
|
14
|
+
'CIRCLE_PROJECT_REPONAME' => ENV['CIRCLE_PROJECT_REPONAME'],
|
15
|
+
'CIRCLE_PROJECT_USERNAME' => ENV['CIRCLE_PROJECT_USERNAME'],
|
16
|
+
'CIRCLE_REPOSITORY_URL' => ENV['CIRCLE_REPOSITORY_URL'],
|
17
|
+
'CIRCLE_PR_NUMBER' => ENV['CIRCLE_PR_NUMBER'],
|
18
|
+
'CIRCLE_BRANCH' => ENV['CIRCLE_BRANCH'],
|
19
|
+
'CIRCLE_SHA1' => ENV['CIRCLE_SHA1']
|
20
|
+
}
|
21
|
+
elsif CI == SimpleCov::Formatter::Codecov::GITHUB
|
22
|
+
{
|
23
|
+
'GITHUB_ACTIONS' => ENV['GITHUB_ACTIONS'],
|
24
|
+
'GITHUB_HEAD_REF' => ENV['GITHUB_HEAD_REF'],
|
25
|
+
'GITHUB_REF' => ENV['GITHUB_REF'],
|
26
|
+
'GITHUB_REPOSITORY' => ENV['GITHUB_REPOSITORY'],
|
27
|
+
'GITHUB_RUN_ID' => ENV['GITHUB_RUN_ID'],
|
28
|
+
'GITHUB_SHA' => ENV['GITHUB_SHA']
|
29
|
+
}
|
30
|
+
elsif CI == SimpleCov::Formatter::Codecov::TRAVIS
|
31
|
+
{
|
32
|
+
'TRAVIS' => ENV['TRAVIS'],
|
33
|
+
'TRAVIS_BRANCH' => ENV['TRAVIS_BRANCH'],
|
34
|
+
'TRAVIS_COMMIT' => ENV['TRAVIS_COMMIT'],
|
35
|
+
'TRAVIS_REPO_SLUG' => ENV['TRAVIS_REPO_SLUG'],
|
36
|
+
'TRAVIS_JOB_NUMBER' => ENV['TRAVIS_JOB_NUMBER'],
|
37
|
+
'TRAVIS_PULL_REQUEST' => ENV['TRAVIS_PULL_REQUEST'],
|
38
|
+
'TRAVIS_JOB_ID' => ENV['TRAVIS_JOB_ID']
|
39
|
+
}
|
40
|
+
else
|
41
|
+
{}
|
42
|
+
end.freeze
|
43
|
+
|
14
44
|
def url
|
15
45
|
ENV['CODECOV_URL'] || 'https://codecov.io'
|
16
46
|
end
|
@@ -32,7 +62,8 @@ class TestCodecov < Minitest::Test
|
|
32
62
|
stub('SimpleCov::SourceFile', filename: filename, lines: lines)
|
33
63
|
end
|
34
64
|
|
35
|
-
def upload(success=true)
|
65
|
+
def upload(success = true)
|
66
|
+
WebMock.enable!
|
36
67
|
formatter = SimpleCov::Formatter::Codecov.new
|
37
68
|
result = stub('SimpleCov::Result', files: [
|
38
69
|
stub_file('/path/lib/something.rb', [1, 0, 0, nil, 1, nil]),
|
@@ -43,15 +74,13 @@ class TestCodecov < Minitest::Test
|
|
43
74
|
data = formatter.format(result, false)
|
44
75
|
puts data
|
45
76
|
puts data['params']
|
46
|
-
if success
|
47
|
-
assert_successful_upload(data)
|
48
|
-
end
|
77
|
+
assert_successful_upload(data) if success
|
49
78
|
WebMock.reset!
|
50
79
|
data
|
51
80
|
end
|
52
81
|
|
53
82
|
def success_stubs
|
54
|
-
stub_request(:post, %r{https:\/\/codecov.io\/upload})
|
83
|
+
stub_request(:post, %r{https:\/\/codecov.io\/upload\/v4})
|
55
84
|
.to_return(
|
56
85
|
status: 200,
|
57
86
|
body: "https://codecov.io/gh/fake\n" \
|
@@ -76,6 +105,8 @@ class TestCodecov < Minitest::Test
|
|
76
105
|
|
77
106
|
def setup
|
78
107
|
ENV['CI'] = nil
|
108
|
+
ENV['CIRCLECI'] = nil
|
109
|
+
ENV['GITHUB_ACTIONS'] = nil
|
79
110
|
ENV['TRAVIS'] = nil
|
80
111
|
end
|
81
112
|
|
@@ -150,6 +181,12 @@ class TestCodecov < Minitest::Test
|
|
150
181
|
ENV['ghprbSourceBranch'] = nil
|
151
182
|
ENV['GIT_BRANCH'] = nil
|
152
183
|
ENV['GIT_COMMIT'] = nil
|
184
|
+
ENV['GITHUB_ACTIONS'] = nil
|
185
|
+
ENV['GITHUB_REF'] = nil
|
186
|
+
ENV['GITHUB_HEAD_REF'] = nil
|
187
|
+
ENV['GITHUB_REPOSITORY'] = nil
|
188
|
+
ENV['GITHUB_RUN_ID'] = nil
|
189
|
+
ENV['GITHUB_SHA'] = nil
|
153
190
|
ENV['GITLAB_CI'] = nil
|
154
191
|
ENV['HEROKU_TEST_RUN_ID'] = nil
|
155
192
|
ENV['HEROKU_TEST_RUN_BRANCH'] = nil
|
@@ -165,13 +202,13 @@ class TestCodecov < Minitest::Test
|
|
165
202
|
ENV['SEMAPHORE_REPO_SLUG'] = nil
|
166
203
|
ENV['SHIPPABLE'] = nil
|
167
204
|
ENV['TF_BUILD'] = nil
|
168
|
-
ENV['TRAVIS'] =
|
169
|
-
ENV['TRAVIS_BRANCH'] =
|
170
|
-
ENV['TRAVIS_COMMIT'] =
|
171
|
-
ENV['TRAVIS_JOB_ID'] =
|
172
|
-
ENV['TRAVIS_JOB_NUMBER'] =
|
173
|
-
ENV['TRAVIS_PULL_REQUEST'] =
|
174
|
-
ENV['TRAVIS_REPO_SLUG'] =
|
205
|
+
ENV['TRAVIS'] = nil
|
206
|
+
ENV['TRAVIS_BRANCH'] = nil
|
207
|
+
ENV['TRAVIS_COMMIT'] = nil
|
208
|
+
ENV['TRAVIS_JOB_ID'] = nil
|
209
|
+
ENV['TRAVIS_JOB_NUMBER'] = nil
|
210
|
+
ENV['TRAVIS_PULL_REQUEST'] = nil
|
211
|
+
ENV['TRAVIS_REPO_SLUG'] = nil
|
175
212
|
ENV['VCS_COMMIT_ID'] = nil
|
176
213
|
ENV['WERCKER_GIT_BRANCH'] = nil
|
177
214
|
ENV['WERCKER_GIT_COMMIT'] = nil
|
@@ -179,6 +216,8 @@ class TestCodecov < Minitest::Test
|
|
179
216
|
ENV['WERCKER_GIT_REPOSITORY'] = nil
|
180
217
|
ENV['WERCKER_MAIN_PIPELINE_STARTED'] = nil
|
181
218
|
ENV['WORKSPACE'] = nil
|
219
|
+
|
220
|
+
REALENV.each_pair { |k, v| ENV[k] = v }
|
182
221
|
end
|
183
222
|
|
184
223
|
def test_git
|
@@ -190,6 +229,23 @@ class TestCodecov < Minitest::Test
|
|
190
229
|
assert_equal(`git rev-parse HEAD`.strip, result['params'][:commit])
|
191
230
|
end
|
192
231
|
|
232
|
+
def test_enterprise
|
233
|
+
stub = stub_request(:post, %r{https:\/\/example.com\/upload\/v2})
|
234
|
+
.to_return(
|
235
|
+
status: 200,
|
236
|
+
body: "{\"id\": \"12345678-1234-abcd-ef12-1234567890ab\", \"message\": \"Coverage reports upload successfully\", \"meta\": { \"status\": 200 }, \"queued\": true, \"uploaded\": true, \"url\": \"https://example.com/github/codecov/codecov-bash/commit/2f6b51562b93e72c610671644fe2a303c5c0e8e5\"}"
|
237
|
+
)
|
238
|
+
|
239
|
+
ENV['CODECOV_URL'] = 'https://example.com'
|
240
|
+
ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
|
241
|
+
result = upload
|
242
|
+
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
|
243
|
+
assert_equal('12345678-1234-abcd-ef12-1234567890ab', result['result']['id'])
|
244
|
+
branch = `git rev-parse --abbrev-ref HEAD`.strip
|
245
|
+
assert_equal(branch != 'HEAD' ? branch : 'master', result['params'][:branch])
|
246
|
+
assert_equal(`git rev-parse HEAD`.strip, result['params'][:commit])
|
247
|
+
end
|
248
|
+
|
193
249
|
def test_travis
|
194
250
|
ENV['CI'] = 'true'
|
195
251
|
ENV['TRAVIS'] = 'true'
|
@@ -400,6 +456,44 @@ class TestCodecov < Minitest::Test
|
|
400
456
|
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
|
401
457
|
end
|
402
458
|
|
459
|
+
def test_github_pull_request
|
460
|
+
ENV['CI'] = 'true'
|
461
|
+
ENV['GITHUB_ACTIONS'] = 'true'
|
462
|
+
ENV['GITHUB_HEAD_REF'] = 'patch-2'
|
463
|
+
ENV['GITHUB_REF'] = 'refs/pull/7/merge'
|
464
|
+
ENV['GITHUB_REPOSITORY'] = 'codecov/ci-repo'
|
465
|
+
ENV['GITHUB_RUN_ID'] = '1'
|
466
|
+
ENV['GITHUB_SHA'] = 'c739768fcac68144a3a6d82305b9c4106934d31a'
|
467
|
+
ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
|
468
|
+
result = upload
|
469
|
+
assert_equal('github-actions', result['params'][:service])
|
470
|
+
assert_equal('c739768fcac68144a3a6d82305b9c4106934d31a', result['params'][:commit])
|
471
|
+
assert_equal('codecov/ci-repo', result['params'][:slug])
|
472
|
+
assert_equal('1', result['params'][:build])
|
473
|
+
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
|
474
|
+
assert_equal('patch-2', result['params'][:branch])
|
475
|
+
assert_equal('7', result['params'][:pr])
|
476
|
+
end
|
477
|
+
|
478
|
+
def test_github_push
|
479
|
+
ENV['CI'] = 'true'
|
480
|
+
ENV['GITHUB_ACTIONS'] = 'true'
|
481
|
+
ENV['GITHUB_HEAD_REF'] = nil
|
482
|
+
ENV['GITHUB_REF'] = 'refs/head/master'
|
483
|
+
ENV['GITHUB_REPOSITORY'] = 'codecov/ci-repo'
|
484
|
+
ENV['GITHUB_RUN_ID'] = '1'
|
485
|
+
ENV['GITHUB_SHA'] = 'c739768fcac68144a3a6d82305b9c4106934d31a'
|
486
|
+
ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
|
487
|
+
result = upload
|
488
|
+
assert_equal('github-actions', result['params'][:service])
|
489
|
+
assert_equal('c739768fcac68144a3a6d82305b9c4106934d31a', result['params'][:commit])
|
490
|
+
assert_equal('codecov/ci-repo', result['params'][:slug])
|
491
|
+
assert_equal('1', result['params'][:build])
|
492
|
+
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
|
493
|
+
assert_equal('master', result['params'][:branch])
|
494
|
+
assert_equal(false, result['params'].key?(:pr))
|
495
|
+
end
|
496
|
+
|
403
497
|
def test_gitlab
|
404
498
|
ENV['GITLAB_CI'] = 'true'
|
405
499
|
ENV['CI_BUILD_REF_NAME'] = 'master'
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
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.8
|
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-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: simplecov
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,13 +39,13 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest
|
56
|
+
name: minitest-ci
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
143
|
requirements:
|
144
144
|
- - ">="
|
145
145
|
- !ruby/object:Gem::Version
|
146
|
-
version: '
|
146
|
+
version: '2.4'
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
149
|
- - ">="
|