still_active 3.0.0.rc4 → 3.0.0.rc5

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/lib/helpers/activity_helper.rb +3 -3
  4. data/lib/helpers/alternatives_helper.rb +1 -1
  5. data/lib/helpers/ansi_helper.rb +1 -1
  6. data/lib/helpers/bot_context.rb +7 -7
  7. data/lib/helpers/bundler_helper.rb +1 -2
  8. data/lib/helpers/catalog_index.rb +1 -1
  9. data/lib/helpers/constraint_helper.rb +6 -6
  10. data/lib/helpers/cvss_helper.rb +2 -2
  11. data/lib/helpers/cyclonedx_helper.rb +14 -14
  12. data/lib/helpers/diff_markdown_helper.rb +4 -4
  13. data/lib/helpers/dotnet_helper.rb +4 -4
  14. data/lib/helpers/endoflife_helper.rb +3 -3
  15. data/lib/helpers/http_helper.rb +31 -19
  16. data/lib/helpers/lockfile_dependency_parser.rb +2 -2
  17. data/lib/helpers/markdown_escape.rb +1 -1
  18. data/lib/helpers/markdown_helper.rb +7 -7
  19. data/lib/helpers/ruby_advisory_db.rb +1 -1
  20. data/lib/helpers/ruby_helper.rb +3 -3
  21. data/lib/helpers/runtime_ceiling_helper.rb +2 -2
  22. data/lib/helpers/sarif_helper.rb +34 -34
  23. data/lib/helpers/status_helper.rb +1 -1
  24. data/lib/helpers/summary_helper.rb +1 -1
  25. data/lib/helpers/terminal_helper.rb +8 -8
  26. data/lib/helpers/vulnerability_helper.rb +1 -1
  27. data/lib/still_active/artifactory_client.rb +47 -18
  28. data/lib/still_active/cli.rb +38 -38
  29. data/lib/still_active/compact_index_client.rb +117 -0
  30. data/lib/still_active/config.rb +1 -1
  31. data/lib/still_active/config_file.rb +4 -4
  32. data/lib/still_active/deps_dev_client.rb +7 -7
  33. data/lib/still_active/diff.rb +12 -12
  34. data/lib/still_active/ecosystem_lens.rb +5 -5
  35. data/lib/still_active/ecosystems_client.rb +7 -7
  36. data/lib/still_active/forgejo_client.rb +3 -3
  37. data/lib/still_active/github_client.rb +6 -6
  38. data/lib/still_active/gitlab_client.rb +3 -3
  39. data/lib/still_active/options.rb +4 -4
  40. data/lib/still_active/osv_client.rb +8 -8
  41. data/lib/still_active/poison_security_correlator.rb +3 -3
  42. data/lib/still_active/pypi_client.rb +2 -2
  43. data/lib/still_active/repository.rb +4 -4
  44. data/lib/still_active/sarif/rules.rb +20 -20
  45. data/lib/still_active/sbom_reader.rb +8 -8
  46. data/lib/still_active/sbom_workflow.rb +7 -7
  47. data/lib/still_active/source_credentials.rb +39 -0
  48. data/lib/still_active/version.rb +1 -1
  49. data/lib/still_active/workflow.rb +57 -31
  50. data/still_active.gemspec +16 -20
  51. metadata +5 -115
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "artifactory_client"
4
+ require_relative "compact_index_client"
5
+ require_relative "source_credentials"
4
6
  require_relative "ceiling_reconciler"
5
7
  require_relative "deps_dev_client"
6
8
  require_relative "osv_client"
@@ -46,8 +48,8 @@ module StillActive
46
48
  ruby_range =
47
49
  begin
48
50
  RubyHelper.supported_ruby_range
49
- rescue StandardError => e
50
- $stderr.puts("warning: Ruby support window lookup failed: #{e.class} (#{e.message}); skipping language-ceiling checks")
51
+ rescue => e
52
+ warn("warning: Ruby support window lookup failed: #{e.class} (#{e.message}); skipping language-ceiling checks")
51
53
  nil
52
54
  end
53
55
  # Resolve the GitHub token once here, single-fibered, before the fan-out:
@@ -79,14 +81,14 @@ module StillActive
79
81
  advisory_db: advisory_db,
80
82
  catalog: catalog,
81
83
  constraint_cache: constraint_cache,
82
- ruby_range: ruby_range,
84
+ ruby_range: ruby_range
83
85
  )
84
86
  rescue Octokit::TooManyRequests
85
87
  $stderr.print("\r\e[K") if on_progress
86
- $stderr.puts("rate limited checking #{gem[:name]}: set GITHUB_TOKEN to increase your limit")
87
- rescue StandardError => e
88
+ warn("rate limited checking #{gem[:name]}: set GITHUB_TOKEN to increase your limit")
89
+ rescue => e
88
90
  $stderr.print("\r\e[K") if on_progress
89
- $stderr.puts("error occurred for #{gem[:name]}: #{e.class}\n\t#{e.message}")
91
+ warn("error occurred for #{gem[:name]}: #{e.class}\n\t#{e.message}")
90
92
  ensure
91
93
  completed += 1
92
94
  on_progress&.call(completed, total)
@@ -115,7 +117,7 @@ module StillActive
115
117
  private
116
118
 
117
119
  def gem_info(gem_name:, result_object:, gem_version: nil, source_type: :rubygems, source_uri: nil, direct: true, dependency_path: nil, advisory_db: nil, catalog: nil, constraint_cache: {}, ruby_range: nil)
118
- result_object[gem_name] = { source_type: source_type, direct: direct }
120
+ result_object[gem_name] = {source_type: source_type, direct: direct}
119
121
  result_object[gem_name][:dependency_path] = dependency_path if dependency_path
120
122
  result_object[gem_name][:version_used] = gem_version if gem_version
121
123
 
@@ -129,7 +131,7 @@ module StillActive
129
131
  result_object: result_object,
130
132
  source_uri: source_uri,
131
133
  advisory_db: advisory_db,
132
- ruby_range: ruby_range,
134
+ ruby_range: ruby_range
133
135
  )
134
136
  end
135
137
 
@@ -148,19 +150,19 @@ module StillActive
148
150
  signals = repo_signals(
149
151
  source: repo_info[:source],
150
152
  repository_owner: repo_info[:owner],
151
- repository_name: repo_info[:name],
153
+ repository_name: repo_info[:name]
152
154
  )
153
155
  commit_date = signals[:last_commit_date]
154
156
  archived = signals[:archived]
155
157
  last_release = VersionHelper.find_version(versions: vs, pre_release: false)
156
158
  last_pre_release = VersionHelper.upcoming_pre_release(
157
159
  pre_release: VersionHelper.find_version(versions: vs, pre_release: true),
158
- release: last_release,
160
+ release: last_release
159
161
  )
160
162
  deps_dev = fetch_deps_dev_info(
161
163
  gem_name: gem_name,
162
164
  version: gem_version || VersionHelper.gem_version(version_hash: last_release),
163
- advisory_db: advisory_db,
165
+ advisory_db: advisory_db
164
166
  )
165
167
  result_object[gem_name].merge!({
166
168
  latest_version: VersionHelper.gem_version(version_hash: last_release),
@@ -172,10 +174,14 @@ module StillActive
172
174
  repository_url: repo_info[:url],
173
175
  last_commit_date: commit_date,
174
176
  archived: archived,
175
- **deps_dev,
177
+ **deps_dev
176
178
  })
177
179
 
178
- unless vs.empty?
180
+ # Only a gem that actually lives on public rubygems.org gets a rubygems.org
181
+ # page link. For a private source, rubygems.org/gems/<name> is a public
182
+ # name collision (for sidekiq-pro, the 0.0.3 squat-warning decoy), not the
183
+ # gem the user resolves -- the same #43 substitution the repo-URL guard blocks.
184
+ unless vs.empty? || unqueryable_private_source?(source_uri)
179
185
  result_object[gem_name][:ruby_gems_url] = "https://rubygems.org/gems/#{gem_name}"
180
186
  end
181
187
 
@@ -184,7 +190,7 @@ module StillActive
184
190
  source: repo_info[:source],
185
191
  repository_owner: repo_info[:owner],
186
192
  repository_name: repo_info[:name],
187
- version: VersionHelper.gem_version(version_hash: last_release),
193
+ version: VersionHelper.gem_version(version_hash: last_release)
188
194
  )
189
195
  end
190
196
 
@@ -194,7 +200,7 @@ module StillActive
194
200
  up_to_date: VersionHelper.up_to_date(
195
201
  version_used: version_used,
196
202
  latest_version: last_release,
197
- latest_pre_release_version: last_pre_release,
203
+ latest_pre_release_version: last_pre_release
198
204
  ),
199
205
 
200
206
  version_used_release_date: VersionHelper.release_date(version_hash: version_used),
@@ -202,8 +208,8 @@ module StillActive
202
208
  license: VersionHelper.license(version_hash: version_used),
203
209
  libyear: LibyearHelper.gem_libyear(
204
210
  version_used_release_date: VersionHelper.release_date(version_hash: version_used),
205
- latest_version_release_date: VersionHelper.release_date(version_hash: last_release),
206
- ),
211
+ latest_version_release_date: VersionHelper.release_date(version_hash: last_release)
212
+ )
207
213
  })
208
214
  end
209
215
 
@@ -218,7 +224,7 @@ module StillActive
218
224
  used_ruby_requirement: canonical_ruby_requirement(vs, version_used),
219
225
  latest_ruby_requirement: canonical_ruby_requirement(vs, last_release),
220
226
  pinned: !version_used.nil?,
221
- ruby_range: ruby_range,
227
+ ruby_range: ruby_range
222
228
  )
223
229
  end
224
230
  end
@@ -297,7 +303,7 @@ module StillActive
297
303
  repository_url: repo_info[:url],
298
304
  last_commit_date: signals[:last_commit_date],
299
305
  archived: signals[:archived],
300
- **deps_dev,
306
+ **deps_dev
301
307
  })
302
308
  end
303
309
 
@@ -311,7 +317,7 @@ module StillActive
311
317
 
312
318
  leads = AlternativesHelper.leads_for(gem_name: gem_name, index: catalog)
313
319
  result_object[gem_name][:alternatives] = leads unless leads.empty?
314
- rescue StandardError
320
+ rescue
315
321
  nil # cosmetic best-effort: lead-fetching must never break the core audit
316
322
  end
317
323
 
@@ -373,7 +379,7 @@ module StillActive
373
379
  # drop the advisory and read a known-vulnerable gem as clean, so an
374
380
  # un-enriched key still contributes a minimal advisory (mirrors EcosystemLens;
375
381
  # ruby-advisory-db then fills the score on merge when it also carries it).
376
- deps_dev_vulns = advisory_keys.map { |id| DepsDevClient.advisory_detail(advisory_id: id) || { id: id, source: "deps.dev" } }
382
+ deps_dev_vulns = advisory_keys.map { |id| DepsDevClient.advisory_detail(advisory_id: id) || {id: id, source: "deps.dev"} }
377
383
  radb_vulns = RubyAdvisoryDb.advisories_for(database: advisory_db, gem_name: gem_name, version: version)
378
384
  vulnerabilities = VulnerabilityHelper.merge_advisories(deps_dev: deps_dev_vulns, ruby_advisory_db: radb_vulns)
379
385
  # Enrich with OSV: a real GHSA severity label (deps.dev can't score a CVSS-4-only
@@ -384,7 +390,7 @@ module StillActive
384
390
  scorecard_score: scorecard&.dig(:score),
385
391
  scorecard_maintained: scorecard&.dig(:maintained),
386
392
  vulnerability_count: vulnerabilities.length,
387
- vulnerabilities: vulnerabilities,
393
+ vulnerabilities: vulnerabilities
388
394
  }
389
395
  end
390
396
 
@@ -394,8 +400,7 @@ module StillActive
394
400
  elsif ArtifactoryClient.artifactory_uri?(source_uri)
395
401
  ArtifactoryClient.versions(gem_name: gem_name, source_uri: source_uri)
396
402
  elsif unqueryable_private_source?(source_uri)
397
- warn_unqueryable_private_source(gem_name: gem_name, source_uri: source_uri)
398
- []
403
+ private_source_versions(gem_name: gem_name, source_uri: source_uri)
399
404
  else
400
405
  Gems.versions(gem_name)
401
406
  end
@@ -409,7 +414,7 @@ module StillActive
409
414
  # best-effort feature must not be able to degrade an unrelated gem's core data:
410
415
  # degrade to "no versions known" here, exactly like Gems::NotFound.
411
416
  rescue Gems::GemError, *HttpHelper::TRANSPORT_ERRORS => e
412
- $stderr.puts("warning: rubygems.org versions lookup failed for #{gem_name}: #{e.class} (#{e.message})")
417
+ warn("warning: rubygems.org versions lookup failed for #{gem_name}: #{e.class} (#{e.message})")
413
418
  []
414
419
  end
415
420
 
@@ -437,11 +442,32 @@ module StillActive
437
442
  false
438
443
  end
439
444
 
445
+ # Any Bundler-compatible private host (Contribsys, Gemstash, Gemfury, a private
446
+ # mirror) serves the RubyGems compact index, since that is how `bundle install`
447
+ # resolves from it. So try that agnostic rail before declaring the source
448
+ # unqueryable: it covers the whole class with no per-host client, and falls
449
+ # through to the same warning when a host does not serve it. Auth is Bundler's
450
+ # own host-keyed credential only; still_active's ambient --artifactory-token is
451
+ # never sent to a lockfile-derived host this way (that stays ArtifactoryClient's,
452
+ # behind its host allowlist). The repo-signal path is untouched, so #43 still
453
+ # blocks a public name-collision's repo data from standing in for the private gem.
454
+ def private_source_versions(gem_name:, source_uri:)
455
+ versions = CompactIndexClient.versions(
456
+ gem_name: gem_name,
457
+ source_uri: source_uri,
458
+ headers: SourceCredentials.headers_for(source_uri)
459
+ )
460
+ return versions unless versions.empty?
461
+
462
+ warn_unqueryable_private_source(gem_name: gem_name, source_uri: source_uri)
463
+ []
464
+ end
465
+
440
466
  def warn_unqueryable_private_source(gem_name:, source_uri:)
441
467
  host = URI(source_uri).host
442
- $stderr.puts(
468
+ warn(
443
469
  "warning: #{gem_name} resolves from a private source (#{host}) still_active cannot query; " \
444
- "reporting no version/latest/libyear data for it rather than substituting public rubygems.org data",
470
+ "reporting no version/latest/libyear data for it rather than substituting public rubygems.org data"
445
471
  )
446
472
  end
447
473
 
@@ -450,7 +476,7 @@ module StillActive
450
476
  namespace_path = base.path
451
477
  path = "#{namespace_path}/api/v1/gems/#{CGI.escape(gem_name)}/versions.json"
452
478
  token = StillActive.config.github_oauth_token
453
- headers = token ? { "Authorization" => "Bearer #{token}" } : {}
479
+ headers = token ? {"Authorization" => "Bearer #{token}"} : {}
454
480
  HttpHelper.get_json(base, path, headers: headers) || []
455
481
  end
456
482
 
@@ -471,7 +497,7 @@ module StillActive
471
497
  # deps.dev scorecards index github.com and gitlab.com only. A Forgejo/Codeberg
472
498
  # repo has no deps.dev project, so leave its project_id nil rather than minting
473
499
  # a bogus github.com/owner/name that would fetch the wrong (or no) scorecard.
474
- DEPS_DEV_HOST_BY_SOURCE = { github: "github.com", gitlab: "gitlab.com" }.freeze
500
+ DEPS_DEV_HOST_BY_SOURCE = {github: "github.com", gitlab: "gitlab.com"}.freeze
475
501
 
476
502
  def deps_dev_project_id(repo)
477
503
  host = DEPS_DEV_HOST_BY_SOURCE[repo[:source]]
@@ -505,7 +531,7 @@ module StillActive
505
531
 
506
532
  [
507
533
  info.metadata&.dig("source_code_uri"),
508
- info.homepage,
534
+ info.homepage
509
535
  ].compact.uniq
510
536
  end
511
537
 
@@ -521,7 +547,7 @@ module StillActive
521
547
 
522
548
  [
523
549
  info["homepage_uri"],
524
- info["source_code_uri"],
550
+ info["source_code_uri"]
525
551
  ].compact.uniq
526
552
  rescue Gems::NotFound
527
553
  []
data/still_active.gemspec CHANGED
@@ -3,14 +3,14 @@
3
3
  require_relative "lib/still_active/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "still_active"
7
- spec.version = StillActive::VERSION
8
- spec.authors = ["Sean Floyd"]
9
- spec.email = ["contact@seanfloyd.dev"]
6
+ spec.name = "still_active"
7
+ spec.version = StillActive::VERSION
8
+ spec.authors = ["Sean Floyd"]
9
+ spec.email = ["contact@seanfloyd.dev"]
10
10
 
11
- spec.summary = "Audit your dependencies for maintenance health, abandonment, and below-the-fix vulnerabilities. " \
11
+ spec.summary = "Audit your dependencies for maintenance health, abandonment, and below-the-fix vulnerabilities. " \
12
12
  "Ruby gems natively; npm, PyPI, Cargo, Go, Maven, and NuGet via a CycloneDX SBOM."
13
- spec.description = "Analyses your Gemfile.lock for dependency health across the full transitive graph: " \
13
+ spec.description = "Analyses your Gemfile.lock for dependency health across the full transitive graph: " \
14
14
  "whether each gem is actively maintained (last activity on GitHub, GitLab, or Codeberg/Forgejo, plus " \
15
15
  "release recency), outdated versions, archived repos, OpenSSF Scorecard scores, known vulnerabilities " \
16
16
  "(deps.dev and OSV, merged with ruby-advisory-db, flagging advisories with no fix and pins that sit below " \
@@ -24,9 +24,14 @@ Gem::Specification.new do |spec|
24
24
  "with granular, committed suppression via .still_active.yml. " \
25
25
  "Complements bundle outdated, bundler-audit, and libyear-bundler by adding the maintenance signal they " \
26
26
  "don't, and folds their version, CVE, and libyear checks into one report."
27
- spec.homepage = "https://github.com/SeanLF/still_active"
28
- spec.license = "MIT"
27
+ spec.homepage = "https://github.com/SeanLF/still_active"
28
+ spec.license = "MIT"
29
29
  spec.required_ruby_version = ">= 3.3.0"
30
+ # Gem::Resolver::APISet::GemParser, which parses the RubyGems compact index for
31
+ # the Artifactory client, first shipped in RubyGems 3.2.3. Ruby 3.3.0 bundles
32
+ # 3.5.3, so this is documentation of the real dependency rather than a bound
33
+ # anyone can trip.
34
+ spec.required_rubygems_version = ">= 3.2.3"
30
35
 
31
36
  spec.metadata["homepage_uri"] = spec.homepage
32
37
  spec.metadata["source_code_uri"] = spec.homepage
@@ -36,23 +41,14 @@ Gem::Specification.new do |spec|
36
41
  spec.metadata["rubygems_mfa_required"] = "true"
37
42
 
38
43
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
39
- %x(git ls-files -z).split("\x0").select do |f|
44
+ `git ls-files -z`.split("\x0").select do |f|
40
45
  f.start_with?("lib/", "bin/still_active") || f.match?(/\A(LICENSE|README|CHANGELOG|still_active\.gemspec)\b/)
41
46
  end
42
47
  end
43
- spec.bindir = "bin"
44
- spec.executables = spec.files.grep(%r{\Abin/still_active}) { |f| File.basename(f) }
48
+ spec.bindir = "bin"
49
+ spec.executables = spec.files.grep(%r{\Abin/still_active}) { |f| File.basename(f) }
45
50
  spec.require_paths = ["lib"]
46
51
 
47
- spec.add_development_dependency("bundler-audit")
48
- spec.add_development_dependency("debug")
49
- spec.add_development_dependency("faker")
50
- spec.add_development_dependency("json_schemer")
51
- spec.add_development_dependency("rubocop")
52
- spec.add_development_dependency("rubocop-performance")
53
- spec.add_development_dependency("rubocop-rspec")
54
- spec.add_development_dependency("rubocop-shopify")
55
-
56
52
  # 2.0/2.1 ship a scheduler that breaks our fan-out (io_read); 2.2 is the
57
53
  # verified floor (checked against Ruby 3.3 in Docker). octokit/faraday-retry/
58
54
  # gems work down to ancient versions, so they stay unpinned rather than
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: still_active
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.rc4
4
+ version: 3.0.0.rc5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Floyd
@@ -9,118 +9,6 @@ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: bundler-audit
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - ">="
17
- - !ruby/object:Gem::Version
18
- version: '0'
19
- type: :development
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: '0'
26
- - !ruby/object:Gem::Dependency
27
- name: debug
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: '0'
33
- type: :development
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '0'
40
- - !ruby/object:Gem::Dependency
41
- name: faker
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: '0'
47
- type: :development
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- - !ruby/object:Gem::Dependency
55
- name: json_schemer
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: '0'
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- - !ruby/object:Gem::Dependency
69
- name: rubocop
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- - !ruby/object:Gem::Dependency
83
- name: rubocop-performance
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- - !ruby/object:Gem::Dependency
97
- name: rubocop-rspec
98
- requirement: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- type: :development
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: rubocop-shopify
112
- requirement: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
- type: :development
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
12
  - !ruby/object:Gem::Dependency
125
13
  name: async
126
14
  requirement: !ruby/object:Gem::Requirement
@@ -281,6 +169,7 @@ files:
281
169
  - lib/still_active/artifactory_client.rb
282
170
  - lib/still_active/ceiling_reconciler.rb
283
171
  - lib/still_active/cli.rb
172
+ - lib/still_active/compact_index_client.rb
284
173
  - lib/still_active/config.rb
285
174
  - lib/still_active/config_file.rb
286
175
  - lib/still_active/core_ext.rb
@@ -300,6 +189,7 @@ files:
300
189
  - lib/still_active/sarif/rules.rb
301
190
  - lib/still_active/sbom_reader.rb
302
191
  - lib/still_active/sbom_workflow.rb
192
+ - lib/still_active/source_credentials.rb
303
193
  - lib/still_active/suppressions.rb
304
194
  - lib/still_active/version.rb
305
195
  - lib/still_active/workflow.rb
@@ -326,9 +216,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
216
  requirements:
327
217
  - - ">="
328
218
  - !ruby/object:Gem::Version
329
- version: '0'
219
+ version: 3.2.3
330
220
  requirements: []
331
- rubygems_version: 4.0.10
221
+ rubygems_version: 4.0.16
332
222
  specification_version: 4
333
223
  summary: Audit your dependencies for maintenance health, abandonment, and below-the-fix
334
224
  vulnerabilities. Ruby gems natively; npm, PyPI, Cargo, Go, Maven, and NuGet via