codecov 0.2.5 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/codecov.rb +56 -22
  3. data/test/test_codecov.rb +83 -3
  4. metadata +8 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0935d5766e38b05f8e3c567c1b16dfd7763902ac06073eabb8a3dc49768fec31'
4
- data.tar.gz: 3a97f5b053e2e5a934fbe5fb5f13401d0c6befed9e20d7d9ca53990469946c48
3
+ metadata.gz: 0d552ab878cd45e8246a35a2535e30db5db427032fef0f50a2d65404b2f39592
4
+ data.tar.gz: cf43553c8aad22ddff422a6e5ac33b2787234e3a2a6c8c6974dee9c4839dc9fb
5
5
  SHA512:
6
- metadata.gz: 7fd075c6ec939eb9cd895c24d7e96199bb2fc4a501219c7af6f8ada9e0242f8cccb841b06d7c179c10bf5716ad08b41a101a50ed8db56c90cfe0112fb4f50dc5
7
- data.tar.gz: 7db5f6d020b1a71cff306b11ef7a4304e5606b691264cb66015b1c11a9254c0f7cac7f8222d4f4ff1c03c55484a1548b1c09d366909ba7ceb8e50951d083fa5c
6
+ metadata.gz: de09d13c2647752336f5ef3a9cae4306d057e2244a39cb9adbd410072255463200a58efe223b23155164a19be08fb9f3a619a890098b06c355e76dcaefe766fa
7
+ data.tar.gz: abba86de852c8f76df3ec4966cbf001337c389e46e84aef6604990c8af710c1c17f71d9561da5709c0535c9b9fc0f90d5e02037264cfc502b03489b751289c68
@@ -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.5'
10
+ VERSION = '0.2.10'
12
11
 
13
12
  ### CIs
14
13
  RECOGNIZED_CIS = [
@@ -18,6 +17,7 @@ class SimpleCov::Formatter::Codecov
18
17
  BITRISE = 'Bitrise CI',
19
18
  BUILDKITE = 'Buildkite CI',
20
19
  CIRCLE = 'Circle CI',
20
+ CODEBUILD = 'Codebuild CI',
21
21
  CODESHIP = 'Codeship CI',
22
22
  DRONEIO = 'Drone CI',
23
23
  GITHUB = 'GitHub Actions',
@@ -59,6 +59,8 @@ class SimpleCov::Formatter::Codecov
59
59
  BUILDKITE
60
60
  elsif (ENV['CI'] == 'true') && (ENV['CIRCLECI'] == 'true')
61
61
  CIRCLE
62
+ elsif ENV['CODEBUILD_CI'] == 'true'
63
+ CODEBUILD
62
64
  elsif (ENV['CI'] == 'true') && (ENV['CI_NAME'] == 'codeship')
63
65
  CODESHIP
64
66
  elsif ((ENV['CI'] == 'true') || (ENV['CI'] == 'drone')) && (ENV['DRONE'] == 'true')
@@ -86,7 +88,7 @@ class SimpleCov::Formatter::Codecov
86
88
  end
87
89
 
88
90
  if !RECOGNIZED_CIS.include?(ci)
89
- puts ['x>'.red, 'No CI provider detected.'].join(' ')
91
+ puts [red('x>'), 'No CI provider detected.'].join(' ')
90
92
  else
91
93
  puts "==> #{ci} detected"
92
94
  end
@@ -158,6 +160,15 @@ class SimpleCov::Formatter::Codecov
158
160
  params[:pr] = ENV['CIRCLE_PR_NUMBER']
159
161
  params[:branch] = ENV['CIRCLE_BRANCH']
160
162
  params[:commit] = ENV['CIRCLE_SHA1']
163
+ when CODEBUILD
164
+ # https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
165
+ params[:service] = 'codebuild'
166
+ params[:branch] = ENV['CODEBUILD_WEBHOOK_HEAD_REF'].split('/')[2]
167
+ params[:build] = ENV['CODEBUILD_BUILD_ID']
168
+ params[:commit] = ENV['CODEBUILD_RESOLVED_SOURCE_VERSION']
169
+ params[:job] = ENV['CODEBUILD_BUILD_ID']
170
+ params[:slug] = ENV['CODEBUILD_SOURCE_REPO_URL'].match(/.*github.com\/(?<slug>.*).git/)['slug']
171
+ params[:pr] = ENV['CODEBUILD_SOURCE_VERSION'].match(/pr\/(?<pr>.*)/)['pr'] if ENV['CODEBUILD_SOURCE_VERSION']
161
172
  when CODESHIP
162
173
  # https://www.codeship.io/documentation/continuous-integration/set-environment-variables/
163
174
  params[:service] = 'codeship'
@@ -178,9 +189,9 @@ class SimpleCov::Formatter::Codecov
178
189
  when GITHUB
179
190
  # https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables
180
191
  params[:service] = 'github-actions'
181
- params[:branch] = ENV['GITHUB_HEAD_REF'] || ENV['GITHUB_REF'].sub('refs/heads/', '')
182
- # PR refs are in the format: refs/pull/7/merge
183
- params[:pr] = ENV['GITHUB_REF'].split('/')[2] if ENV['GITHUB_HEAD_REF']
192
+ params[:branch] = ENV['GITHUB_HEAD_REF'] || ENV['GITHUB_REF'].sub('refs/head/', '')
193
+ # PR refs are in the format: refs/pull/7/merge for pull_request events
194
+ params[:pr] = ENV['GITHUB_REF'].split('/')[2] unless ENV['GITHUB_HEAD_REF'].nil? || ENV['GITHUB_HEAD_REF'].empty?
184
195
  params[:slug] = ENV['GITHUB_REPOSITORY']
185
196
  params[:build] = ENV['GITHUB_RUN_ID']
186
197
  params[:commit] = ENV['GITHUB_SHA']
@@ -308,6 +319,7 @@ class SimpleCov::Formatter::Codecov
308
319
  puts 'Error uploading coverage reports to Codecov. Sorry'
309
320
  puts e.class.name
310
321
  puts e
322
+ puts "Backtrace:\n\t#{e.backtrace}"
311
323
  return response
312
324
  end
313
325
 
@@ -325,7 +337,7 @@ class SimpleCov::Formatter::Codecov
325
337
  end
326
338
 
327
339
  def gzip_report(report)
328
- puts ['==>'.green, 'Gzipping contents'].join(' ')
340
+ puts [green('==>'), 'Gzipping contents'].join(' ')
329
341
 
330
342
  io = StringIO.new
331
343
  gzip = Zlib::GzipWriter.new(io)
@@ -337,6 +349,7 @@ class SimpleCov::Formatter::Codecov
337
349
 
338
350
  def upload_to_codecov(ci, report)
339
351
  url = ENV['CODECOV_URL'] || 'https://codecov.io'
352
+ is_enterprise = url != 'https://codecov.io'
340
353
 
341
354
  params = build_params(ci)
342
355
  params_secret_token = params.clone
@@ -350,12 +363,15 @@ class SimpleCov::Formatter::Codecov
350
363
  report['params'] = params
351
364
  report['query'] = query
352
365
 
353
- puts ['==>'.green, 'Uploading reports'].join(' ')
366
+ puts [green('==>'), 'Uploading reports'].join(' ')
354
367
  puts " url: #{url}"
355
368
  puts " query: #{query_without_token}"
356
369
 
357
- response = upload_to_v4(url, gzipped_report, query, query_without_token)
358
- return false if response == false
370
+ response = false
371
+ unless is_enterprise
372
+ response = upload_to_v4(url, gzipped_report, query, query_without_token)
373
+ return false if response == false
374
+ end
359
375
 
360
376
  response || upload_to_v2(url, gzipped_report, query, query_without_token)
361
377
  end
@@ -365,7 +381,7 @@ class SimpleCov::Formatter::Codecov
365
381
  https = Net::HTTP.new(uri.host, uri.port)
366
382
  https.use_ssl = !url.match(/^https/).nil?
367
383
 
368
- puts ['-> '.green, 'Pinging Codecov'].join(' ')
384
+ puts [green('-> '), 'Pinging Codecov'].join(' ')
369
385
  puts "#{url}#{uri.path}?#{query_without_token}"
370
386
 
371
387
  req = Net::HTTP::Post.new(
@@ -378,13 +394,13 @@ class SimpleCov::Formatter::Codecov
378
394
  )
379
395
  response = retry_request(req, https)
380
396
  if !response&.code || response.code == '400'
381
- puts response&.body&.red
397
+ puts red(response&.body)
382
398
  return false
383
399
  end
384
400
 
385
401
  reports_url = response.body.lines[0]
386
402
  s3target = response.body.lines[1]
387
- puts ['-> '.green, 'Uploading to'].join(' ')
403
+ puts [green('-> '), 'Uploading to'].join(' ')
388
404
  puts s3target
389
405
 
390
406
  uri = URI(s3target)
@@ -399,7 +415,7 @@ class SimpleCov::Formatter::Codecov
399
415
  )
400
416
  req.body = report
401
417
  res = retry_request(req, https)
402
- if res.body == ''
418
+ if res&.body == ''
403
419
  {
404
420
  'uploaded' => true,
405
421
  'url' => reports_url,
@@ -409,8 +425,8 @@ class SimpleCov::Formatter::Codecov
409
425
  'message' => 'Coverage reports upload successfully'
410
426
  }.to_json
411
427
  else
412
- puts ['-> '.black, 'Could not upload reports via v4 API, defaulting to v2'].join(' ')
413
- puts res.body.red
428
+ puts [black('-> '), 'Could not upload reports via v4 API, defaulting to v2'].join(' ')
429
+ puts red(res&.body || 'nil')
414
430
  nil
415
431
  end
416
432
  end
@@ -420,12 +436,13 @@ class SimpleCov::Formatter::Codecov
420
436
  https = Net::HTTP.new(uri.host, uri.port)
421
437
  https.use_ssl = !url.match(/^https/).nil?
422
438
 
423
- puts ['-> '.green, 'Uploading to Codecov'].join(' ')
424
- puts "#{url}/#{uri.path}?#{query_without_token}"
439
+ puts [green('-> '), 'Uploading to Codecov'].join(' ')
440
+ puts "#{url}#{uri.path}?#{query_without_token}"
425
441
 
426
442
  req = Net::HTTP::Post.new(
427
443
  "#{uri.path}?#{query}",
428
444
  {
445
+ 'Accept' => 'application/json',
429
446
  'Content-Encoding' => 'gzip',
430
447
  'Content-Type' => 'text/plain',
431
448
  'X-Content-Encoding' => 'gzip'
@@ -440,7 +457,7 @@ class SimpleCov::Formatter::Codecov
440
457
  if report['result']['uploaded']
441
458
  puts " View reports at #{report['result']['url']}"
442
459
  else
443
- puts ' X> Failed to upload coverage reports'.red
460
+ puts red(' X> Failed to upload coverage reports')
444
461
  end
445
462
  end
446
463
 
@@ -492,16 +509,20 @@ class SimpleCov::Formatter::Codecov
492
509
  ].freeze
493
510
 
494
511
  invalid_directories = [
495
- 'node_modules/'
512
+ 'node_modules/',
513
+ 'public/',
514
+ 'storage/',
515
+ 'tmp/'
496
516
  ]
497
517
 
498
- puts ['==>'.green, 'Appending file network'].join(' ')
518
+ puts [green('==>'), 'Appending file network'].join(' ')
499
519
  network = []
500
520
  Dir['**/*'].keep_if do |file|
501
- if File.file?(file) && !file.end_with?(*invalid_file_types) && !file.include?(*invalid_directories)
521
+ if File.file?(file) && !file.end_with?(*invalid_file_types) && invalid_directories.none? { |dir| file.include?(dir) }
502
522
  network.push(file)
503
523
  end
504
524
  end
525
+
505
526
  network.push('<<<<<< network')
506
527
  network
507
528
  end
@@ -581,4 +602,17 @@ class SimpleCov::Formatter::Codecov
581
602
 
582
603
  true
583
604
  end
605
+
606
+ # Convenience color methods
607
+ def black(str)
608
+ str.nil? ? '' : "\e[30m#{str}\e[0m"
609
+ end
610
+
611
+ def red(str)
612
+ str.nil? ? '' : "\e[31m#{str}\e[0m"
613
+ end
614
+
615
+ def green(str)
616
+ str.nil? ? '' : "\e[32m#{str}\e[0m"
617
+ end
584
618
  end
@@ -6,7 +6,19 @@ class TestCodecov < Minitest::Test
6
6
  CI = SimpleCov::Formatter::Codecov.new.detect_ci
7
7
 
8
8
  REALENV =
9
- if CI == SimpleCov::Formatter::Codecov::GITHUB
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
10
22
  {
11
23
  'GITHUB_ACTIONS' => ENV['GITHUB_ACTIONS'],
12
24
  'GITHUB_HEAD_REF' => ENV['GITHUB_HEAD_REF'],
@@ -51,6 +63,7 @@ class TestCodecov < Minitest::Test
51
63
  end
52
64
 
53
65
  def upload(success = true)
66
+ WebMock.enable!
54
67
  formatter = SimpleCov::Formatter::Codecov.new
55
68
  result = stub('SimpleCov::Result', files: [
56
69
  stub_file('/path/lib/something.rb', [1, 0, 0, nil, 1, nil]),
@@ -67,7 +80,7 @@ class TestCodecov < Minitest::Test
67
80
  end
68
81
 
69
82
  def success_stubs
70
- stub_request(:post, %r{https:\/\/codecov.io\/upload})
83
+ stub_request(:post, %r{https:\/\/codecov.io\/upload\/v4})
71
84
  .to_return(
72
85
  status: 200,
73
86
  body: "https://codecov.io/gh/fake\n" \
@@ -92,6 +105,7 @@ class TestCodecov < Minitest::Test
92
105
 
93
106
  def setup
94
107
  ENV['CI'] = nil
108
+ ENV['CIRCLECI'] = nil
95
109
  ENV['GITHUB_ACTIONS'] = nil
96
110
  ENV['TRAVIS'] = nil
97
111
  end
@@ -153,6 +167,12 @@ class TestCodecov < Minitest::Test
153
167
  ENV['CIRCLE_PROJECT_USERNAME'] = nil
154
168
  ENV['CIRCLE_SHA1'] = nil
155
169
  ENV['CIRCLECI'] = nil
170
+ ENV['CODEBUILD_CI'] = nil
171
+ ENV['CODEBUILD_BUILD_ID'] = nil
172
+ ENV['CODEBUILD_RESOLVED_SOURCE_VERSION'] = nil
173
+ ENV['CODEBUILD_WEBHOOK_HEAD_REF'] = nil
174
+ ENV['CODEBUILD_SOURCE_VERSION'] = nil
175
+ ENV['CODEBUILD_SOURCE_REPO_URL'] = nil
156
176
  ENV['CODECOV_ENV'] = nil
157
177
  ENV['CODECOV_SLUG'] = nil
158
178
  ENV['CODECOV_TOKEN'] = nil
@@ -215,6 +235,23 @@ class TestCodecov < Minitest::Test
215
235
  assert_equal(`git rev-parse HEAD`.strip, result['params'][:commit])
216
236
  end
217
237
 
238
+ def test_enterprise
239
+ stub = stub_request(:post, %r{https:\/\/example.com\/upload\/v2})
240
+ .to_return(
241
+ status: 200,
242
+ 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\"}"
243
+ )
244
+
245
+ ENV['CODECOV_URL'] = 'https://example.com'
246
+ ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
247
+ result = upload
248
+ assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
249
+ assert_equal('12345678-1234-abcd-ef12-1234567890ab', result['result']['id'])
250
+ branch = `git rev-parse --abbrev-ref HEAD`.strip
251
+ assert_equal(branch != 'HEAD' ? branch : 'master', result['params'][:branch])
252
+ assert_equal(`git rev-parse HEAD`.strip, result['params'][:commit])
253
+ end
254
+
218
255
  def test_travis
219
256
  ENV['CI'] = 'true'
220
257
  ENV['TRAVIS'] = 'true'
@@ -425,9 +462,29 @@ class TestCodecov < Minitest::Test
425
462
  assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
426
463
  end
427
464
 
428
- def test_github
465
+ def test_github_pull_request
429
466
  ENV['CI'] = 'true'
430
467
  ENV['GITHUB_ACTIONS'] = 'true'
468
+ ENV['GITHUB_HEAD_REF'] = 'patch-2'
469
+ ENV['GITHUB_REF'] = 'refs/pull/7/merge'
470
+ ENV['GITHUB_REPOSITORY'] = 'codecov/ci-repo'
471
+ ENV['GITHUB_RUN_ID'] = '1'
472
+ ENV['GITHUB_SHA'] = 'c739768fcac68144a3a6d82305b9c4106934d31a'
473
+ ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
474
+ result = upload
475
+ assert_equal('github-actions', result['params'][:service])
476
+ assert_equal('c739768fcac68144a3a6d82305b9c4106934d31a', result['params'][:commit])
477
+ assert_equal('codecov/ci-repo', result['params'][:slug])
478
+ assert_equal('1', result['params'][:build])
479
+ assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
480
+ assert_equal('patch-2', result['params'][:branch])
481
+ assert_equal('7', result['params'][:pr])
482
+ end
483
+
484
+ def test_github_push
485
+ ENV['CI'] = 'true'
486
+ ENV['GITHUB_ACTIONS'] = 'true'
487
+ ENV['GITHUB_HEAD_REF'] = nil
431
488
  ENV['GITHUB_REF'] = 'refs/head/master'
432
489
  ENV['GITHUB_REPOSITORY'] = 'codecov/ci-repo'
433
490
  ENV['GITHUB_RUN_ID'] = '1'
@@ -439,6 +496,8 @@ class TestCodecov < Minitest::Test
439
496
  assert_equal('codecov/ci-repo', result['params'][:slug])
440
497
  assert_equal('1', result['params'][:build])
441
498
  assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
499
+ assert_equal('master', result['params'][:branch])
500
+ assert_equal(false, result['params'].key?(:pr))
442
501
  end
443
502
 
444
503
  def test_gitlab
@@ -559,6 +618,27 @@ class TestCodecov < Minitest::Test
559
618
  assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
560
619
  end
561
620
 
621
+ def test_codebuild
622
+ ENV['CODEBUILD_CI'] = "true"
623
+ ENV['CODEBUILD_BUILD_ID'] = "codebuild-project:458dq3q8-7354-4513-8702-ea7b9c81efb3"
624
+ ENV['CODEBUILD_RESOLVED_SOURCE_VERSION'] = 'd653b934ed59c1a785cc1cc79d08c9aaa4eba73b'
625
+ ENV['CODEBUILD_WEBHOOK_HEAD_REF'] = 'refs/heads/master'
626
+ ENV['CODEBUILD_SOURCE_VERSION'] = 'pr/123'
627
+ ENV['CODEBUILD_SOURCE_REPO_URL'] = 'https://github.com/owner/repo.git'
628
+ ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
629
+
630
+ result = upload
631
+
632
+ assert_equal("codebuild", result['params'][:service])
633
+ assert_equal("d653b934ed59c1a785cc1cc79d08c9aaa4eba73b", result['params'][:commit])
634
+ assert_equal("codebuild-project:458dq3q8-7354-4513-8702-ea7b9c81efb3", result['params'][:build])
635
+ assert_equal("codebuild-project:458dq3q8-7354-4513-8702-ea7b9c81efb3", result['params'][:job])
636
+ assert_equal("owner/repo", result['params'][:slug])
637
+ assert_equal("master", result['params'][:branch])
638
+ assert_equal("123", result['params'][:pr])
639
+ assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
640
+ end
641
+
562
642
  def test_filenames_are_shortened_correctly
563
643
  ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
564
644
 
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.5
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - codecov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-06 00:00:00.000000000 Z
11
+ date: 2020-09-04 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
  - - ">="