ecosystems-bibliothecary 14.2.0 → 15.0.0

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -0
  3. data/README.md +9 -24
  4. data/bibliothecary.gemspec +5 -9
  5. data/lib/bibliothecary/analyser/analysis.rb +10 -5
  6. data/lib/bibliothecary/analyser/matchers.rb +7 -5
  7. data/lib/bibliothecary/analyser.rb +0 -30
  8. data/lib/bibliothecary/cli.rb +35 -26
  9. data/lib/bibliothecary/configuration.rb +1 -6
  10. data/lib/bibliothecary/dependency.rb +1 -4
  11. data/lib/bibliothecary/file_info.rb +7 -0
  12. data/lib/bibliothecary/parsers/bentoml.rb +0 -2
  13. data/lib/bibliothecary/parsers/bower.rb +0 -1
  14. data/lib/bibliothecary/parsers/cargo.rb +12 -10
  15. data/lib/bibliothecary/parsers/carthage.rb +51 -15
  16. data/lib/bibliothecary/parsers/clojars.rb +14 -18
  17. data/lib/bibliothecary/parsers/cocoapods.rb +100 -19
  18. data/lib/bibliothecary/parsers/cog.rb +0 -2
  19. data/lib/bibliothecary/parsers/conan.rb +156 -0
  20. data/lib/bibliothecary/parsers/conda.rb +0 -3
  21. data/lib/bibliothecary/parsers/cpan.rb +0 -2
  22. data/lib/bibliothecary/parsers/cran.rb +40 -19
  23. data/lib/bibliothecary/parsers/docker.rb +0 -2
  24. data/lib/bibliothecary/parsers/dub.rb +33 -8
  25. data/lib/bibliothecary/parsers/dvc.rb +0 -2
  26. data/lib/bibliothecary/parsers/elm.rb +13 -3
  27. data/lib/bibliothecary/parsers/go.rb +14 -5
  28. data/lib/bibliothecary/parsers/hackage.rb +132 -24
  29. data/lib/bibliothecary/parsers/haxelib.rb +14 -4
  30. data/lib/bibliothecary/parsers/hex.rb +37 -20
  31. data/lib/bibliothecary/parsers/homebrew.rb +0 -2
  32. data/lib/bibliothecary/parsers/julia.rb +0 -2
  33. data/lib/bibliothecary/parsers/maven.rb +35 -25
  34. data/lib/bibliothecary/parsers/meteor.rb +14 -4
  35. data/lib/bibliothecary/parsers/mlflow.rb +0 -2
  36. data/lib/bibliothecary/parsers/npm.rb +47 -59
  37. data/lib/bibliothecary/parsers/nuget.rb +23 -22
  38. data/lib/bibliothecary/parsers/ollama.rb +0 -2
  39. data/lib/bibliothecary/parsers/packagist.rb +0 -3
  40. data/lib/bibliothecary/parsers/pub.rb +0 -2
  41. data/lib/bibliothecary/parsers/pypi.rb +54 -35
  42. data/lib/bibliothecary/parsers/rubygems.rb +92 -27
  43. data/lib/bibliothecary/parsers/shard.rb +0 -1
  44. data/lib/bibliothecary/parsers/swift_pm.rb +77 -29
  45. data/lib/bibliothecary/parsers/vcpkg.rb +68 -17
  46. data/lib/bibliothecary/runner.rb +169 -22
  47. data/lib/bibliothecary/version.rb +1 -1
  48. data/lib/bibliothecary.rb +3 -10
  49. data/lib/dockerfile_parser.rb +1 -1
  50. data/lib/modelfile_parser.rb +8 -8
  51. metadata +2 -108
  52. data/.codeclimate.yml +0 -25
  53. data/.github/CONTRIBUTING.md +0 -195
  54. data/.github/workflows/ci.yml +0 -25
  55. data/.gitignore +0 -10
  56. data/.rspec +0 -2
  57. data/.rubocop.yml +0 -69
  58. data/.ruby-version +0 -1
  59. data/.tidelift +0 -1
  60. data/CODE_OF_CONDUCT.md +0 -74
  61. data/Gemfile +0 -34
  62. data/Rakefile +0 -18
  63. data/bin/console +0 -15
  64. data/bin/setup +0 -8
  65. data/lib/bibliothecary/multi_parsers/bundler_like_manifest.rb +0 -26
  66. data/lib/bibliothecary/multi_parsers/cyclonedx.rb +0 -170
  67. data/lib/bibliothecary/multi_parsers/dependencies_csv.rb +0 -155
  68. data/lib/bibliothecary/multi_parsers/json_runtime.rb +0 -22
  69. data/lib/bibliothecary/multi_parsers/spdx.rb +0 -149
  70. data/lib/bibliothecary/purl_util.rb +0 -37
  71. data/lib/bibliothecary/runner/multi_manifest_filter.rb +0 -92
  72. data/lib/sdl_parser.rb +0 -30
@@ -6,35 +6,86 @@ module Bibliothecary
6
6
  def self.mapping
7
7
  {
8
8
  match_filename("vcpkg.json", case_insensitive: true) => {
9
- kind: 'manifest',
9
+ kind: "manifest",
10
10
  parser: :parse_vcpkg_json,
11
- }
11
+ },
12
+ match_filename("_generated-vcpkg-list.json") => {
13
+ kind: "lockfile",
14
+ parser: :parse_vcpkg_list_json,
15
+ },
12
16
  }
13
17
  end
14
18
 
19
+
15
20
  def self.parse_vcpkg_json(file_contents, options: {})
16
- source = options.fetch(:filename, 'vcpkg.json')
21
+ source = options.fetch(:filename, nil)
17
22
  json = JSON.parse(file_contents)
18
- deps = json["dependencies"].map do |dependency|
19
- name = dependency.is_a?(Hash) ? dependency['name'] : dependency
20
- if dependency.is_a?(Hash)
21
- if dependency['version>=']
22
- requirement = ">=#{dependency['version>=']}"
23
- else
24
- requirement = dependency['version'] || dependency['version-semver'] || dependency['version-date'] || dependency['version-string'] || '*'
25
- end
23
+ deps = json["dependencies"] || []
24
+ return ParserResult.new(dependencies: []) if deps.empty?
25
+
26
+ overrides = {}
27
+ json["overrides"]&.each do |override|
28
+ next unless override.is_a?(Hash) && override["name"]
29
+
30
+ version = override["version"] || override["version-semver"] || override["version-date"] || override["version-string"]
31
+ overrides[override["name"]] = format_requirement(version, override["port-version"])
32
+ end
33
+
34
+ dependencies = deps.map do |dependency|
35
+ if dependency.is_a?(String)
36
+ name = dependency
37
+ requirement = nil
38
+ is_dev = false
26
39
  else
27
- requirement = '*'
40
+ name = dependency["name"]
41
+ requirement = dependency["version>="] ? ">=#{dependency['version>=']}" : nil
42
+ is_dev = dependency["host"] == true
28
43
  end
29
- Bibliothecary::Dependency.new(
44
+
45
+ next if name.nil? || name.empty?
46
+
47
+ requirement = overrides[name] if overrides[name]
48
+
49
+ Dependency.new(
30
50
  platform: platform_name,
31
51
  name: name,
32
- requirement: requirement,
33
- type: 'runtime',
52
+ requirement: requirement || "*",
53
+ type: is_dev ? "development" : "runtime",
34
54
  source: source
35
55
  )
36
- end.uniq
37
- Bibliothecary::ParserResult.new(dependencies: deps)
56
+ end.compact.uniq
57
+
58
+ ParserResult.new(dependencies: dependencies)
59
+ end
60
+
61
+ def self.parse_vcpkg_list_json(file_contents, options: {})
62
+ source = options.fetch(:filename, nil)
63
+ json = JSON.parse(file_contents)
64
+
65
+ dependencies = json.values.map do |package_info|
66
+ name = package_info["package_name"]
67
+ next if name.nil? || name.empty?
68
+
69
+ Dependency.new(
70
+ platform: platform_name,
71
+ name: name,
72
+ requirement: format_requirement(package_info["version"], package_info["port_version"]),
73
+ type: "runtime",
74
+ source: source
75
+ )
76
+ end.compact
77
+
78
+ ParserResult.new(dependencies: dependencies)
79
+ end
80
+
81
+ def self.format_requirement(version, port_version)
82
+ return "*" unless version
83
+
84
+ if port_version && port_version > 0
85
+ "#{version}##{port_version}"
86
+ else
87
+ version
88
+ end
38
89
  end
39
90
  end
40
91
  end
@@ -40,12 +40,159 @@ module Bibliothecary
40
40
  end
41
41
 
42
42
  def applicable_package_managers(info)
43
- managers = package_managers.select { |pm| pm.match_info?(info) }
43
+ candidates = candidate_package_managers(info.relative_path)
44
+ managers = candidates.select { |pm| pm.match_info?(info) }
44
45
  managers.empty? ? [nil] : managers
45
46
  end
46
47
 
47
48
  def package_managers
48
- Bibliothecary::Parsers.constants.map { |c| Bibliothecary::Parsers.const_get(c) }.sort_by { |c| c.to_s.downcase }
49
+ @package_managers ||= Bibliothecary::Parsers.constants
50
+ .map { |c| Bibliothecary::Parsers.const_get(c) }
51
+ .sort_by { |c| c.to_s.downcase }
52
+ .freeze
53
+ end
54
+
55
+ # Get candidate package managers for a file path using filename/extension index.
56
+ # Falls back to all package managers for unindexed patterns.
57
+ def candidate_package_managers(path)
58
+ filename = File.basename(path)
59
+ filename_lower = filename.downcase
60
+
61
+ # Check exact filename match first (use fetch to avoid default block on frozen hash)
62
+ candidates = filename_index.fetch(filename_lower, nil)
63
+ return candidates if candidates
64
+
65
+ # Check extension matches
66
+ extension_index.each do |ext, ext_candidates|
67
+ return ext_candidates if filename_lower.end_with?(ext)
68
+ end
69
+
70
+ # Fall back to all package managers for unindexed patterns
71
+ package_managers
72
+ end
73
+
74
+ # Build an index mapping lowercase filenames to candidate parsers
75
+ def filename_index
76
+ @filename_index ||= build_filename_index
77
+ end
78
+
79
+ # Build an index mapping lowercase extensions to candidate parsers
80
+ def extension_index
81
+ @extension_index ||= build_extension_index
82
+ end
83
+
84
+ def build_filename_index
85
+ index = {}
86
+
87
+ package_managers.each do |pm|
88
+ pm.mapping.each_key do |matcher|
89
+ next unless matcher.is_a?(Proc)
90
+
91
+ # Extract filenames from the matcher by testing common patterns
92
+ extract_filenames_from_matcher(matcher).each do |filename|
93
+ key = filename.downcase
94
+ index[key] ||= []
95
+ index[key] << pm
96
+ end
97
+ end
98
+ end
99
+
100
+ # Deduplicate and freeze
101
+ index.transform_values! { |v| v.uniq.freeze }
102
+ index.freeze
103
+ end
104
+
105
+ def build_extension_index
106
+ index = {}
107
+
108
+ package_managers.each do |pm|
109
+ pm.mapping.each_key do |matcher|
110
+ next unless matcher.is_a?(Proc)
111
+
112
+ # Extract extensions from the matcher
113
+ extract_extensions_from_matcher(matcher).each do |ext|
114
+ key = ext.downcase
115
+ index[key] ||= []
116
+ index[key] << pm
117
+ end
118
+ end
119
+ end
120
+
121
+ # Deduplicate and freeze
122
+ index.transform_values! { |v| v.uniq.freeze }
123
+ index.freeze
124
+ end
125
+
126
+ # Try to extract filename patterns from a matcher proc
127
+ def extract_filenames_from_matcher(matcher)
128
+ filenames = []
129
+
130
+ # Test common manifest filenames to see which ones match
131
+ common_filenames.each do |filename|
132
+ filenames << filename if matcher.call(filename)
133
+ end
134
+
135
+ filenames
136
+ end
137
+
138
+ # Try to extract extension patterns from a matcher proc
139
+ def extract_extensions_from_matcher(matcher)
140
+ extensions = []
141
+
142
+ # Test common extensions
143
+ common_extensions.each do |ext|
144
+ test_file = "test#{ext}"
145
+ extensions << ext if matcher.call(test_file)
146
+ end
147
+
148
+ extensions
149
+ end
150
+
151
+ def common_filenames
152
+ @common_filenames ||= %w[
153
+ package.json package-lock.json yarn.lock pnpm-lock.yaml npm-shrinkwrap.json npm-ls.json bun.lock
154
+ Gemfile Gemfile.lock gems.rb gems.locked
155
+ Cargo.toml Cargo.lock
156
+ go.mod go.sum Gopkg.toml Gopkg.lock glide.yaml glide.lock Godeps
157
+ requirements.txt Pipfile Pipfile.lock pyproject.toml poetry.lock setup.py
158
+ pom.xml build.gradle build.gradle.kts ivy.xml
159
+ composer.json composer.lock
160
+ Podfile Podfile.lock
161
+ pubspec.yaml pubspec.lock
162
+ Package.swift Package.resolved
163
+ Cartfile Cartfile.resolved Cartfile.private
164
+ mix.exs mix.lock
165
+ project.clj
166
+ shard.yml shard.lock
167
+ environment.yml environment.yaml
168
+ bower.json
169
+ elm-package.json elm.json
170
+ vcpkg.json
171
+ dub.json dub.sdl
172
+ haxelib.json
173
+ action.yml action.yaml
174
+ Brewfile Brewfile.lock.json
175
+ REQUIRE Project.toml Manifest.toml
176
+ paket.lock packages.config Project.json Project.lock.json packages.lock.json project.assets.json
177
+ DESCRIPTION
178
+ META.json META.yml cpanfile
179
+ cabal.config
180
+ docker-compose.yml docker-compose.yaml Dockerfile
181
+ conanfile.py conanfile.txt conan.lock
182
+ _generated-vcpkg-list.json
183
+ MLmodel
184
+ Modelfile
185
+ dvc.yaml
186
+ cog.yaml
187
+ bentofile.yaml
188
+ uv.lock pylock.toml
189
+ ].freeze
190
+ end
191
+
192
+ def common_extensions
193
+ @common_extensions ||= %w[
194
+ .gemspec .nuspec .csproj .cabal .podspec .podspec.json
195
+ ].freeze
49
196
  end
50
197
 
51
198
  # Parses an array of format [{file_path: "", contents: ""},] to match
@@ -120,7 +267,9 @@ module Bibliothecary
120
267
  def analyse_file(file_path, contents)
121
268
  contents = Bibliothecary.utf8_string(contents)
122
269
 
123
- package_managers.select { |pm| pm.match?(file_path, contents) }.map do |pm|
270
+ # Use filename index to quickly find candidate parsers
271
+ candidates = candidate_package_managers(file_path)
272
+ candidates.select { |pm| pm.match?(file_path, contents) }.map do |pm|
124
273
  pm.analyse_contents(file_path, contents, options: @options)
125
274
  end.flatten.uniq.compact
126
275
  end
@@ -137,14 +286,24 @@ module Bibliothecary
137
286
  ignored_dirs.include?(f) || f.start_with?(*ignored_dirs_with_slash)
138
287
  end
139
288
  allowed_file_list = allowed_file_list.reject { |f| ignored_files.include?(f) }
140
- package_managers.map do |pm|
141
- # (skip rubocop false positive, since match? is a custom method)
142
- allowed_file_list.select do |file_path| # rubocop:disable Style/SelectByRegexp
143
- # this is a call to match? without file contents, which will skip
144
- # ambiguous filenames that are only possibly a manifest
145
- pm.match?(file_path)
289
+
290
+ # Fast path: use filename index directly for known manifest filenames
291
+ # This avoids creating FileInfo objects and calling match? for each file
292
+ manifests = []
293
+ allowed_file_list.each do |file_path|
294
+ filename_lower = File.basename(file_path).downcase
295
+
296
+ # Check if this filename is in our index (known manifest)
297
+ if filename_index.key?(filename_lower)
298
+ manifests << file_path
299
+ next
146
300
  end
147
- end.flatten.uniq.compact
301
+
302
+ # Check extension index
303
+ matched = extension_index.keys.any? { |ext| filename_lower.end_with?(ext) }
304
+ manifests << file_path if matched
305
+ end
306
+ manifests.sort
148
307
  end
149
308
 
150
309
  def ignored_dirs
@@ -155,16 +314,6 @@ module Bibliothecary
155
314
  @configuration.ignored_files
156
315
  end
157
316
 
158
- # We don't know what file groups are in multi file manifests until
159
- # we process them. In those cases, process those, then reject the
160
- # RelatedFilesInfo objects that aren't in the manifest.
161
- #
162
- # This means we're likely analyzing these files twice in processing,
163
- # but we need that accurate package manager information.
164
- def filter_multi_manifest_entries(path, related_files_info_entries)
165
- MultiManifestFilter.new(path: path, related_files_info_entries: related_files_info_entries, runner: self).results
166
- end
167
-
168
317
  private
169
318
 
170
319
  # Get the list of all package managers that apply to the file provided
@@ -180,5 +329,3 @@ module Bibliothecary
180
329
  end
181
330
  end
182
331
  end
183
-
184
- require_relative "runner/multi_manifest_filter"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bibliothecary
4
- VERSION = "14.2.0"
4
+ VERSION = "15.0.0"
5
5
  end
data/lib/bibliothecary.rb CHANGED
@@ -9,13 +9,9 @@ require "bibliothecary/runner"
9
9
  require "bibliothecary/exceptions"
10
10
  require "bibliothecary/file_info"
11
11
  require "bibliothecary/related_files_info"
12
- require "bibliothecary/purl_util"
13
12
  require "find"
14
13
  require "tomlrb"
15
14
 
16
- Dir[File.expand_path("bibliothecary/multi_parsers/*.rb", __dir__)].each do |file|
17
- require file
18
- end
19
15
  Dir[File.expand_path("bibliothecary/parsers/*.rb", __dir__)].each do |file|
20
16
  require file
21
17
  end
@@ -100,19 +96,16 @@ module Bibliothecary
100
96
  end
101
97
 
102
98
  def self.runner
103
- configuration
104
- @runner
99
+ @runner ||= Runner.new(configuration)
105
100
  end
106
101
 
107
102
  def self.configuration
108
103
  @configuration ||= Configuration.new
109
- @runner = Runner.new(@configuration)
110
- @configuration
111
104
  end
112
105
 
113
106
  def self.reset
114
- @configuration = Configuration.new
115
- @runner = Runner.new(@configuration)
107
+ @configuration = nil
108
+ @runner = nil
116
109
  end
117
110
 
118
111
  def self.configure
@@ -4,7 +4,7 @@ class DockerfileParser
4
4
  end
5
5
 
6
6
  def parse
7
- fromlines = @file_contents.split("\n").select { |line| line.strip =~ /^\FROM/i }
7
+ fromlines = @file_contents.split("\n").select { |line| line.strip =~ /^FROM/i }
8
8
 
9
9
  fromlines.map do |line|
10
10
  line = line.strip.split(' ')
@@ -4,10 +4,10 @@ class ModelfileParser
4
4
  end
5
5
 
6
6
  def parse
7
- fromlines = @file_contents.split("\n").select { |line| line.strip =~ /^\FROM/i }
7
+ fromlines = @file_contents.split("\n").select { |line| line.strip =~ /^FROM/i }
8
8
 
9
9
  fromlines.map do |line|
10
- line = line.strip.split(' ')
10
+ line = line.strip.split
11
11
 
12
12
  # Remove the FROM keyword
13
13
  line.shift
@@ -23,19 +23,19 @@ class ModelfileParser
23
23
  model_ref = line[0]
24
24
 
25
25
  # Check if it's a file path (local GGUF or directory)
26
- if model_ref =~ /\.(gguf|safetensors)$/i || model_ref.start_with?('./', '/')
26
+ if model_ref =~ /\.(gguf|safetensors)$/i || model_ref.start_with?("./", "/")
27
27
  {
28
28
  name: File.basename(model_ref),
29
- requirement: 'local',
30
- type: 'runtime'
29
+ requirement: "local",
30
+ type: "runtime",
31
31
  }
32
32
  else
33
33
  # It's a registry model (e.g., llama3.2 or llama3.2:latest)
34
- parts = model_ref.split(':')
34
+ parts = model_ref.split(":")
35
35
  {
36
36
  name: parts[0],
37
- requirement: parts[1] || 'latest',
38
- type: 'runtime'
37
+ requirement: parts[1] || "latest",
38
+ type: "runtime",
39
39
  }
40
40
  end
41
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecosystems-bibliothecary
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.2.0
4
+ version: 15.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt
@@ -23,20 +23,6 @@ dependencies:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
- - !ruby/object:Gem::Dependency
27
- name: commander
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: '0'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '0'
40
26
  - !ruby/object:Gem::Dependency
41
27
  name: csv
42
28
  requirement: !ruby/object:Gem::Requirement
@@ -51,20 +37,6 @@ dependencies:
51
37
  - - ">="
52
38
  - !ruby/object:Gem::Version
53
39
  version: '0'
54
- - !ruby/object:Gem::Dependency
55
- name: deb_control
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: '0'
61
- type: :runtime
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
40
  - !ruby/object:Gem::Dependency
69
41
  name: json
70
42
  requirement: !ruby/object:Gem::Requirement
@@ -79,20 +51,6 @@ dependencies:
79
51
  - - "~>"
80
52
  - !ruby/object:Gem::Version
81
53
  version: '2.8'
82
- - !ruby/object:Gem::Dependency
83
- name: librariesio-gem-parser
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- type: :runtime
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
54
  - !ruby/object:Gem::Dependency
97
55
  name: ox
98
56
  requirement: !ruby/object:Gem::Requirement
@@ -107,20 +65,6 @@ dependencies:
107
65
  - - ">="
108
66
  - !ruby/object:Gem::Version
109
67
  version: 2.8.1
110
- - !ruby/object:Gem::Dependency
111
- name: packageurl-ruby
112
- requirement: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
- type: :runtime
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
68
  - !ruby/object:Gem::Dependency
125
69
  name: racc
126
70
  requirement: !ruby/object:Gem::Requirement
@@ -135,20 +79,6 @@ dependencies:
135
79
  - - ">="
136
80
  - !ruby/object:Gem::Version
137
81
  version: '0'
138
- - !ruby/object:Gem::Dependency
139
- name: sdl4r
140
- requirement: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - ">="
143
- - !ruby/object:Gem::Version
144
- version: '0'
145
- type: :runtime
146
- prerelease: false
147
- version_requirements: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: '0'
152
82
  - !ruby/object:Gem::Dependency
153
83
  name: tomlrb
154
84
  requirement: !ruby/object:Gem::Requirement
@@ -163,47 +93,18 @@ dependencies:
163
93
  - - "~>"
164
94
  - !ruby/object:Gem::Version
165
95
  version: '2.0'
166
- - !ruby/object:Gem::Dependency
167
- name: typhoeus
168
- requirement: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - ">="
171
- - !ruby/object:Gem::Version
172
- version: '0'
173
- type: :runtime
174
- prerelease: false
175
- version_requirements: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- version: '0'
180
96
  email:
181
97
  - andrewnez@gmail.com
182
98
  executables:
183
99
  - bibliothecary
184
- - console
185
- - setup
186
100
  extensions: []
187
101
  extra_rdoc_files: []
188
102
  files:
189
- - ".codeclimate.yml"
190
- - ".github/CONTRIBUTING.md"
191
- - ".github/workflows/ci.yml"
192
- - ".gitignore"
193
- - ".rspec"
194
- - ".rubocop.yml"
195
- - ".ruby-version"
196
- - ".tidelift"
197
103
  - CHANGELOG.md
198
- - CODE_OF_CONDUCT.md
199
- - Gemfile
200
104
  - LICENSE.txt
201
105
  - README.md
202
- - Rakefile
203
106
  - bibliothecary.gemspec
204
107
  - bin/bibliothecary
205
- - bin/console
206
- - bin/setup
207
108
  - lib/bibliothecary.rb
208
109
  - lib/bibliothecary/analyser.rb
209
110
  - lib/bibliothecary/analyser/analysis.rb
@@ -214,11 +115,6 @@ files:
214
115
  - lib/bibliothecary/dependency.rb
215
116
  - lib/bibliothecary/exceptions.rb
216
117
  - lib/bibliothecary/file_info.rb
217
- - lib/bibliothecary/multi_parsers/bundler_like_manifest.rb
218
- - lib/bibliothecary/multi_parsers/cyclonedx.rb
219
- - lib/bibliothecary/multi_parsers/dependencies_csv.rb
220
- - lib/bibliothecary/multi_parsers/json_runtime.rb
221
- - lib/bibliothecary/multi_parsers/spdx.rb
222
118
  - lib/bibliothecary/parser_result.rb
223
119
  - lib/bibliothecary/parsers/actions.rb
224
120
  - lib/bibliothecary/parsers/bentoml.rb
@@ -228,6 +124,7 @@ files:
228
124
  - lib/bibliothecary/parsers/clojars.rb
229
125
  - lib/bibliothecary/parsers/cocoapods.rb
230
126
  - lib/bibliothecary/parsers/cog.rb
127
+ - lib/bibliothecary/parsers/conan.rb
231
128
  - lib/bibliothecary/parsers/conda.rb
232
129
  - lib/bibliothecary/parsers/cpan.rb
233
130
  - lib/bibliothecary/parsers/cran.rb
@@ -254,14 +151,11 @@ files:
254
151
  - lib/bibliothecary/parsers/shard.rb
255
152
  - lib/bibliothecary/parsers/swift_pm.rb
256
153
  - lib/bibliothecary/parsers/vcpkg.rb
257
- - lib/bibliothecary/purl_util.rb
258
154
  - lib/bibliothecary/related_files_info.rb
259
155
  - lib/bibliothecary/runner.rb
260
- - lib/bibliothecary/runner/multi_manifest_filter.rb
261
156
  - lib/bibliothecary/version.rb
262
157
  - lib/dockerfile_parser.rb
263
158
  - lib/modelfile_parser.rb
264
- - lib/sdl_parser.rb
265
159
  homepage: https://github.com/ecosyste-ms/bibliothecary
266
160
  licenses:
267
161
  - AGPL-3.0
data/.codeclimate.yml DELETED
@@ -1,25 +0,0 @@
1
- ---
2
- engines:
3
- duplication:
4
- enabled: true
5
- config:
6
- languages:
7
- - ruby
8
- - javascript
9
- - python
10
- - php
11
- fixme:
12
- enabled: true
13
- rubocop:
14
- enabled: true
15
- ratings:
16
- paths:
17
- - "**.inc"
18
- - "**.js"
19
- - "**.jsx"
20
- - "**.module"
21
- - "**.php"
22
- - "**.py"
23
- - "**.rb"
24
- exclude_paths:
25
- - spec/