danger-warnings_next_generation 0.0.1

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.
data/.travis.yml ADDED
@@ -0,0 +1,34 @@
1
+ language: ruby
2
+
3
+ cache:
4
+ directories:
5
+ - bundle
6
+
7
+ before_install:
8
+ - gem update --system
9
+ - gem install bundler
10
+
11
+ rvm:
12
+ - 2.3
13
+ - 2.4
14
+ - 2.5
15
+ - 2.6
16
+
17
+ addons:
18
+ sonarcloud:
19
+ organization: "kyaak-github"
20
+ token:
21
+ secure: "oNSbUcGFI1VJAJug8zcuGCUStXR8Ou3qcVCjgfgMdEVDcopCZF428ws4YmOywK4D9xhH++bkdqRBiR7mr5kOlUP/VMTl8rBiHJm2XrJQnY9UqBflSbT3HRSkIbgh9gS1BrlOOsyAu6//TPdCsARwE2n/3iiyDfh7A5KdRaIXlY8NaPHk9iAB/+spYMxXeFCfhvHURHqYcr8lAyHaLda0Ph+l+qSut+AMzvUlnH9cQvM2+109+XbZo6YoHALNRgkgXMXF84N9RlhWfFBx3RR+jDFy8mPPy3+5pphyIEXQgxMZ6PUrte5jYsnno32FdA3ewl75NakXzTj+kZUqnrnteOBkZMSD5aU+9CZRqBgCZcBMjQ2fTUkGUL+m1rBdnpeBUtzvdHZW9rrOC51gHbA3twWR9aSzoS062ZVPskr0pssSq2zp69Zer0aKUiHHIfA5te+CdxSfE3BvDlxMCF/MGob3A2KBLl50CJLmk4UQtvs8/mtTW5t9MK3ai7/A/OsT/C2rQn8sMo6RtYNlAqzzpCdFiXpsYqVo2IfLtDatZ8Ti9srRLO2DsOUJW+vpYh4UgbH6A9mhtn/HInoJzNzlGLAJqFbpY9TnuD0cILYZIY2Jk2DlaL+a5//L9sT2Mz2nA1kwsPnIui9LwnK+RupUo9pfrjD9jeKaGolNz0qF0Bc="
22
+
23
+ script:
24
+ - bundle exec rake spec
25
+ - sonar-scanner
26
+
27
+ deploy:
28
+ provider: rubygems
29
+ api_key:
30
+ secure: "hGaoShdpKLUwc3HS3p6opjf6Z+/Ez2OLtco2RoavhyKavnPS1uUJ1XdfVp/2ZgW5LDPPpbq7EDRcnKK1dd/4WpDP/UMM2xxEKIhUhQrQPf9LvyTOUXyRird0aSmPYMmGReCIr5Bgg+BxL3AuagMxCUNWKADMLTEGd/7sbyTzf1Pv+XKNEnek+BdmmrQp/w/dOubn/vsjBGxqU3+barGxl/0ImGRlkDplv5VIqoZtf3l3LRNCQ4K4VX7hRveHv3hK6NpsKoqrcK9Uzj3GyGxrEnfnNiSlPa2oeohctJiDYk8fgcvTcckdVfMra+YNk2gpS/YeEC9dEbSsfPykeuZa/Ss+8O64bPg435Zj51AEzw9YgyezLHuN6KRtm8Hb73nL+8+1JW58OEzMCypG6KVcHHSf9Tir3hh0mgxCCrsHpblBNpGyiEKOFLdnsHuM0RotP4gC0R2OB7QRb4IVRhcvS5QDRi1WNwz4dzYe6WpWT4CGSsm/RpqfljtlLnDjHGCB5O3ybY4AYh3giueoDEKsr94q7y1Z0dXTbl+3UZi20vVBcakl4NFlbuoq4/zRpJYDGU2/qXV0molb030DIL+jQtfJkt08MveZJ/9pn4MbPQarDbNvpKyq4nuaqfYrS1NIAtkIYwROnl3GXxnocudDVuZCohNNaxpridnFgPSlD6k="
31
+ gem: danger-warnings_next_generation
32
+ on:
33
+ branch: master
34
+ rvm: 2.6
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in danger-warnings_next_generation.gemspec
6
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2019 Martin Schwamberger <kyaak.dev@gmail.com>
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,165 @@
1
+ <h1 align="center">danger-warnings_next_generation</h1>
2
+
3
+ <div align="center">
4
+ <!-- Sonar Cloud -->
5
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
6
+ <img src="https://sonarcloud.io/images/project_badges/sonarcloud-white.svg"
7
+ alt="Sonar Cloud" />
8
+ </a>
9
+ </div>
10
+
11
+ </br>
12
+
13
+ <div align="center">
14
+ <!-- Version -->
15
+ <a href="https://badge.fury.io/rb/danger-warnings_next_generation">
16
+ <img src="https://badge.fury.io/rb/danger-warnings.svg" alt="Version" />
17
+ </a>
18
+ <!-- Downloads -->
19
+ <a href="https://badge.fury.io/rb/danger-warnings_next_generation">
20
+ <img src="https://img.shields.io/gem/dt/danger-warnings.svg" alt="Downloads" />
21
+ </a>
22
+ </div>
23
+
24
+ <div align="center">
25
+ <!-- Build Status -->
26
+ <a href="https://travis-ci.org/Kyaak/danger-warnings_next_generation">
27
+ <img src="https://img.shields.io/travis/choojs/choo/develop.svg"
28
+ alt="Build Status" />
29
+ </a>
30
+ <!-- Coverage -->
31
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
32
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=coverage"
33
+ alt="Coverage" />
34
+ </a>
35
+ </div>
36
+
37
+ <div align="center">
38
+ <!-- Reliability Rating -->
39
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
40
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=reliability_rating"
41
+ alt="Reliability Rating" />
42
+ </a>
43
+ <!-- Security Rating -->
44
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
45
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=security_rating"
46
+ alt="Security Rating" />
47
+ </a>
48
+ <!-- Maintainabiltiy -->
49
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
50
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=sqale_rating"
51
+ alt="Maintainabiltiy" />
52
+ </a>
53
+ </div>
54
+
55
+ <div align="center">
56
+ <!-- Code Smells -->
57
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
58
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=code_smells"
59
+ alt="Code Smells" />
60
+ </a>
61
+ <!-- Bugs -->
62
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
63
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=bugs"
64
+ alt="Bugs" />
65
+ </a>
66
+ <!-- Vulnerabilities -->
67
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
68
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=vulnerabilities"
69
+ alt="Vulnerabilities" />
70
+ </a>
71
+ <!-- Technical Dept -->
72
+ <a href="https://sonarcloud.io/dashboard?id=Kyaak_danger-warnings_next_generation">
73
+ <img src="https://sonarcloud.io/api/project_badges/measure?project=Kyaak_danger-warnings_next_generation&metric=sqale_index"
74
+ alt="Technical Dept" />
75
+ </a>
76
+ </div>
77
+ </br>
78
+
79
+ This [danger](https://github.com/danger/danger) plugin generates overview and detail reports for code analysis results. :detective: <br>
80
+
81
+ This plugin is inspired and works only with the jenkins [warnings-ng-plugin](https://github.com/jenkinsci/warnings-ng-plugin) :bowing_man:
82
+
83
+
84
+ To avoid an overload of issues in the pull request, only issues for changed files are listed.
85
+ The overview report will always contain the number of total, new and fixed issues.
86
+
87
+
88
+ ## How it looks like
89
+
90
+ ### Warnings Next Generation Overview
91
+
92
+ |**Tool**|:beetle:|:x:|:white_check_mark:|
93
+ |:---|:---:|:---:|:---:|
94
+ |Android Lint Warnings|10|0|3|
95
+ |PMD Warnings|:star:|0|0|
96
+ |Detekt Warnings|10|5|5|
97
+ |Checkstyle|:star:|0|3|
98
+
99
+ ### Java Warnings
100
+
101
+ |**Severity**|**File**|**Description**|
102
+ |---|---|---|
103
+ |NORMAL|ProductDetailPageFragment.kt:135|[Deprecation] 'getColor(Int): Int' is deprecated. Deprecated in Java|
104
+ |NORMAL|ImageGalleryFragment.kt:40|[] Type mismatch: inferred type is java.util.ArrayList<String!>? but kotlin.collections.ArrayList<String> /* = java.util.ArrayList<String> */ was expected|
105
+ |NORMAL|ImageGalleryFragment.kt:87|[Deprecation] 'getColor(Int): Int' is deprecated. Deprecated in Java|
106
+ |NORMAL|ImageGalleryFragment.kt:90|[Deprecation] 'getColor(Int): Int' is deprecated. Deprecated in Java|
107
+
108
+
109
+ ### As inline
110
+ ```text
111
+ NORMAL
112
+ [Deprecation]
113
+ getColor(Int): Int' is deprecated. Deprecated in Java
114
+ ```
115
+
116
+ ## Installation
117
+
118
+ $ gem install danger-warnings_next_generation
119
+
120
+ ## Usage
121
+
122
+ <blockquote>Show overview and tool reports for all found analytic tools.
123
+ <pre>
124
+ warnings_next_generation.report
125
+ </pre>
126
+ </blockquote>
127
+
128
+ <blockquote>Show overview and tool reports for selected analytic tools
129
+ <pre>
130
+ warnings_next_generation.report(
131
+ # must match tool id
132
+ include: ['android-lint', 'java', 'pmd']
133
+ )
134
+ </pre>
135
+ </blockquote>
136
+
137
+ <blockquote>Show overview and tool reports with inline comments
138
+ <pre>
139
+ warnings_next_generation.report(
140
+ inline: true,
141
+ # inline comments require a baseline
142
+ # file: "/var/lib/jenkins/workspace/projectname/repository/app/src/main/java/com/projectname/b2bshop/fragment/gallery/ImageGalleryFragment.kt
143
+ # baseline: "/var/lib/jenkins/workspace/projectname/repository/
144
+ baseline: '/path/to/workspace/repository/root'
145
+ )
146
+ </pre>
147
+ </blockquote>
148
+
149
+ <blockquote>Only overview report
150
+ <pre>
151
+ warnings_next_generation.overview_report(
152
+ include: ['java']
153
+ )
154
+ </pre>
155
+ </blockquote>
156
+
157
+ <blockquote>Only tools report
158
+ <pre>
159
+ warnings_next_generation.tools_report(
160
+ include: ['java', 'pmd']
161
+ inline: true,
162
+ baseline: '/path/to/workspace/repository/root'
163
+ )
164
+ </pre>
165
+ </blockquote>
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "rubocop/rake_task"
6
+
7
+ RSpec::Core::RakeTask.new(:specs)
8
+
9
+ task default: :specs
10
+
11
+ task :spec do
12
+ Rake::Task["specs"].invoke
13
+ Rake::Task["rubocop"].invoke
14
+ Rake::Task["spec_docs"].invoke
15
+ end
16
+
17
+ desc "Run RuboCop on the lib/specs directory"
18
+ RuboCop::RakeTask.new(:rubocop) do |task|
19
+ task.patterns = %w(lib/**/*.rb spec/**/*.rb)
20
+ task.fail_on_error = false
21
+ task.formatters = %w(simple json)
22
+ task.options = %w(--out rubocop-result.json)
23
+ end
24
+
25
+ desc "Ensure that the plugin passes `danger plugins lint`"
26
+ task :spec_docs do
27
+ sh "bundle exec danger plugins lint"
28
+ end
@@ -0,0 +1,41 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ lib = File.expand_path("lib", __dir__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require "warnings_next_generation/gem_version.rb"
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "danger-warnings_next_generation"
10
+ spec.version = WarningsNextGeneration::VERSION
11
+ spec.authors = ["Martin Schwamberger"]
12
+ spec.email = ["kyaak.dev@gmail.com"]
13
+ spec.description = "Danger plugin to for Jenkins-Warnings-Next-Generation plugin."
14
+ spec.summary = "Read Jenkins warnings-ng reports and comment pull request with found issues."
15
+ spec.homepage = "https://github.com/Kyaak/danger-warnings_next_generation"
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.required_ruby_version = ">=2.3.0"
24
+
25
+ spec.add_runtime_dependency "danger-plugin-api", "~> 1.0"
26
+
27
+ # General ruby development
28
+ spec.add_development_dependency "bundler", "~> 2.0"
29
+ spec.add_development_dependency "rake", "~> 12.3"
30
+
31
+ # Testing support
32
+ spec.add_development_dependency "mocha", "~> 1.8"
33
+ spec.add_development_dependency "rspec", "~> 3.8"
34
+ spec.add_development_dependency "simplecov", "~> 0.16"
35
+ spec.add_development_dependency "simplecov-console", "~> 0.4"
36
+
37
+ # Linting code and docs
38
+ spec.add_development_dependency "rubocop", "~> 0.68"
39
+ spec.add_development_dependency "rubocop-performance", "~> 1.2"
40
+ spec.add_development_dependency "yard", "~> 0.9"
41
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "warnings_next_generation/plugin"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "warnings_next_generation/gem_version"
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WarningsNextGeneration
4
+ VERSION = "0.0.1"
5
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WarningsNextGeneration
4
+ class MarkdownTable
5
+ COLUMN_SEPARATOR = "|"
6
+ HEADER_SEPARATOR = "-"
7
+
8
+ def initialize
9
+ @header = COLUMN_SEPARATOR.dup
10
+ @header_separator = COLUMN_SEPARATOR.dup
11
+ @lines = []
12
+ end
13
+
14
+ def overview_header(*args)
15
+ args.each_with_index do |item, index|
16
+ @header << "#{item}#{COLUMN_SEPARATOR}"
17
+ @header_separator << if index.zero?
18
+ ":#{HEADER_SEPARATOR}#{COLUMN_SEPARATOR}"
19
+ else
20
+ ":#{HEADER_SEPARATOR}:#{COLUMN_SEPARATOR}"
21
+ end
22
+ end
23
+ end
24
+
25
+ def detail_header(*args)
26
+ args.each do |item|
27
+ @header << "#{item}#{COLUMN_SEPARATOR}"
28
+ @header_separator << "#{HEADER_SEPARATOR}#{COLUMN_SEPARATOR}"
29
+ end
30
+ end
31
+
32
+ def line(*args)
33
+ line = COLUMN_SEPARATOR.dup
34
+ args.each do |item|
35
+ line << "#{item}#{COLUMN_SEPARATOR}"
36
+ end
37
+ @lines << line
38
+ end
39
+
40
+ def to_markdown
41
+ result = +"#{@header}\n#{@header_separator}\n"
42
+ result << @lines.join("\n")
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,214 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Danger
4
+ # Generate code analysis reports on pull requests based on jenkins warnings-next-generation-plugin.
5
+ #
6
+ # @example Generate overview and tool reports for all code coverage tools.
7
+ # warnings_next_generation.report
8
+ #
9
+ # @example Generate only overview report.
10
+ # warnings_next_generation.overview_report
11
+ #
12
+ # @example Generate table of issues for all tools.
13
+ # warnings_next_generation.tools_report
14
+ #
15
+ # @example Include only specific tools.
16
+ # warnings_next_generation.tools_report(include: ['java', 'android-lint'])
17
+ #
18
+ # @example Create inline comments instead of issue table.
19
+ # warnings_next_generation.tools_report(inline: true, baseline: 'path/to/workspace/repository')
20
+ #
21
+ # @see Kyaak/danger-warnings_next_generation
22
+ # @tags danger, warnings, jenkins, warnings-ng, warnings-next-generation, code-analysis, analysis
23
+ class DangerWarningsNextGeneration < Plugin
24
+ require "json"
25
+ require "open-uri"
26
+ require_relative "markdown_table"
27
+
28
+ EMOJI_BEETLE = ":beetle:"
29
+ EMOJI_X = ":x:"
30
+ EMOJI_CHECK_MARK = ":white_check_mark:"
31
+ EMOJI_STAR = ":star:"
32
+ TABLE_HEADER_TOOL = "**Tool**"
33
+ TABLE_HEADER_FILE = "**File**"
34
+ TABLE_HEADER_SEVERITY = "**Severity**"
35
+ TABLE_HEADER_DESCRIPTION = "**Description**"
36
+ WNG_OVERVIEW_TITLE = "### Warnings Next Generation Overview"
37
+
38
+ def initialize(dangerfile)
39
+ @target_files = []
40
+ super(dangerfile)
41
+ end
42
+
43
+ # Create all reports.
44
+ # Passes arguments to each report.
45
+ #
46
+ # @param args Configuration settings
47
+ # @return [void]
48
+ def report(*args)
49
+ options = args.first
50
+ overview_report(options)
51
+ tools_report(options)
52
+ end
53
+
54
+ # Create an overview report.
55
+ #
56
+ # @param args Configuration settings
57
+ # @return [void]
58
+ def overview_report(*args)
59
+ overview_table = WarningsNextGeneration::MarkdownTable.new
60
+ overview_table.overview_header(TABLE_HEADER_TOOL, EMOJI_BEETLE, EMOJI_X, EMOJI_CHECK_MARK)
61
+ options = args.first
62
+ tool_ids = include(options)
63
+ entry_count = 0
64
+
65
+ tools = tool_entries
66
+ tools.each do |tool|
67
+ name = tool["name"]
68
+ url = tool["latestUrl"]
69
+ id = tool["id"]
70
+
71
+ if use_include_option?(options)
72
+ next unless tool_ids.include?(id)
73
+ end
74
+ overview = overview_result(url)
75
+ entry_count += 1
76
+ overview_entry(overview_table, name, overview)
77
+ end
78
+
79
+ if use_include_option?(options)
80
+ return if entry_count.zero?
81
+ end
82
+ markdown("#{WNG_OVERVIEW_TITLE}\n\n#{overview_table.to_markdown}")
83
+ end
84
+
85
+ # Create tools reports.
86
+ #
87
+ # @param args Configuration settings
88
+ # @return [void]
89
+ def tools_report(*args)
90
+ options = args.first
91
+ tool_ids = include(options)
92
+
93
+ tools = tool_entries
94
+ tools.each do |tool|
95
+ name = tool["name"]
96
+ url = tool["latestUrl"]
97
+ id = tool["id"]
98
+
99
+ if use_include_option?(options)
100
+ next unless tool_ids.include?(id)
101
+ end
102
+ if inline?(options) && check_baseline(options)
103
+ inline_report(url, baseline(options))
104
+ else
105
+ tool_table(name, url)
106
+ end
107
+ end
108
+ end
109
+
110
+ private
111
+
112
+ def include(options)
113
+ options && !options[:include].nil? ? options[:include] : []
114
+ end
115
+
116
+ def inline?(options)
117
+ options && !options[:inline].nil? ? options[:inline] : false
118
+ end
119
+
120
+ def baseline(options)
121
+ base = options && !options[:baseline].nil? ? options[:baseline] : nil
122
+ if base && !base.chars.last.eql?("/")
123
+ base << "/"
124
+ end
125
+ base
126
+ end
127
+
128
+ def check_baseline(options)
129
+ raise "Please set 'baseline' for correct inline comments." unless baseline(options)
130
+
131
+ true
132
+ end
133
+
134
+ def use_include_option?(options)
135
+ !options.nil? && !options[:include].nil?
136
+ end
137
+
138
+ def tool_table(name, url)
139
+ details = details_result(url)
140
+ issues = details["issues"]
141
+
142
+ table = WarningsNextGeneration::MarkdownTable.new
143
+ table.detail_header(TABLE_HEADER_SEVERITY, TABLE_HEADER_FILE, TABLE_HEADER_DESCRIPTION)
144
+ issues.each do |issue|
145
+ severity = issue["severity"]
146
+ file = File.basename(issue["fileName"])
147
+ line = issue["lineStart"]
148
+ message = issue["message"]
149
+ category = issue["category"]
150
+ table.line(severity, "#{file}:#{line}", "[#{category}] #{message}")
151
+ end
152
+ content = +"### #{name}\n\n"
153
+ content << table.to_markdown
154
+ markdown(content)
155
+ end
156
+
157
+ def inline_report(url, baseline)
158
+ details = details_result(url)
159
+ issues = details["issues"]
160
+
161
+ issues.each do |issue|
162
+ severity = issue["severity"]
163
+ file = issue["fileName"].gsub(baseline, "")
164
+ line = issue["lineStart"]
165
+ message = issue["message"]
166
+ category = issue["category"]
167
+
168
+ next unless file_in_changeset?(file)
169
+
170
+ inline_message = "#{severity}\n[#{category}]\n#{message}"
171
+ message(inline_message, file: file, line: line)
172
+ end
173
+ end
174
+
175
+ def tool_entries
176
+ json = aggregation_result
177
+ json["tools"]
178
+ end
179
+
180
+ def overview_entry(table, name, overview)
181
+ fixed = overview["fixedSize"]
182
+ new = overview["newSize"]
183
+ total = overview["totalSize"]
184
+ table.line(name, num_star(total), new, fixed)
185
+ end
186
+
187
+ def file_in_changeset?(file)
188
+ target_files.include?(file)
189
+ end
190
+
191
+ def target_files
192
+ @target_files ||= git.modified_files + git.added_files
193
+ end
194
+
195
+ def num_star(number)
196
+ number.to_i.zero? ? EMOJI_STAR : number
197
+ end
198
+
199
+ def details_result(url)
200
+ content = OpenURI.open("#{url}/all/api/json").read
201
+ JSON.parse(content)
202
+ end
203
+
204
+ def overview_result(url)
205
+ content = OpenURI.open("#{url}/api/json").read
206
+ JSON.parse(content)
207
+ end
208
+
209
+ def aggregation_result
210
+ content = OpenURI.open("#{ENV['BUILD_URL']}/warnings-ng/api/json").read
211
+ JSON.parse(content)
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,9 @@
1
+ sonar.projectKey=Kyaak_danger-warnings_next_generation
2
+ sonar.sources=lib
3
+ sonar.tests=spec
4
+
5
+ sonar.ruby.file.suffixes=rb,ruby
6
+ sonar.ruby.coverage.reportPath=coverage/.resultset.json
7
+ sonar.ruby.coverage.framework=RSpec
8
+ sonar.ruby.rubocopConfig=.rubocop.yml
9
+ sonar.ruby.rubocop.reportPath=rubocop-result.json
@@ -0,0 +1,53 @@
1
+ {
2
+ "_class": "io.jenkins.plugins.analysis.core.restapi.AggregationApi",
3
+ "tools": [
4
+ {
5
+ "id": "maven",
6
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/maven",
7
+ "name": "Maven Warnings",
8
+ "threshold": 9
9
+ },
10
+ {
11
+ "id": "java",
12
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/java",
13
+ "name": "Java Warnings",
14
+ "threshold": 1
15
+ },
16
+ {
17
+ "id": "javadoc",
18
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/javadoc",
19
+ "name": "JavaDoc Warnings",
20
+ "threshold": 0
21
+ },
22
+ {
23
+ "id": "checkstyle",
24
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/checkstyle",
25
+ "name": "CheckStyle Warnings",
26
+ "threshold": 0
27
+ },
28
+ {
29
+ "id": "pmd",
30
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/pmd",
31
+ "name": "PMD Warnings",
32
+ "threshold": 671
33
+ },
34
+ {
35
+ "id": "spotbugs",
36
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/spotbugs",
37
+ "name": "SpotBugs Warnings",
38
+ "threshold": 0
39
+ },
40
+ {
41
+ "id": "cpd",
42
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/cpd",
43
+ "name": "CPD Warnings",
44
+ "threshold": 123
45
+ },
46
+ {
47
+ "id": "open-tasks",
48
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/open-tasks",
49
+ "name": "Open Tasks Scanner Warnings",
50
+ "threshold": 11
51
+ }
52
+ ]
53
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "_class": "io.jenkins.plugins.analysis.core.restapi.AggregationApi",
3
+ "tools": [
4
+ {
5
+ "id": "java",
6
+ "latestUrl": "http://localhost:8080/view/White%20Mountains/job/New%20-%20Pipeline%20-%20Simple%20Model/26/java",
7
+ "name": "Java Warnings",
8
+ "threshold": 1
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "_class": "io.jenkins.plugins.analysis.core.restapi.AggregationApi",
3
+ "tools": [
4
+ {
5
+ "id": "android-lint",
6
+ "latestUrl": "https://example-jenkins.de/job/danger/10/android-lint",
7
+ "name": "Android Lint Warnings",
8
+ "size": 4
9
+ },
10
+ {
11
+ "id": "pmd",
12
+ "latestUrl": "https://example-jenkins.de/job/danger/10/pmd",
13
+ "name": "PMD Warnings",
14
+ "size": 0
15
+ },
16
+ {
17
+ "id": "detekt",
18
+ "latestUrl": "https://example-jenkins.de/job/danger/10/detekt",
19
+ "name": "Detekt Warnings",
20
+ "size": 10
21
+ }
22
+ ]
23
+ }