fast_ci 1.0.6 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5f745c7e363bea209c4b7ff8c38211d731f7eb102622ea47637e7528a5d0c6e
4
- data.tar.gz: f16e6d81fe5c9f11fcacf4349827529aed342537ba8e67117e85bb76af462031
3
+ metadata.gz: c239c5fd08387acc13ba1f0f6d1117d90f351ce5bb9c4c047c20d2c04b704d69
4
+ data.tar.gz: 0d939f6a5effaa8264cb4adaaa498ff9971a2caa7dc7dfa586b2b7b1bbca1e12
5
5
  SHA512:
6
- metadata.gz: efe774ed9b56cf19e8ff394a12d4b0277301fa292c19107b2b73293c3f94dcbe13064af8f1a343564d52fc35be939bcafb6d7d08b491b429baad56737e035417
7
- data.tar.gz: 1f5024f3dec4cd1a38da38619b72975844a4343805eb5f0c223e9c5bcdd9357e6b94aab18962f1b3216bdf7f0b4541b1b8377d60069da075d7a9aceb75be24dc
6
+ metadata.gz: 553fab801f37d28df640090771fcba163ff98931191f6a7e15171e1644f87ea6d6221ce89b5fce53d8548fc04f83e3a79afafc1276d1da61327c3235bbdab751
7
+ data.tar.gz: 59206570323046b8c211742bfa606d2d18be638caaa28c1f34992ef1df4baba95d241cf81669ec2340c366d7e93b5318fc327978ede002d33eb470c2a15067e4
@@ -0,0 +1,23 @@
1
+ name: Release
2
+ concurrency:
3
+ group: production
4
+ cancel-in-progress: true
5
+ on:
6
+ push:
7
+ branches:
8
+ - release
9
+ jobs:
10
+ release:
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ id-token: write
14
+ contents: write
15
+ steps:
16
+ - name: Checkout code
17
+ uses: actions/checkout@v4
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ bundler-cache: true
22
+ ruby-version: 3.0.0
23
+ - uses: rubygems/release-gem@v1
data/Gemfile.lock CHANGED
@@ -11,19 +11,21 @@ GIT
11
11
  PATH
12
12
  remote: .
13
13
  specs:
14
- fast_ci (1.0.2)
14
+ fast_ci (1.0.8)
15
15
  async-websocket (<= 0.20.0)
16
16
  brakeman (>= 5.4.1)
17
- console (~> 1.21.0)
18
- minitest-rails (>= 5.1)
17
+ console (>= 1.10.0)
18
+ minitest-rails (>= 2.2.1)
19
+ rspec-core (>= 3.6.0)
19
20
  rubycritic (>= 4.1.0)
21
+ simplecov (>= 0.22.0)
20
22
 
21
23
  GEM
22
24
  remote: https://rubygems.org/
23
25
  specs:
24
- actionpack (7.1.4)
25
- actionview (= 7.1.4)
26
- activesupport (= 7.1.4)
26
+ actionpack (7.1.4.2)
27
+ actionview (= 7.1.4.2)
28
+ activesupport (= 7.1.4.2)
27
29
  nokogiri (>= 1.8.5)
28
30
  racc
29
31
  rack (>= 2.2.4)
@@ -31,13 +33,13 @@ GEM
31
33
  rack-test (>= 0.6.3)
32
34
  rails-dom-testing (~> 2.2)
33
35
  rails-html-sanitizer (~> 1.6)
34
- actionview (7.1.4)
35
- activesupport (= 7.1.4)
36
+ actionview (7.1.4.2)
37
+ activesupport (= 7.1.4.2)
36
38
  builder (~> 3.1)
37
39
  erubi (~> 1.11)
38
40
  rails-dom-testing (~> 2.2)
39
41
  rails-html-sanitizer (~> 1.6)
40
- activesupport (7.1.4)
42
+ activesupport (7.1.4.2)
41
43
  base64
42
44
  bigdecimal
43
45
  concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -72,7 +74,7 @@ GEM
72
74
  thread_safe (~> 0.3, >= 0.3.1)
73
75
  base64 (0.2.0)
74
76
  bigdecimal (3.1.8)
75
- brakeman (6.2.1)
77
+ brakeman (6.2.2)
76
78
  racc
77
79
  builder (3.3.0)
78
80
  childprocess (5.1.0)
@@ -115,7 +117,7 @@ GEM
115
117
  addressable (~> 2.8)
116
118
  childprocess (~> 5.0)
117
119
  logger (1.6.1)
118
- loofah (2.22.0)
120
+ loofah (2.23.0)
119
121
  crass (~> 1.0.2)
120
122
  nokogiri (>= 1.12.0)
121
123
  method_source (1.0.0)
@@ -150,7 +152,7 @@ GEM
150
152
  stringio
151
153
  public_suffix (6.0.1)
152
154
  racc (1.8.1)
153
- rack (3.1.7)
155
+ rack (3.1.8)
154
156
  rack-session (2.0.0)
155
157
  rack (>= 3.0.0)
156
158
  rack-test (2.1.0)
@@ -165,9 +167,9 @@ GEM
165
167
  rails-html-sanitizer (1.6.0)
166
168
  loofah (~> 2.21)
167
169
  nokogiri (~> 1.14)
168
- railties (7.1.4)
169
- actionpack (= 7.1.4)
170
- activesupport (= 7.1.4)
170
+ railties (7.1.4.2)
171
+ actionpack (= 7.1.4.2)
172
+ activesupport (= 7.1.4.2)
171
173
  irb
172
174
  rackup (>= 1.0.0)
173
175
  rake (>= 12.2)
@@ -183,7 +185,7 @@ GEM
183
185
  rainbow (>= 2.0, < 4.0)
184
186
  reline (0.5.10)
185
187
  io-console (~> 0.5)
186
- rexml (3.3.8)
188
+ rexml (3.3.9)
187
189
  rspec (3.11.0)
188
190
  rspec-core (~> 3.11.0)
189
191
  rspec-expectations (~> 3.11.0)
data/Rakefile CHANGED
@@ -5,8 +5,4 @@ require "rspec/core/rake_task"
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- require "rubocop/rake_task"
9
-
10
- RuboCop::RakeTask.new
11
-
12
- task default: %i[spec rubocop]
8
+ task default: %i[spec]
@@ -52,4 +52,7 @@ at_exit do
52
52
  end
53
53
 
54
54
  events << ['custom_started'.upcase, ['0', { key: 'bundler_audit' }]]
55
+
56
+ FastCI.start_report('bundler_audit')
57
+
55
58
  Bundler::Audit::CLI.start
@@ -6,6 +6,8 @@ require 'zlib'
6
6
  module FastCI
7
7
  module Brakeman
8
8
  def self.start
9
+ FastCI.start_report('brakeman')
10
+
9
11
  events = []
10
12
  events << ['brakeman_run'.upcase, {}]
11
13
  FastCI::Brakeman::Commandline.start(output_files: ['tmp/brakeman.json'], ensure_ignore_notes: false)
@@ -10,6 +10,8 @@ module FastCI
10
10
  module Cli
11
11
  class Application < ::RubyCritic::Cli::Application
12
12
  def execute
13
+ FastCI.start_report('ruby_critic')
14
+
13
15
  events = []
14
16
  events << ['ruby_critic_run'.upcase, {}]
15
17
  status = super
@@ -5,35 +5,70 @@ module FastCI
5
5
  base.instance_eval do
6
6
  unless (ENV['FAST_CI_SECRET_KEY'] || '').empty?
7
7
  def write_last_run(result)
8
- ::SimpleCov::LastRun.write(result:
9
- result.coverage_statistics.transform_values do |stats|
10
- round_coverage(stats.percent)
11
- end)
8
+ file_coverage = {}
12
9
 
13
- source = {}
10
+ result.files.each do |file|
11
+ missed_lines = file.missed_lines.map { |missed| missed.line_number }.sort
14
12
 
15
- result.source_files.each do |source_file|
16
- source[source_file.filename.gsub(root, '')] = source_file.src
13
+ file_coverage[file.filename.gsub(root, '.')] = {
14
+ coverage: file.coverage_statistics[:line].percent,
15
+ missed_line_count: missed_lines.count,
16
+ missed_lines: ::FastCI::SimpleCov::Reporting.join_consecutive_numbers(missed_lines),
17
+ covered_lines_count: file.covered_lines.map { |missed| missed.line_number }.count
18
+ }
17
19
  end
18
20
 
19
- result_json = {}
21
+ folder_coverage = {}
20
22
 
21
- result.as_json.each do |command, data|
22
- result_json[command] = data
23
- data['coverage'].clone.each do |src, file_data|
24
- result_json[command]['coverage'].delete(src)
23
+ file_coverage.each do |path, data|
24
+ parent_folders = File.dirname(path).split('/').drop(1)
25
25
 
26
- file_data['src'] = source[src.gsub(root, '')]
26
+ (0..(parent_folders.size - 1)).each do |path_index|
27
+ path = './' + parent_folders[0..path_index].join('/')
27
28
 
28
- result_json[command]['coverage'][src.gsub(root, '')] = file_data
29
+ folder_coverage[path] ||= {}
30
+
31
+ folder_coverage[path][:missed_line_count] =
32
+ (folder_coverage.dig(path, :missed_line_count) || 0) + data[:missed_line_count]
33
+ folder_coverage[path][:covered_line_count] =
34
+ (folder_coverage.dig(path, :covered_line_count) || 0) + data[:covered_lines_count]
29
35
  end
30
36
  end
31
37
 
32
- FastCI.report_simplecov(result_json.to_json)
38
+ folder_coverage.keys.each do |path|
39
+ folder_coverage[path][:coverage] =
40
+ (100 - folder_coverage[path][:missed_line_count] * 100.0 / (folder_coverage[path][:covered_line_count] + folder_coverage[path][:missed_line_count])).round(2)
41
+ end
42
+
43
+ results = {
44
+ file_coverage: file_coverage,
45
+ folder_coverage: folder_coverage,
46
+ coverage: result.coverage_statistics[:line].percent.round(2)
47
+ }
48
+
49
+ FastCI.report_simplecov(results.to_json)
33
50
  end
34
51
  end
35
52
  end
36
53
  end
54
+
55
+ def self.join_consecutive_numbers(arr)
56
+ result = []
57
+ consecutive_group = []
58
+
59
+ arr.each_with_index do |num, index|
60
+ if index == 0 || num == arr[index - 1] + 1
61
+ consecutive_group << num
62
+ else
63
+ result << (consecutive_group.size > 1 ? "#{consecutive_group.first}..#{consecutive_group.last}" : consecutive_group.first.to_s)
64
+ consecutive_group = [num]
65
+ end
66
+ end
67
+
68
+ result << (consecutive_group.size > 1 ? "#{consecutive_group.first}..#{consecutive_group.last}" : consecutive_group.first.to_s)
69
+
70
+ result.compact
71
+ end
37
72
  end
38
73
  end
39
74
  end
@@ -3,6 +3,8 @@ require_relative "simple_cov/reporting"
3
3
  module FastCI
4
4
  module SimpleCov
5
5
  if ENV['FSCI_REMOTE_TESTS'] == 'true' && ENV["SIMPLECOV_ACTIVE"] && ENV['DRYRUN'] != 'true'
6
+ FastCI.start_report('simplecov')
7
+
6
8
  ::SimpleCov.send(:at_exit) do
7
9
  ::SimpleCov.result.format!
8
10
 
@@ -61,8 +63,9 @@ module FastCI
61
63
  end
62
64
 
63
65
  ::SimpleCov::Result.prepend(Scf)
64
- else
65
- ::SimpleCov.send(:include, FastCI::SimpleCov::Reporting) unless ENV['DRYRUN'] == 'true'
66
+ elsif ENV['DRYRUN'] != 'true'
67
+ FastCI.start_report('simplecov')
68
+ ::SimpleCov.send(:include, FastCI::SimpleCov::Reporting)
66
69
  end
67
70
  end
68
71
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FastCI
4
- VERSION = "1.0.6"
4
+ VERSION = "1.0.8"
5
5
  end
data/lib/fast_ci.rb CHANGED
@@ -76,6 +76,11 @@ module FastCI
76
76
  res = Net::HTTP.post_form(uri, data)
77
77
  end
78
78
 
79
+ def start_report(run_key)
80
+ uri = URI("#{FastCI.configuration.fastci_api_url}/api/runs/notify_client_start")
81
+ res = Net::HTTP.post_form(uri, report_options(run_key, nil))
82
+ end
83
+
79
84
  def send_events(data)
80
85
  reset_webmock = false
81
86
  if defined?(WebMock)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_ci
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nesha Zoric
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-17 00:00:00.000000000 Z
11
+ date: 2024-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: console
@@ -133,6 +133,7 @@ extensions: []
133
133
  extra_rdoc_files: []
134
134
  files:
135
135
  - ".github/workflows/main.yml"
136
+ - ".github/workflows/release.yml"
136
137
  - ".gitignore"
137
138
  - ".rspec"
138
139
  - ".rubocop.yml"
@@ -187,8 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
188
  - !ruby/object:Gem::Version
188
189
  version: '0'
189
190
  requirements: []
190
- rubyforge_project:
191
- rubygems_version: 2.7.7
191
+ rubygems_version: 3.2.3
192
192
  signing_key:
193
193
  specification_version: 4
194
194
  summary: Ruby wrapper for creating FastCI integrations