33require "rspec/core/rake_task"
44require "rubocop/rake_task"
55require "json"
6+ require "fileutils"
67
78require_relative "util"
89
10+ class CodeClimateUploader
11+ CC_REPORTER_URL = "https://codeclimate.com/downloads/test-reporter/test-reporter-0.6.3-linux-amd64"
12+ CC_REPORTER = "vendor/bundle/cc_reporter_0.6.3"
13+ CC_JSON = "codeclimate.json"
14+ SIMPLECOV_RESULT = "coverage/.resultset.json"
15+
16+ class << self
17+ def upload
18+ download_reporter
19+ format_coverage
20+ upload_coverage
21+ end
22+
23+ private
24+
25+ def format_coverage
26+ system ( cc_env , "./#{ CC_REPORTER } format-coverage #{ SIMPLECOV_RESULT } -t simplecov -o #{ CC_JSON } " )
27+ end
28+
29+ def upload_coverage
30+ system ( cc_env , "./#{ CC_REPORTER } upload-coverage -i #{ CC_JSON } " )
31+ end
32+
33+ def cc_env
34+ @cc_env ||= {
35+ "GIT_COMMIT_SHA" => pull_request? ? context . event . pull_request . head . sha : context . sha ,
36+ "GIT_BRANCH" => pull_request? ? ENV [ "GITHUB_HEAD_REF" ] : ENV [ "GITHUB_REF" ] . split ( "/" ) . last ,
37+ "CI_NAME" => "github-actions" ,
38+ }
39+ end
40+
41+ def context
42+ @context ||= JSON . parse ( ENV [ "CONTEXT" ] , object_class : OpenStruct )
43+ end
44+
45+ def pull_request?
46+ @pull_request ||= ENV [ "GITHUB_EVENT_NAME" ] == "pull_request"
47+ end
48+
49+ def download_reporter
50+ return if File . exist? ( CC_REPORTER )
51+
52+ system ( "curl -s -L #{ CC_REPORTER_URL } -o #{ CC_REPORTER } && chmod a+x #{ CC_REPORTER } " )
53+ end
54+ end
55+ end
56+
957class TestTasks
1058 include Rake ::DSL
1159 include TaskUtil
@@ -60,7 +108,7 @@ def add_single_adaptor_tasks
60108
61109 def run_all_adaptors ( task_name )
62110 errors = adaptors . each_with_object ( [ ] ) do |adaptor , a |
63- puts "\n Executing #{ task_name } for #{ adaptor } " . yellow
111+ puts "Executing #{ task_name } for #{ adaptor } " . yellow
64112 run_single_adaptor ( adaptor , task_name )
65113 rescue
66114 a << adaptor
@@ -75,41 +123,32 @@ def run_single_adaptor(adaptor, task_name)
75123 def merge_coverage
76124 ENV [ "COV_MERGE" ] = "true"
77125 require "simplecov"
78- require "coveralls "
126+ require "simplecov-console "
79127
80- results = Dir . glob ( "#{ root } /*/coverage/.resultset.json" ) . each_with_object ( [ ] ) do |file , res |
81- res << SimpleCov ::Result . from_hash ( JSON . parse ( File . read ( file ) ) )
128+ SimpleCov . configure do
129+ %w[ allure-cucumber allure-rspec allure-ruby-commons ] . each { |g | add_group ( g , g ) }
130+ formatter ( multiformatter )
82131 end
83132
84- puts "\n Generating combined coverage report" . yellow
85- SimpleCov ::ResultMerger . merge_results ( *results ) . tap do |result |
86- ENV [ "CI" ] ? publish_coverage ( result ) : display_coverage ( result )
87- end
133+ merge_results
134+ CodeClimateUploader . upload if ENV [ "CI" ] && ENV [ "RUBY_VERSION" ] == "2.7"
88135 end
89136
90- def display_coverage ( result )
91- Coveralls ::SimpleCov ::Formatter . new . display_result ( result )
92- end
93-
94- def publish_coverage ( result )
95- JSON . parse ( ENV [ "CONTEXT" ] , object_class : OpenStruct ) . tap do |context |
96- coveralls_set_env ( pull_request? ? context . event . pull_request . head . sha : context . sha )
137+ def merge_results
138+ puts "Generating combined coverage report" . yellow
139+ results = Dir . glob ( "#{ root } /*/coverage/.resultset.json" ) . each_with_object ( [ ] ) do |file , res |
140+ res << SimpleCov ::Result . from_hash ( JSON . parse ( File . read ( file ) ) )
141+ end
142+ SimpleCov ::ResultMerger . merge_results ( *results ) . tap do |result |
143+ SimpleCov ::ResultMerger . store_result ( result )
144+ result . format!
97145 end
98- Coveralls ::SimpleCov ::Formatter . new . format ( result )
99- end
100-
101- def coveralls_set_env ( sha )
102- ENV [ "GIT_ID" ] = sha
103- ENV [ "GIT_BRANCH" ] = ENV [ "CI_BRANCH" ] = pull_request? ? ENV [ "GITHUB_HEAD_REF" ] : ENV [ "GITHUB_REF" ] . split ( "/" ) . last
104- ENV [ "GIT_MESSAGE" ] = `git --no-pager show -s --format='%s' #{ sha } `
105- ENV [ "GIT_COMMITTER_NAME" ] = `git --no-pager show -s --format='%cN' #{ sha } `
106- ENV [ "GIT_COMMITTER_EMAIL" ] = `git --no-pager show -s --format='%ce' #{ sha } `
107- ENV [ "GIT_AUTHOR_NAME" ] = `git --no-pager show -s --format='%aN' #{ sha } `
108- ENV [ "GIT_AUTHOR_EMAIL" ] = `git --no-pager show -s --format='%ae' #{ sha } `
109146 end
110147
111- def pull_request?
112- ENV [ "GITHUB_EVENT_NAME" ] == "pull_request"
148+ def multiformatter
149+ formatters = [ SimpleCov ::Formatter ::Console ]
150+ formatters << SimpleCov ::Formatter ::HTMLFormatter if ENV [ "COV_HTML_REPORT" ]
151+ SimpleCov ::Formatter ::MultiFormatter . new ( formatters )
113152 end
114153end
115154
0 commit comments