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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/codecov.rb +42 -6
  3. data/test/test_codecov.rb +114 -20
  4. metadata +8 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b59d7f1fb16986a207023da3b8f2130b4014084cf7d73d688c304e761c683513
4
- data.tar.gz: 68ba0cc7cd7cc16d84e88dd2bf20db83f69872eb540de4e9d4128ec0e889888f
3
+ metadata.gz: e49b9d2e3374ac7e3f5d6514045a0454c767e200db364059887cb0d0a8a3e13f
4
+ data.tar.gz: 83f5c298eb2be003da0302d329241f5eaa64a9d5d2d747be0b845437607bce88
5
5
  SHA512:
6
- metadata.gz: c636171303865424027efcfe53b8de75a1b860dc21f70bc43b65d11ea81eb6c1805c4d7a49ab650e7a0dbda992bdfd78e72aa2c6fd881f8d983859bde850ca80
7
- data.tar.gz: b9fc5e08981827a1dc873410222e7590baa41d8c8ba7563803edb35e29d9d2fd2b307a1a3ef85f7893bfd93ef27e79541e419c5cb6842b2ca7564663790a928e
6
+ metadata.gz: 4c8aba631f40e6fddca4d507613de63caf64207fda359518faceb9267e327cf0d4611ba864083e7ef8158fee9b8f4dfab10e8dfdd6e7f1f6e5d30ac4ae8275cb
7
+ data.tar.gz: b15d9af39b437902e7f59a749bdf54dee8e12a97f4e78f8c4b918d001ca66606731a17986e4f52e0fe1e4a51b9c87ca652768395d60869da6cb5025cee876827
@@ -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.3'
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' + SimpleCov::Formatter::Codecov::VERSION
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 = upload_to_v4(url, gzipped_report, query, query_without_token)
346
- return false if response == false
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}/#{uri.path}?#{query_without_token}"
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
@@ -3,14 +3,44 @@
3
3
  require 'helper'
4
4
 
5
5
  class TestCodecov < Minitest::Test
6
- REALENV = {
7
- 'TRAVIS_BRANCH' => ENV['TRAVIS_BRANCH'],
8
- 'TRAVIS_COMMIT' => ENV['TRAVIS_COMMIT'],
9
- 'TRAVIS_REPO_SLUG' => ENV['TRAVIS_REPO_SLUG'],
10
- 'TRAVIS_JOB_NUMBER' => ENV['TRAVIS_JOB_NUMBER'],
11
- 'TRAVIS_PULL_REQUEST' => ENV['TRAVIS_PULL_REQUEST'],
12
- 'TRAVIS_JOB_ID' => ENV['TRAVIS_JOB_ID']
13
- }.freeze
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'] = 'true'
169
- ENV['TRAVIS_BRANCH'] = REALENV['TRAVIS_BRANCH']
170
- ENV['TRAVIS_COMMIT'] = REALENV['TRAVIS_COMMIT']
171
- ENV['TRAVIS_JOB_ID'] = REALENV['TRAVIS_JOB_ID']
172
- ENV['TRAVIS_JOB_NUMBER'] = REALENV['TRAVIS_JOB_NUMBER']
173
- ENV['TRAVIS_PULL_REQUEST'] = REALENV['TRAVIS_PULL_REQUEST']
174
- ENV['TRAVIS_REPO_SLUG'] = REALENV['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.3
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-07-27 00:00:00.000000000 Z
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: colorize
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: json
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: simplecov
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: :runtime
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: '0'
146
+ version: '2.4'
147
147
  required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - ">="