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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +48 -0
- data/README.md +9 -24
- data/bibliothecary.gemspec +5 -9
- data/lib/bibliothecary/analyser/analysis.rb +10 -5
- data/lib/bibliothecary/analyser/matchers.rb +7 -5
- data/lib/bibliothecary/analyser.rb +0 -30
- data/lib/bibliothecary/cli.rb +35 -26
- data/lib/bibliothecary/configuration.rb +1 -6
- data/lib/bibliothecary/dependency.rb +1 -4
- data/lib/bibliothecary/file_info.rb +7 -0
- data/lib/bibliothecary/parsers/bentoml.rb +0 -2
- data/lib/bibliothecary/parsers/bower.rb +0 -1
- data/lib/bibliothecary/parsers/cargo.rb +12 -10
- data/lib/bibliothecary/parsers/carthage.rb +51 -15
- data/lib/bibliothecary/parsers/clojars.rb +14 -18
- data/lib/bibliothecary/parsers/cocoapods.rb +100 -19
- data/lib/bibliothecary/parsers/cog.rb +0 -2
- data/lib/bibliothecary/parsers/conan.rb +156 -0
- data/lib/bibliothecary/parsers/conda.rb +0 -3
- data/lib/bibliothecary/parsers/cpan.rb +0 -2
- data/lib/bibliothecary/parsers/cran.rb +40 -19
- data/lib/bibliothecary/parsers/docker.rb +0 -2
- data/lib/bibliothecary/parsers/dub.rb +33 -8
- data/lib/bibliothecary/parsers/dvc.rb +0 -2
- data/lib/bibliothecary/parsers/elm.rb +13 -3
- data/lib/bibliothecary/parsers/go.rb +14 -5
- data/lib/bibliothecary/parsers/hackage.rb +132 -24
- data/lib/bibliothecary/parsers/haxelib.rb +14 -4
- data/lib/bibliothecary/parsers/hex.rb +37 -20
- data/lib/bibliothecary/parsers/homebrew.rb +0 -2
- data/lib/bibliothecary/parsers/julia.rb +0 -2
- data/lib/bibliothecary/parsers/maven.rb +35 -25
- data/lib/bibliothecary/parsers/meteor.rb +14 -4
- data/lib/bibliothecary/parsers/mlflow.rb +0 -2
- data/lib/bibliothecary/parsers/npm.rb +47 -59
- data/lib/bibliothecary/parsers/nuget.rb +23 -22
- data/lib/bibliothecary/parsers/ollama.rb +0 -2
- data/lib/bibliothecary/parsers/packagist.rb +0 -3
- data/lib/bibliothecary/parsers/pub.rb +0 -2
- data/lib/bibliothecary/parsers/pypi.rb +54 -35
- data/lib/bibliothecary/parsers/rubygems.rb +92 -27
- data/lib/bibliothecary/parsers/shard.rb +0 -1
- data/lib/bibliothecary/parsers/swift_pm.rb +77 -29
- data/lib/bibliothecary/parsers/vcpkg.rb +68 -17
- data/lib/bibliothecary/runner.rb +169 -22
- data/lib/bibliothecary/version.rb +1 -1
- data/lib/bibliothecary.rb +3 -10
- data/lib/dockerfile_parser.rb +1 -1
- data/lib/modelfile_parser.rb +8 -8
- metadata +2 -108
- data/.codeclimate.yml +0 -25
- data/.github/CONTRIBUTING.md +0 -195
- data/.github/workflows/ci.yml +0 -25
- data/.gitignore +0 -10
- data/.rspec +0 -2
- data/.rubocop.yml +0 -69
- data/.ruby-version +0 -1
- data/.tidelift +0 -1
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -34
- data/Rakefile +0 -18
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/lib/bibliothecary/multi_parsers/bundler_like_manifest.rb +0 -26
- data/lib/bibliothecary/multi_parsers/cyclonedx.rb +0 -170
- data/lib/bibliothecary/multi_parsers/dependencies_csv.rb +0 -155
- data/lib/bibliothecary/multi_parsers/json_runtime.rb +0 -22
- data/lib/bibliothecary/multi_parsers/spdx.rb +0 -149
- data/lib/bibliothecary/purl_util.rb +0 -37
- data/lib/bibliothecary/runner/multi_manifest_filter.rb +0 -92
- 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:
|
|
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,
|
|
21
|
+
source = options.fetch(:filename, nil)
|
|
17
22
|
json = JSON.parse(file_contents)
|
|
18
|
-
deps = json["dependencies"]
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
40
|
+
name = dependency["name"]
|
|
41
|
+
requirement = dependency["version>="] ? ">=#{dependency['version>=']}" : nil
|
|
42
|
+
is_dev = dependency["host"] == true
|
|
28
43
|
end
|
|
29
|
-
|
|
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:
|
|
52
|
+
requirement: requirement || "*",
|
|
53
|
+
type: is_dev ? "development" : "runtime",
|
|
34
54
|
source: source
|
|
35
55
|
)
|
|
36
|
-
end.uniq
|
|
37
|
-
|
|
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
|
data/lib/bibliothecary/runner.rb
CHANGED
|
@@ -40,12 +40,159 @@ module Bibliothecary
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def applicable_package_managers(info)
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
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"
|
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 =
|
|
115
|
-
@runner =
|
|
107
|
+
@configuration = nil
|
|
108
|
+
@runner = nil
|
|
116
109
|
end
|
|
117
110
|
|
|
118
111
|
def self.configure
|
data/lib/dockerfile_parser.rb
CHANGED
|
@@ -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 =~
|
|
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(' ')
|
data/lib/modelfile_parser.rb
CHANGED
|
@@ -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 =~
|
|
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:
|
|
30
|
-
type:
|
|
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] ||
|
|
38
|
-
type:
|
|
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:
|
|
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/
|