danger-jacoco 0.1.4 → 0.1.5
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 +5 -5
- data/.github/workflows/ci.yaml +12 -0
- data/.github/workflows/release.yaml +22 -0
- data/README.md +7 -0
- data/lib/danger_jacoco.rb +2 -0
- data/lib/danger_plugin.rb +2 -0
- data/lib/jacoco/dom_parser.rb +2 -0
- data/lib/jacoco/gem_version.rb +3 -1
- data/lib/jacoco/model/class.rb +2 -0
- data/lib/jacoco/model/counter.rb +2 -0
- data/lib/jacoco/model/group.rb +2 -0
- data/lib/jacoco/model/line.rb +2 -0
- data/lib/jacoco/model/method.rb +2 -0
- data/lib/jacoco/model/package.rb +2 -0
- data/lib/jacoco/model/report.rb +2 -0
- data/lib/jacoco/model/session_info.rb +2 -0
- data/lib/jacoco/model/sourcefile.rb +2 -0
- data/lib/jacoco/plugin.rb +39 -8
- data/lib/jacoco/sax_parser.rb +2 -0
- data/spec/jacoco_spec.rb +87 -15
- data/spec/spec_helper.rb +3 -1
- metadata +5 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: be717547463cb80933a9d0a26dc3c8d54e28ab790ee586f3c85ba008a05a32ac
|
|
4
|
+
data.tar.gz: 5d4c4871ab84ca86896e9c0bc87d65deb833222772bca6b94e189382402f6309
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 28114a17c2544c7780a282edc04660756b0b4b3da8a49c87da7ddae43c71fadbf57f1cc7c887430a6bc3b77115be214e46f6116232ddcbe75b47ed9f4701a969
|
|
7
|
+
data.tar.gz: 4958daa6252fdccaf330c6b752cc1bc51a57cfa4988c72fbf6ef8815472ff11df11e212535a43c2f4a2bf367c7de541647b45f2093c89ad5bb4b1b1fa1204e74
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: deploy-release
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
tags: '*'
|
|
5
|
+
jobs:
|
|
6
|
+
test:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
steps:
|
|
9
|
+
- uses: actions/checkout@v1
|
|
10
|
+
- uses: actions/setup-ruby@v1
|
|
11
|
+
with:
|
|
12
|
+
ruby-version: '2.6.x'
|
|
13
|
+
- run: bundle install
|
|
14
|
+
- run: bundle exec rake spec
|
|
15
|
+
- name: setup credentials
|
|
16
|
+
env:
|
|
17
|
+
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
|
18
|
+
run: |
|
|
19
|
+
mkdir ~/.gem
|
|
20
|
+
echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
|
|
21
|
+
chmod 0600 ~/.gem/credentials
|
|
22
|
+
- run: bundle exec rake release
|
data/README.md
CHANGED
|
@@ -15,6 +15,13 @@ Add
|
|
|
15
15
|
|
|
16
16
|
```ruby
|
|
17
17
|
jacoco.minimum_project_coverage_percentage = 50 # default 0
|
|
18
|
+
jacoco.minimum_package_coverage_map = { # optional (default is empty)
|
|
19
|
+
'com/package/' => 55,
|
|
20
|
+
'com/package/more/specific/' => 15
|
|
21
|
+
}
|
|
22
|
+
jacoco.minimum_class_coverage_map = { # optional (default is empty)
|
|
23
|
+
'com/package/more/specific/ClassName' => 15
|
|
24
|
+
}
|
|
18
25
|
jacoco.minimum_class_coverage_percentage = 75 # default 0
|
|
19
26
|
jacoco.files_extension = [".java"] # default [".kt", ".java"]
|
|
20
27
|
jacoco.report("path/to/jacoco.xml", "http://jacoco-html-reports/")
|
data/lib/danger_jacoco.rb
CHANGED
data/lib/danger_plugin.rb
CHANGED
data/lib/jacoco/dom_parser.rb
CHANGED
data/lib/jacoco/gem_version.rb
CHANGED
data/lib/jacoco/model/class.rb
CHANGED
data/lib/jacoco/model/counter.rb
CHANGED
data/lib/jacoco/model/group.rb
CHANGED
data/lib/jacoco/model/line.rb
CHANGED
data/lib/jacoco/model/method.rb
CHANGED
data/lib/jacoco/model/package.rb
CHANGED
data/lib/jacoco/model/report.rb
CHANGED
data/lib/jacoco/plugin.rb
CHANGED
|
@@ -1,19 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'jacoco/sax_parser'
|
|
2
4
|
|
|
3
5
|
module Danger
|
|
6
|
+
# Verify code coverage inside your projects
|
|
7
|
+
# This is done using the jacoco output
|
|
8
|
+
# Results are passed out as a table in markdown
|
|
9
|
+
#
|
|
10
|
+
# @example Verify coverage
|
|
11
|
+
# jacoco.minimum_project_coverage_percentage = 50
|
|
12
|
+
#
|
|
13
|
+
# @example Verify coverage per package
|
|
14
|
+
# jacoco.minimum_package_coverage_map = { # optional (default is empty)
|
|
15
|
+
# 'com/package/' => 55,
|
|
16
|
+
# 'com/package/more/specific/' => 15
|
|
17
|
+
# }
|
|
4
18
|
#
|
|
5
19
|
# @see Anton Malinskiy/danger-jacoco
|
|
6
20
|
# @tags jacoco, coverage, java, android, kotlin
|
|
7
21
|
#
|
|
8
|
-
class DangerJacoco < Plugin
|
|
22
|
+
class DangerJacoco < Plugin # rubocop:disable Metrics/ClassLength
|
|
9
23
|
attr_accessor :minimum_project_coverage_percentage
|
|
10
24
|
attr_accessor :minimum_class_coverage_percentage
|
|
11
25
|
attr_accessor :files_extension
|
|
26
|
+
attr_accessor :minimum_package_coverage_map
|
|
12
27
|
attr_accessor :minimum_class_coverage_map
|
|
13
28
|
|
|
29
|
+
# Initialize the plugin with configured parameters or defaults
|
|
14
30
|
def setup
|
|
15
31
|
@minimum_project_coverage_percentage = 0 unless minimum_project_coverage_percentage
|
|
16
32
|
@minimum_class_coverage_percentage = 0 unless minimum_class_coverage_percentage
|
|
33
|
+
@minimum_package_coverage_map = {} unless minimum_package_coverage_map
|
|
17
34
|
@minimum_class_coverage_map = {} unless minimum_class_coverage_map
|
|
18
35
|
@files_extension = ['.kt', '.java'] unless files_extension
|
|
19
36
|
end
|
|
@@ -54,8 +71,8 @@ module Danger
|
|
|
54
71
|
total_covered = total_coverage(path)
|
|
55
72
|
|
|
56
73
|
report_markdown = "### JaCoCO Code Coverage #{total_covered[:covered]}% #{total_covered[:status]}\n"
|
|
57
|
-
report_markdown
|
|
58
|
-
report_markdown
|
|
74
|
+
report_markdown += "| Class | Covered | Meta | Status |\n"
|
|
75
|
+
report_markdown += "|:---|:---:|:---:|:---:|\n"
|
|
59
76
|
class_coverage_above_minimum = markdown_class(parser, report_markdown, report_url)
|
|
60
77
|
markdown(report_markdown)
|
|
61
78
|
|
|
@@ -75,6 +92,7 @@ module Danger
|
|
|
75
92
|
counter = coverage_counter(jacoco_class)
|
|
76
93
|
coverage = (counter.covered.fdiv(counter.covered + counter.missed) * 100).floor
|
|
77
94
|
required_coverage = minimum_class_coverage_map[jacoco_class.name]
|
|
95
|
+
required_coverage = package_coverage(jacoco_class.name) if required_coverage.nil?
|
|
78
96
|
required_coverage = minimum_class_coverage_percentage if required_coverage.nil?
|
|
79
97
|
status = coverage_status(coverage, required_coverage)
|
|
80
98
|
|
|
@@ -85,6 +103,20 @@ module Danger
|
|
|
85
103
|
}
|
|
86
104
|
end
|
|
87
105
|
|
|
106
|
+
# it returns the most suitable coverage by package name to class or nil
|
|
107
|
+
def package_coverage(class_name)
|
|
108
|
+
path = class_name
|
|
109
|
+
package_parts = class_name.split('/')
|
|
110
|
+
package_parts.reverse_each do |item|
|
|
111
|
+
size = item.size
|
|
112
|
+
path = path[0...-size]
|
|
113
|
+
coverage = minimum_package_coverage_map[path]
|
|
114
|
+
path = path[0...-1] unless path.empty?
|
|
115
|
+
return coverage unless coverage.nil?
|
|
116
|
+
end
|
|
117
|
+
nil
|
|
118
|
+
end
|
|
119
|
+
|
|
88
120
|
# it returns an emoji for coverage status
|
|
89
121
|
def coverage_status(coverage, minimum_percentage)
|
|
90
122
|
if coverage < (minimum_percentage / 2) then ':skull:'
|
|
@@ -152,12 +184,11 @@ module Danger
|
|
|
152
184
|
|
|
153
185
|
def report_link(class_name, report_url)
|
|
154
186
|
if report_url.empty?
|
|
155
|
-
|
|
156
|
-
else
|
|
157
|
-
|
|
158
|
-
|
|
187
|
+
"`#{class_name}`"
|
|
188
|
+
else
|
|
189
|
+
report_filepath = class_name.gsub(%r{/(?=[^/]*/.)}, '.') + '.html'
|
|
190
|
+
"[`#{class_name}`](#{report_url + report_filepath})"
|
|
159
191
|
end
|
|
160
192
|
end
|
|
161
|
-
|
|
162
193
|
end
|
|
163
194
|
end
|
data/lib/jacoco/sax_parser.rb
CHANGED
data/spec/jacoco_spec.rb
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# rubocop:disable LineLength
|
|
4
|
+
|
|
5
|
+
# rubocop:disable BlockLength
|
|
6
|
+
|
|
7
|
+
require File.expand_path('spec_helper', __dir__)
|
|
4
8
|
|
|
9
|
+
module Danger
|
|
5
10
|
describe Danger::DangerJacoco do
|
|
6
|
-
it
|
|
11
|
+
it 'should be a plugin' do
|
|
7
12
|
expect(Danger::DangerJacoco.new(nil)).to be_a Danger::Plugin
|
|
8
13
|
end
|
|
9
14
|
|
|
10
15
|
#
|
|
11
16
|
# You should test your custom attributes and methods here
|
|
12
17
|
#
|
|
13
|
-
describe
|
|
18
|
+
describe 'with Dangerfile' do
|
|
14
19
|
before do
|
|
15
20
|
@dangerfile = testing_dangerfile
|
|
16
21
|
@my_plugin = @dangerfile.jacoco
|
|
@@ -20,25 +25,91 @@ module Danger
|
|
|
20
25
|
|
|
21
26
|
allow(@dangerfile.git).to receive(:modified_files).and_return(modified_files)
|
|
22
27
|
allow(@dangerfile.git).to receive(:added_files).and_return(added_files)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it :report do
|
|
31
|
+
path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
|
|
32
|
+
|
|
33
|
+
@my_plugin.minimum_project_coverage_percentage = 50
|
|
34
|
+
@my_plugin.minimum_class_coverage_map = { 'com/example/CachedRepository' => 100 }
|
|
35
|
+
|
|
36
|
+
@my_plugin.report path_a
|
|
23
37
|
|
|
38
|
+
expect(@dangerfile.status_report[:errors]).to eq(['Total coverage of 32.9%. Improve this to at least 50%',
|
|
39
|
+
'Class coverage is below minimum. Improve to at least 0%'])
|
|
40
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('### JaCoCO Code Coverage 32.9% :warning:')
|
|
41
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| Class | Covered | Meta | Status |')
|
|
42
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('|:---|:---:|:---:|:---:|')
|
|
43
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 100% | :warning: |')
|
|
24
44
|
end
|
|
25
45
|
|
|
46
|
+
it 'test with package coverage' do
|
|
47
|
+
path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
|
|
26
48
|
|
|
27
|
-
|
|
49
|
+
@my_plugin.minimum_project_coverage_percentage = 50
|
|
50
|
+
@my_plugin.minimum_package_coverage_map = { 'com/example/' => 70 }
|
|
51
|
+
|
|
52
|
+
@my_plugin.report path_a
|
|
53
|
+
|
|
54
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 70% | :warning: |')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'test with bigger overlapped package coverage' do
|
|
28
58
|
path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
|
|
29
59
|
|
|
30
60
|
@my_plugin.minimum_project_coverage_percentage = 50
|
|
31
|
-
@my_plugin.
|
|
61
|
+
@my_plugin.minimum_package_coverage_map = {
|
|
62
|
+
'com/example/' => 70,
|
|
63
|
+
'com/' => 90
|
|
64
|
+
}
|
|
32
65
|
|
|
33
66
|
@my_plugin.report path_a
|
|
34
67
|
|
|
35
|
-
expect(@dangerfile.status_report[:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
expect(@dangerfile.status_report[:markdowns][0].message).to include("| `com/example/CachedRepository` | 50% | 100% | :warning: |")
|
|
68
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 70% | :warning: |')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'test with lower overlapped package coverage' do
|
|
72
|
+
path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
|
|
41
73
|
|
|
74
|
+
@my_plugin.minimum_project_coverage_percentage = 50
|
|
75
|
+
@my_plugin.minimum_package_coverage_map = {
|
|
76
|
+
'com/example/' => 77,
|
|
77
|
+
'com/' => 30
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@my_plugin.report path_a
|
|
81
|
+
|
|
82
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 77% | :warning: |')
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'test with overlapped package coverage and bigger class coverage' do
|
|
86
|
+
path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
|
|
87
|
+
|
|
88
|
+
@my_plugin.minimum_project_coverage_percentage = 50
|
|
89
|
+
@my_plugin.minimum_package_coverage_map = {
|
|
90
|
+
'com/example/' => 77,
|
|
91
|
+
'com/' => 30
|
|
92
|
+
}
|
|
93
|
+
@my_plugin.minimum_class_coverage_map = { 'com/example/CachedRepository' => 100 }
|
|
94
|
+
|
|
95
|
+
@my_plugin.report path_a
|
|
96
|
+
|
|
97
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 100% | :warning: |')
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'test with overlapped package coverage and lowwer class coverage' do
|
|
101
|
+
path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
|
|
102
|
+
|
|
103
|
+
@my_plugin.minimum_project_coverage_percentage = 50
|
|
104
|
+
@my_plugin.minimum_package_coverage_map = {
|
|
105
|
+
'com/example/' => 90,
|
|
106
|
+
'com/' => 85
|
|
107
|
+
}
|
|
108
|
+
@my_plugin.minimum_class_coverage_map = { 'com/example/CachedRepository' => 80 }
|
|
109
|
+
|
|
110
|
+
@my_plugin.report path_a
|
|
111
|
+
|
|
112
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 80% | :warning: |')
|
|
42
113
|
end
|
|
43
114
|
|
|
44
115
|
it 'adds a link to report' do
|
|
@@ -49,10 +120,11 @@ module Danger
|
|
|
49
120
|
|
|
50
121
|
@my_plugin.report(path_a, 'http://test.com/')
|
|
51
122
|
|
|
52
|
-
expect(@dangerfile.status_report[:markdowns][0].message).to include(
|
|
53
|
-
|
|
123
|
+
expect(@dangerfile.status_report[:markdowns][0].message).to include('| [`com/example/CachedRepository`](http://test.com/com.example/CachedRepository.html) | 50% | 80% | :warning: |')
|
|
54
124
|
end
|
|
55
|
-
|
|
56
125
|
end
|
|
57
126
|
end
|
|
58
127
|
end
|
|
128
|
+
|
|
129
|
+
# rubocop:enable LineLength
|
|
130
|
+
# rubocop:enable BlockLength
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: danger-jacoco
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Anton Malinskiy
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-11-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: danger-plugin-api
|
|
@@ -171,6 +171,8 @@ executables: []
|
|
|
171
171
|
extensions: []
|
|
172
172
|
extra_rdoc_files: []
|
|
173
173
|
files:
|
|
174
|
+
- ".github/workflows/ci.yaml"
|
|
175
|
+
- ".github/workflows/release.yaml"
|
|
174
176
|
- ".gitignore"
|
|
175
177
|
- ".rubocop.yml"
|
|
176
178
|
- ".travis.yml"
|
|
@@ -217,8 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
217
219
|
- !ruby/object:Gem::Version
|
|
218
220
|
version: '0'
|
|
219
221
|
requirements: []
|
|
220
|
-
|
|
221
|
-
rubygems_version: 2.6.13
|
|
222
|
+
rubygems_version: 3.0.3
|
|
222
223
|
signing_key:
|
|
223
224
|
specification_version: 4
|
|
224
225
|
summary: A longer description of danger-jacoco.
|