codemonitor 0.4.0 → 0.6.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -4
- data/engines/custom/extractor.rb +25 -1
- data/engines/jest-json-summary/extractor.rb +64 -0
- data/engines/npm/extractor.rb +53 -11
- data/engines/scc/extractor.rb +1 -1
- data/engines/simplecov-json-coverage/extractor.rb +56 -0
- data/exe/codemonitor +5 -1
- data/lib/codemonitor/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f8376539752d3392f7d8488ba82d5006143456cb0d42293b5c44a8aee5973185
|
|
4
|
+
data.tar.gz: 703466cb760fa112f0d07ccf1e8c0c891002532ee17d616730876594b7f118a1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7560f2f13f6cd781e24f93640adadb8cba58cca68d66b83e354ac4fac8da7f93b03b7672b905769790fbf2843a36c434c3ec385fc4000a08f79d49fb03e1dbda
|
|
7
|
+
data.tar.gz: b316ad47b929584ee345f37210362c16b720b204ad016c9d561fd7c7b645a5c891e85c8b2e98019e60a4f3e53cc0d827ba498f1adb8ec8c641dcc0dcccb25437
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
codemonitor (0.
|
|
4
|
+
codemonitor (0.6.0)
|
|
5
5
|
dogapi (~> 1.45)
|
|
6
6
|
octokit (~> 4.0)
|
|
7
7
|
|
|
@@ -15,7 +15,7 @@ GEM
|
|
|
15
15
|
diff-lcs (1.3)
|
|
16
16
|
dogapi (1.45.0)
|
|
17
17
|
multi_json
|
|
18
|
-
faraday (1.
|
|
18
|
+
faraday (1.10.0)
|
|
19
19
|
faraday-em_http (~> 1.0)
|
|
20
20
|
faraday-em_synchrony (~> 1.0)
|
|
21
21
|
faraday-excon (~> 1.1)
|
|
@@ -50,7 +50,7 @@ GEM
|
|
|
50
50
|
pry (0.13.1)
|
|
51
51
|
coderay (~> 1.1)
|
|
52
52
|
method_source (~> 1.0)
|
|
53
|
-
public_suffix (4.0.
|
|
53
|
+
public_suffix (4.0.7)
|
|
54
54
|
rainbow (3.0.0)
|
|
55
55
|
rake (13.0.3)
|
|
56
56
|
regexp_parser (2.1.1)
|
|
@@ -98,4 +98,4 @@ DEPENDENCIES
|
|
|
98
98
|
rubocop (~> 0.80)
|
|
99
99
|
|
|
100
100
|
BUNDLED WITH
|
|
101
|
-
2.
|
|
101
|
+
2.3.12
|
data/engines/custom/extractor.rb
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
module Engines
|
|
4
4
|
module Custom
|
|
5
5
|
class Extractor
|
|
6
|
+
def initialize
|
|
7
|
+
@filenames = ENV.fetch('CODEMONITOR_CUSTOMS', nil)
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
def call(provider)
|
|
7
11
|
provider.emit(metrics)
|
|
8
12
|
end
|
|
@@ -14,7 +18,27 @@ module Engines
|
|
|
14
18
|
private
|
|
15
19
|
|
|
16
20
|
def custom_files
|
|
17
|
-
Dir.glob('./.codemonitor/*.rb')
|
|
21
|
+
return Dir.glob('./.codemonitor/*.rb') if @filenames.nil?
|
|
22
|
+
|
|
23
|
+
raise 'Forbidden access to parent folder' unless @filenames.match(/\.\./).nil?
|
|
24
|
+
|
|
25
|
+
includes = @filenames.split(',').reject do |filename|
|
|
26
|
+
filename.start_with?('-')
|
|
27
|
+
end.map do |filename|
|
|
28
|
+
"./.codemonitor/#{filename}.rb"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
excludes = @filenames.split(',').filter do |filename|
|
|
32
|
+
filename.start_with?('-')
|
|
33
|
+
end.map do |filename|
|
|
34
|
+
"./.codemonitor/#{filename.gsub(/^-/, '')}.rb"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
raise 'Mixed included and excluded custom paths is not allowed' if includes.size > 0 && excludes.size > 0
|
|
38
|
+
|
|
39
|
+
return Dir.glob(includes) if includes.size > 0
|
|
40
|
+
|
|
41
|
+
Dir.glob('./.codemonitor/*.rb') - Dir.glob(excludes)
|
|
18
42
|
end
|
|
19
43
|
|
|
20
44
|
def metrics
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module Engines
|
|
6
|
+
module JestJsonSummary
|
|
7
|
+
class Extractor
|
|
8
|
+
METRICS = %i[].freeze
|
|
9
|
+
|
|
10
|
+
def initialize; end
|
|
11
|
+
|
|
12
|
+
def call(provider)
|
|
13
|
+
metrics = METRICS.map do |metric|
|
|
14
|
+
[metric, send(metric)]
|
|
15
|
+
end.to_h
|
|
16
|
+
|
|
17
|
+
metrics
|
|
18
|
+
.merge!(total_lines)
|
|
19
|
+
.merge!(total_statements)
|
|
20
|
+
.merge!(total_functions)
|
|
21
|
+
.merge!(total_branches)
|
|
22
|
+
.merge!(total_branches_true)
|
|
23
|
+
|
|
24
|
+
provider.emit(metrics)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def requirements?
|
|
28
|
+
File.exist?('jest_json_summary.output.json')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def json_summary
|
|
34
|
+
@json_summary ||= JSON.parse(File.read('jest_json_summary.output.json'))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def total_lines
|
|
38
|
+
flatten('lines')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def total_statements
|
|
42
|
+
flatten('statements')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def total_functions
|
|
46
|
+
flatten('functions')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def total_branches
|
|
50
|
+
flatten('branches')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def total_branches_true
|
|
54
|
+
flatten('branchesTrue', 'branches_true')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def flatten(member, rename = nil)
|
|
58
|
+
json_summary['total'][member].map do |key, value|
|
|
59
|
+
["jest_json_summary_#{rename || member}_#{key}", value.to_f]
|
|
60
|
+
end.to_h
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/engines/npm/extractor.rb
CHANGED
|
@@ -8,13 +8,21 @@ module Engines
|
|
|
8
8
|
module Npm
|
|
9
9
|
class Extractor
|
|
10
10
|
METRICS = %i[
|
|
11
|
-
|
|
11
|
+
npm_number_of_prod_dependencies
|
|
12
12
|
npm_number_of_dev_dependencies
|
|
13
13
|
npm_number_of_scripts
|
|
14
|
-
|
|
14
|
+
npm_number_of_computed_prod_dependencies
|
|
15
|
+
npm_number_of_computed_dev_dependencies
|
|
16
|
+
npm_number_of_computed_optional_dependencies
|
|
17
|
+
npm_number_of_computed_peer_dependencies
|
|
18
|
+
npm_number_of_computed_peer_optional_dependencies
|
|
19
|
+
npm_number_of_computed_total_dependencies
|
|
20
|
+
npm_number_of_vulnerable_dependencies_info
|
|
15
21
|
npm_number_of_vulnerable_dependencies_low
|
|
16
22
|
npm_number_of_vulnerable_dependencies_moderate
|
|
17
23
|
npm_number_of_vulnerable_dependencies_high
|
|
24
|
+
npm_number_of_vulnerable_dependencies_critical
|
|
25
|
+
npm_number_of_vulnerable_dependencies_total
|
|
18
26
|
].freeze
|
|
19
27
|
|
|
20
28
|
def call(provider)
|
|
@@ -26,25 +34,25 @@ module Engines
|
|
|
26
34
|
end
|
|
27
35
|
|
|
28
36
|
def requirements?
|
|
29
|
-
File.exist?('package.json')
|
|
37
|
+
File.exist?('package.json') && File.exist?('package-lock.json')
|
|
30
38
|
end
|
|
31
39
|
|
|
32
40
|
private
|
|
33
41
|
|
|
34
|
-
def
|
|
35
|
-
npm_package['dependencies']
|
|
42
|
+
def npm_number_of_prod_dependencies
|
|
43
|
+
npm_package['dependencies']&.keys&.length
|
|
36
44
|
end
|
|
37
45
|
|
|
38
46
|
def npm_number_of_dev_dependencies
|
|
39
|
-
npm_package['devDependencies']
|
|
47
|
+
npm_package['devDependencies']&.keys&.length
|
|
40
48
|
end
|
|
41
49
|
|
|
42
50
|
def npm_number_of_scripts
|
|
43
51
|
npm_package['scripts'].keys.length
|
|
44
52
|
end
|
|
45
53
|
|
|
46
|
-
def
|
|
47
|
-
|
|
54
|
+
def npm_number_of_vulnerable_dependencies_info
|
|
55
|
+
npm_audit_by_severity['info']
|
|
48
56
|
end
|
|
49
57
|
|
|
50
58
|
def npm_number_of_vulnerable_dependencies_low
|
|
@@ -59,6 +67,38 @@ module Engines
|
|
|
59
67
|
npm_audit_by_severity['high']
|
|
60
68
|
end
|
|
61
69
|
|
|
70
|
+
def npm_number_of_vulnerable_dependencies_critical
|
|
71
|
+
npm_audit_by_severity['critical']
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def npm_number_of_vulnerable_dependencies_total
|
|
75
|
+
npm_audit_by_severity['total']
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def npm_number_of_computed_prod_dependencies
|
|
79
|
+
npm_audit_by_dependencies['prod']
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def npm_number_of_computed_dev_dependencies
|
|
83
|
+
npm_audit_by_dependencies['dev']
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def npm_number_of_computed_optional_dependencies
|
|
87
|
+
npm_audit_by_dependencies['optional']
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def npm_number_of_computed_peer_dependencies
|
|
91
|
+
npm_audit_by_dependencies['peer']
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def npm_number_of_computed_peer_optional_dependencies
|
|
95
|
+
npm_audit_by_dependencies['peerOptional']
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def npm_number_of_computed_total_dependencies
|
|
99
|
+
npm_audit_by_dependencies['total']
|
|
100
|
+
end
|
|
101
|
+
|
|
62
102
|
def npm_package
|
|
63
103
|
@npm_package ||= JSON.parse(File.read('package.json'))
|
|
64
104
|
end
|
|
@@ -67,10 +107,12 @@ module Engines
|
|
|
67
107
|
@npm_audit ||= JSON.parse(Shell.run('npm audit --json'))
|
|
68
108
|
end
|
|
69
109
|
|
|
110
|
+
def npm_audit_by_dependencies
|
|
111
|
+
npm_audit['metadata']['dependencies']
|
|
112
|
+
end
|
|
113
|
+
|
|
70
114
|
def npm_audit_by_severity
|
|
71
|
-
npm_audit['
|
|
72
|
-
.map { |_key, value| value['severity'] }
|
|
73
|
-
.each_with_object(Hash.new(0)) { |e, total| total[e] += 1; }
|
|
115
|
+
npm_audit['metadata']['vulnerabilities']
|
|
74
116
|
end
|
|
75
117
|
end
|
|
76
118
|
end
|
data/engines/scc/extractor.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Engines
|
|
|
6
6
|
module Scc
|
|
7
7
|
class Extractor
|
|
8
8
|
METRICS = %i[].freeze
|
|
9
|
-
FIELDS = %w[Bytes Lines Code Comment Blank Complexity Count WeightedComplexity]
|
|
9
|
+
FIELDS = %w[Bytes Lines Code Comment Blank Complexity Count WeightedComplexity].freeze
|
|
10
10
|
|
|
11
11
|
def initialize; end
|
|
12
12
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module Engines
|
|
6
|
+
module SimpleCovJsonCoverage
|
|
7
|
+
class Extractor
|
|
8
|
+
METRICS = %i[
|
|
9
|
+
simplecov_json_coverage_metrics_covered_percent
|
|
10
|
+
simplecov_json_coverage_metrics_covered_strength
|
|
11
|
+
simplecov_json_coverage_metrics_covered_lines
|
|
12
|
+
simplecov_json_coverage_metrics_total_lines
|
|
13
|
+
].freeze
|
|
14
|
+
|
|
15
|
+
def initialize; end
|
|
16
|
+
|
|
17
|
+
def call(provider)
|
|
18
|
+
metrics = METRICS.map do |metric|
|
|
19
|
+
[metric, send(metric)]
|
|
20
|
+
end.to_h
|
|
21
|
+
|
|
22
|
+
provider.emit(metrics)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def requirements?
|
|
26
|
+
File.exist?('simplecov_json_coverage.output.json')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def json_summary
|
|
32
|
+
@json_summary ||= JSON.parse(File.read('simplecov_json_coverage.output.json'))
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def metrics
|
|
36
|
+
@metrics ||= json_summary['metrics']
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def simplecov_json_coverage_metrics_covered_percent
|
|
40
|
+
metrics['covered_percent']
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def simplecov_json_coverage_metrics_covered_strength
|
|
44
|
+
metrics['covered_strength']
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def simplecov_json_coverage_metrics_covered_lines
|
|
48
|
+
metrics['covered_lines']
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def simplecov_json_coverage_metrics_total_lines
|
|
52
|
+
metrics['total_lines']
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
data/exe/codemonitor
CHANGED
|
@@ -15,6 +15,8 @@ require_relative '../engines/semgrep/extractor'
|
|
|
15
15
|
require_relative '../engines/sorbet/extractor'
|
|
16
16
|
require_relative '../engines/scc/extractor'
|
|
17
17
|
require_relative '../engines/custom/extractor'
|
|
18
|
+
require_relative '../engines/jest-json-summary/extractor'
|
|
19
|
+
require_relative '../engines/simplecov-json-coverage/extractor'
|
|
18
20
|
|
|
19
21
|
PROVIDERS = {
|
|
20
22
|
console: Providers::Console,
|
|
@@ -32,7 +34,9 @@ EXTRACTORS = {
|
|
|
32
34
|
semgrep: Engines::Semgrep::Extractor,
|
|
33
35
|
sorbet: Engines::Sorbet::Extractor,
|
|
34
36
|
scc: Engines::Scc::Extractor,
|
|
35
|
-
custom: Engines::Custom::Extractor
|
|
37
|
+
custom: Engines::Custom::Extractor,
|
|
38
|
+
jest_json_summary: Engines::JestJsonSummary::Extractor,
|
|
39
|
+
simplecov_json_coverage: Engines::SimpleCovJsonCoverage::Extractor
|
|
36
40
|
}.freeze
|
|
37
41
|
|
|
38
42
|
config_provider = ENV['CODEMONITOR_PROVIDER'] || 'console'
|
data/lib/codemonitor/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: codemonitor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ferran Basora
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-06-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dogapi
|
|
@@ -134,11 +134,13 @@ files:
|
|
|
134
134
|
- engines/eslint/extractor.rb
|
|
135
135
|
- engines/git/extractor.rb
|
|
136
136
|
- engines/github/extractor.rb
|
|
137
|
+
- engines/jest-json-summary/extractor.rb
|
|
137
138
|
- engines/npm/extractor.rb
|
|
138
139
|
- engines/packwerk/extractor.rb
|
|
139
140
|
- engines/rubocop/extractor.rb
|
|
140
141
|
- engines/scc/extractor.rb
|
|
141
142
|
- engines/semgrep/extractor.rb
|
|
143
|
+
- engines/simplecov-json-coverage/extractor.rb
|
|
142
144
|
- engines/sorbet/extractor.rb
|
|
143
145
|
- exe/codemonitor
|
|
144
146
|
- lib/codemonitor/version.rb
|
|
@@ -167,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
167
169
|
- !ruby/object:Gem::Version
|
|
168
170
|
version: '0'
|
|
169
171
|
requirements: []
|
|
170
|
-
rubygems_version: 3.
|
|
172
|
+
rubygems_version: 3.3.5
|
|
171
173
|
signing_key:
|
|
172
174
|
specification_version: 4
|
|
173
175
|
summary: Collect many metrics your code is generating
|