self.analyze

in lib/gitlab/license/analyzer.rb [106:157]


    def self.analyze(json_data)
      violations = []
      output_json = {}

      
      
      

      
      json_data.each do |library|
        level = 0
        name = library['name']
        license = library['license'].strip.delete('"').delete("'")
        version = library['version']
        status, reason = acceptable?(name, license.strip)
        message = status_string(name, version, license, status, reason, level)
        puts message
        violations << "#{name} - #{version} - #{license} - #{reason}" if status == 'unacceptable'
        output_json[name] = {
          license: license,
          version: version,
          status: status,
          reason: reason,
          dependencies: {}
        }

        
        library['dependencies'].each do |dependency|
          level = 1
          name = dependency['name']
          license = dependency['license'].strip.delete('"').delete("'")
          version = dependency['version']
          status, reason = acceptable?(name, license.strip)
          message = status_string(name, version, license, status, reason, level)
          puts message
          violations << "#{name} - #{version} - #{license} - #{reason}" if status == 'unacceptable'
          output_json[library['name']][:dependencies][name] = {
            license: license,
            version: version,
            status: status,
            reason: reason,
          }
        end
      end

      File.open("pkg/#{Build::Info::Package.name}_#{Build::Info::Package.release_version}.license-status.json", "w") do |f|
        f.write(JSON.pretty_generate(output_json))
      end

      violations.uniq
    end