codecov 0.2.3 → 0.2.8
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 +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
|
- - ">="
|