summaryrefslogtreecommitdiff
path: root/lib/license/finder
diff options
context:
space:
mode:
Diffstat (limited to 'lib/license/finder')
-rw-r--r--lib/license/finder/ext/dotnet.rb57
-rw-r--r--lib/license/finder/ext/nuget.rb47
2 files changed, 94 insertions, 10 deletions
diff --git a/lib/license/finder/ext/dotnet.rb b/lib/license/finder/ext/dotnet.rb
index 1b98881..c5ff485 100644
--- a/lib/license/finder/ext/dotnet.rb
+++ b/lib/license/finder/ext/dotnet.rb
@@ -2,10 +2,65 @@
module LicenseFinder
class Dotnet
+ def possible_package_paths
+ project_path.glob('*.sln') +
+ project_path.glob('*.csproj') +
+ project_path.glob('*.vbproj') +
+ project_path.glob('*.fsproj')
+ end
+
def prepare
shell.execute(['apt-get', :update, '-q'])
shell.execute(['apt-get', :install, '-y', '--no-install-recommends', 'dotnet-sdk-3.1'])
- shell.execute([:dotnet, :restore])
+ shell.execute([:mkdir, '-p', vendor_path.to_s]) unless vendor_path.exist?
+ shell.execute([
+ :dotnet,
+ :restore, detected_package_path.to_s,
+ '--no-cache',
+ '--packages', vendor_path.to_s,
+ '--locked-mode',
+ '--verbosity', :detailed
+ ])
+ end
+
+ def current_packages
+ asset_files.flat_map do |file|
+ json = JSON.parse(IO.read(file))
+ json.fetch('libraries', []).map do |slug, data|
+ name, version = slug.split('/')
+ map_from(name, version, data)
+ end
+ end
+ end
+
+ private
+
+ def vendor_path
+ @vendor_path ||= Pathname.pwd.join('.gitlab', 'cache', 'vendor')
+ end
+
+ def map_from(name, version, data)
+ Dependency.new(
+ 'NuGet',
+ name,
+ version,
+ spec_licenses: licenses_from(data['path'], data.fetch('files', [])),
+ detection_path: detected_package_path,
+ install_path: vendor_path.join(data['path'])
+ )
+ end
+
+ def nuspec_path_from(path, files)
+ install_path = vendor_path.join(path)
+ nuspec_filename = files.find { |x| x.end_with?('.nuspec') }
+ return install_path.join(nuspec_filename) if nuspec_filename
+ end
+
+ def licenses_from(path, files)
+ nuspec = nuspec_path_from(path, files)
+ return [] if nuspec.nil? || !nuspec.exist?
+
+ ::License::Management::Nuspec.new(nuspec.read).licenses
end
end
end
diff --git a/lib/license/finder/ext/nuget.rb b/lib/license/finder/ext/nuget.rb
index 1aa3b1b..6fb2553 100644
--- a/lib/license/finder/ext/nuget.rb
+++ b/lib/license/finder/ext/nuget.rb
@@ -2,22 +2,51 @@
module LicenseFinder
class Nuget
- def prepare_command
+ def prepare
shell.execute(['apt-get', :update, '-q'])
shell.execute(['apt-get', :install, '-y', '--no-install-recommends', 'mono-complete'])
- "mono /usr/local/bin/nuget.exe restore -Verbosity detailed"
+ shell.execute([:mkdir, '-p', vendor_path.to_s]) unless vendor_path.exist?
+
+ Dir.chdir(project_path) do
+ shell.execute([
+ :mono, '/usr/local/bin/nuget.exe',
+ :restore, detected_package_path,
+ '-Verbosity detailed',
+ '-PackagesDirectory', vendor_path,
+ '-NoCache',
+ '-LockedMode'
+ ])
+ end
end
- def license_urls(dependency)
- filename = "#{dependency.name}.#{dependency.version}.nupkg"
- files = Dir["**/#{filename}"] +
- Dir.glob(File.join(Dir.home, '.nuget', 'packages', '**', '**', filename.downcase))
+ def current_packages
+ dependencies.map do |dependency|
+ nupkg = vendor_path.glob("**/#{dependency.name}*.nupkg")[0]
+ ::LicenseFinder::Dependency.new(
+ 'NuGet',
+ dependency.name,
+ dependency.version,
+ spec_licenses: license_urls(dependency, nupkg),
+ detection_path: detected_package_path,
+ install_path: nupkg&.parent
+ )
+ end
+ end
- return if files.empty?
+ def license_urls(dependency, nupkg)
+ return if nupkg.nil? || !nupkg.exist?
- Zip::File.open(files.first) do |zipfile|
- Nuget.nuspec_license_urls(zipfile.read(dependency.name + '.nuspec'))
+ Zip::File.open(nupkg.to_s) do |zipfile|
+ content = zipfile.read("#{dependency.name}.nuspec")
+ ::License::Management::Nuspec.new(content).licenses
end
+ rescue StandardError => e
+ ::License::Management.logger.error(e)
+ []
+ end
+
+ def vendor_path
+ @vendor_path ||= Pathname.pwd.join('.gitlab', 'cache', 'vendor')
end
end
end