codeclimate-test-reporter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in codeclimate-test-reporter.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,40 @@
1
+ Copyright (c) 2013 Code Climate LLC
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
20
+
21
+ This gem includes code by Wil Gieseler, distributed under the MIT license:
22
+
23
+ Permission is hereby granted, free of charge, to any person obtaining
24
+ a copy of this software and associated documentation files (the
25
+ "Software"), to deal in the Software without restriction, including
26
+ without limitation the rights to use, copy, modify, merge, publish,
27
+ distribute, sublicense, and/or sell copies of the Software, and to
28
+ permit persons to whom the Software is furnished to do so, subject to
29
+ the following conditions:
30
+
31
+ The above copyright notice and this permission notice shall be
32
+ included in all copies or substantial portions of the Software.
33
+
34
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
35
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
36
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
37
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
38
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
39
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
40
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # codeclimate-test-reporter
2
+
3
+ Collects test coverage data from your Ruby test suite and sends it to Code
4
+ Climate's hosted, automated code review service. Based on SimpleCov.
5
+
6
+ Code Climate - [https://codeclimate.com](https://codeclimate.com)
7
+
8
+ ## Installation
9
+
10
+ This gem only works with Code Climate accounts, so if you don't have one the
11
+ first step is to create an account at: [https://codeclimate.com](https://codeclimate.com). Then:
12
+
13
+ 1. Add this to your Gemfile:
14
+
15
+ gem install "codeclimate-test-reporter", group: :test
16
+
17
+ 1. Start the test reporter **at the very beginning** of your `test_helper.rb` or
18
+ `spec_helper.rb` file:
19
+
20
+ require "codeclimate-test-reporter"
21
+ CodeClimate::TestReporter.start
22
+
23
+ Then set the `CODECLIMATE_REPO_TOKEN` environment variable when you run your build
24
+ on your CI server, and the results will show up in your Code Climate account.
25
+
26
+ The `CODECLIMATE_REPO_TOKEN` value is provided after you add your repo to your
27
+ Code Climate account.
28
+
29
+ Please contact hello@codeclimate.com if you need any assistance setting this up.
30
+
31
+ ## Contributions
32
+
33
+ Patches, bug fixed, feature requests, and pull requests are welcome on the
34
+ GitHub page for this project: [https://github.com/codeclimate/ruby-test-reporter](https://github.com/codeclimate/ruby-test-reporter)
35
+
36
+ This gem is maintained by Bryan Helmkamp (bryan@codeclimate.com).
37
+
38
+ ## Copyright
39
+
40
+ See LICENSE.txt
41
+
42
+ Portions of the implementation were inspired by the coveralls-ruby gem.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs.push "lib"
6
+ t.libs.push "spec"
7
+ t.test_files = FileList['spec/*_spec.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ task default: :test
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "codeclimate-test-reporter"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "codeclimate-test-reporter"
8
+ spec.version = CodeClimate::TestReporter::VERSION
9
+ spec.authors = ["Bryan Helmkamp"]
10
+ spec.email = ["bryan@brynary.com"]
11
+ spec.description = %q{Collects test coverage data from your Ruby test suite and sends it to Code Climate's hosted, automated code review service. Based on SimpleCov.}
12
+ spec.summary = %q{Uploads Ruby test coverage data to Code Climate.}
13
+ spec.homepage = ""
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "simplecov", "~> 0.7.1"
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,162 @@
1
+ require "json"
2
+ require "net/https"
3
+ require "uri"
4
+
5
+ module CodeClimate
6
+ class TestReporter
7
+ VERSION = "0.0.1"
8
+
9
+ class API
10
+ def self.host
11
+ ENV["CODECLIMATE_API_HOST"] ||
12
+ "https://codeclimate.com"
13
+ end
14
+
15
+ def self.post_results(result)
16
+ uri = URI.parse("#{host}/test_reports")
17
+ http = Net::HTTP.new(uri.host, uri.port)
18
+
19
+ if uri.scheme == "https"
20
+ http.use_ssl = true
21
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
22
+ end
23
+
24
+ http.open_timeout = 5 # in seconds
25
+ http.read_timeout = 5 # in seconds
26
+
27
+ request = Net::HTTP::Post.new(uri.path)
28
+ request["Content-Type"] = "application/json"
29
+ request.body = result.to_json
30
+
31
+ response = http.request(request)
32
+
33
+ if response.code.to_i >= 200 && response.code.to_i < 300
34
+ response
35
+ else
36
+ raise "HTTP Error: #{response.code}"
37
+ end
38
+ end
39
+ end
40
+
41
+ class Formatter
42
+ def format(result)
43
+ totals = Hash.new(0)
44
+
45
+ source_files = result.files.map do |file|
46
+ totals[:total] += file.lines.count
47
+ totals[:covered] += file.covered_lines.count
48
+ totals[:missed] += file.missed_lines.count
49
+
50
+ {
51
+ name: short_filename(file.filename),
52
+ coverage: file.coverage.to_json,
53
+ covered_percent: file.covered_percent.round(2),
54
+ covered_strength: file.covered_strength.round(2),
55
+ line_counts: {
56
+ total: file.lines.count,
57
+ covered: file.covered_lines.count,
58
+ missed: file.missed_lines.count
59
+ }
60
+ }
61
+ end
62
+
63
+ print "Coverage = #{result.covered_percent.round(2)}%. Sending report to #{API.host}... "
64
+
65
+ API.post_results({
66
+ repo_token: ENV["CODECLIMATE_REPO_TOKEN"],
67
+ source_files: source_files,
68
+ run_at: result.created_at,
69
+ covered_percent: result.covered_percent.round(2),
70
+ covered_strength: result.covered_strength.round(2),
71
+ line_counts: totals,
72
+ git: {
73
+ head: `git log -1 --pretty=format:'%H'`,
74
+ committed_at: committed_at,
75
+ branch: git_branch,
76
+ },
77
+ environment: {
78
+ test_framework: result.command_name.downcase,
79
+ pwd: Dir.pwd,
80
+ rails_root: (Rails.root.to_s rescue nil),
81
+ simplecov_root: ::SimpleCov.root,
82
+ gem_version: VERSION
83
+ },
84
+ ci_service: ci_service_data
85
+ })
86
+
87
+ puts "done."
88
+ true
89
+ rescue => ex
90
+ puts "\nCode Climate encountered an exception: #{ex.class}"
91
+ puts ex.message
92
+ ex.backtrace.each do |line|
93
+ puts line
94
+ end
95
+ false
96
+ end
97
+
98
+ def ci_service_data
99
+ if ENV['TRAVIS']
100
+ {
101
+ name: "travis-ci",
102
+ build_identifier: ENV['TRAVIS_JOB_ID'],
103
+ pull_request: ENV['TRAVIS_PULL_REQUEST']
104
+ }
105
+ elsif ENV['CIRCLECI']
106
+ {
107
+ name: "circlci",
108
+ build_identifier: ENV['CIRCLE_BUILD_NUM'],
109
+ branch: ENV['CIRCLE_BRANCH'],
110
+ commit_sha: ENV['CIRCLE_SHA1']
111
+ }
112
+ elsif ENV['SEMAPHORE']
113
+ {
114
+ name: "semaphore",
115
+ build_identifier: ENV['SEMAPHORE_BUILD_NUMBER']
116
+ }
117
+ elsif ENV['JENKINS_URL']
118
+ {
119
+ name: "jenkins",
120
+ build_identifier: ENV['BUILD_NUMBER'],
121
+ build_url: ENV['BUILD_URL'],
122
+ branch: ENV['GIT_BRANCH'],
123
+ commit_sha: ENV['GIT_COMMIT']
124
+ }
125
+ else
126
+ {}
127
+ end
128
+ end
129
+
130
+ def short_filename(filename)
131
+ return filename unless ::SimpleCov.root
132
+ filename.gsub(::SimpleCov.root, '.').gsub(/^\.\//, '')
133
+ end
134
+
135
+ def committed_at
136
+ committed_at = `git log -1 --pretty=format:'%ct'`
137
+ committed_at.to_i.zero? ? nil : committed_at.to_i
138
+ end
139
+
140
+ def git_branch
141
+ branch = `git branch`.split("\n").delete_if { |i| i[0] != "*" }
142
+ branch = [branch].flatten.first
143
+ branch ? branch.gsub("* ","") : nil
144
+ end
145
+ end
146
+
147
+ def self.start
148
+ if run?
149
+ require "simplecov"
150
+ ::SimpleCov.add_filter 'vendor'
151
+ ::SimpleCov.formatter = Formatter
152
+ ::SimpleCov.start("test_frameworks")
153
+ else
154
+ puts("Not reporting to Code Climate because ENV['CODECLIMATE_REPO_TOKEN'] is not set.")
155
+ end
156
+ end
157
+
158
+ def self.run?
159
+ !!ENV["CODECLIMATE_REPO_TOKEN"]
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,7 @@
1
+ require 'codeclimate-test-reporter'
2
+ CodeClimate::TestReporter.start
3
+
4
+ require 'minitest/spec'
5
+ require 'minitest/autorun'
6
+ require 'minitest/pride'
7
+
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codeclimate-test-reporter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bryan Helmkamp
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: simplecov
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.7.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.7.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.3'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Collects test coverage data from your Ruby test suite and sends it to
63
+ Code Climate's hosted, automated code review service. Based on SimpleCov.
64
+ email:
65
+ - bryan@brynary.com
66
+ executables: []
67
+ extensions: []
68
+ extra_rdoc_files: []
69
+ files:
70
+ - .gitignore
71
+ - Gemfile
72
+ - LICENSE.txt
73
+ - README.md
74
+ - Rakefile
75
+ - codeclimate-test-reporter.gemspec
76
+ - lib/codeclimate-test-reporter.rb
77
+ - spec/spec_helper.rb
78
+ homepage: ''
79
+ licenses: []
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubyforge_project:
98
+ rubygems_version: 1.8.23
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: Uploads Ruby test coverage data to Code Climate.
102
+ test_files:
103
+ - spec/spec_helper.rb
104
+ has_rdoc: