diff options
| author | Can Eldem <celdem@gitlab.com> | 2020-07-15 09:24:27 +0000 |
|---|---|---|
| committer | Can Eldem <celdem@gitlab.com> | 2020-07-15 09:24:27 +0000 |
| commit | f04805cf7b490b9ef9492e4ddc115ab7c2845ab6 (patch) | |
| tree | 290e40b1b3f3c24579ed780e83ce55293e4b1de7 /lib/license/finder/ext/dotnet.rb | |
| parent | d8b18764499ed0378d5f5caf0d68460c39510cfe (diff) | |
| parent | 4b9540b7724f89b2c3d2850193721abd415421f6 (diff) | |
Merge branch '217905-net-integration-test' into 'master'v3.18.0
Resolve nuget dependencies from a custom registry.
See merge request gitlab-org/security-products/license-management!189
Diffstat (limited to 'lib/license/finder/ext/dotnet.rb')
| -rw-r--r-- | lib/license/finder/ext/dotnet.rb | 57 |
1 files changed, 56 insertions, 1 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 |
