licensed 3.2.3 → 3.4.1
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 +51 -1
 - data/Rakefile +5 -3
 - data/docs/adding_a_new_source.md +32 -3
 - data/docs/commands/README.md +1 -1
 - data/docs/commands/status.md +14 -10
 - data/docs/sources/cargo.md +19 -0
 - data/docs/sources/yarn.md +5 -4
 - data/lib/licensed/reporters/status_reporter.rb +1 -1
 - data/lib/licensed/sources/cargo.rb +70 -0
 - data/lib/licensed/sources/manifest.rb +17 -22
 - data/lib/licensed/sources/npm.rb +17 -7
 - data/lib/licensed/sources/nuget.rb +2 -2
 - data/lib/licensed/sources/source.rb +22 -3
 - data/lib/licensed/sources/yarn/berry.rb +85 -0
 - data/lib/licensed/sources/yarn/v1.rb +152 -0
 - data/lib/licensed/sources/yarn.rb +15 -130
 - data/lib/licensed/sources.rb +1 -0
 - data/lib/licensed/version.rb +1 -1
 - data/licensed.gemspec +1 -1
 - metadata +6 -32
 - data/.github/dependabot.yml +0 -19
 - data/.github/workflows/release.yml +0 -213
 - data/.github/workflows/test.yml +0 -543
 - data/.gitignore +0 -57
 - data/.licensed.yml +0 -7
 - data/.rubocop.yml +0 -8
 - data/.ruby-version +0 -1
 - data/docker/Dockerfile.build-linux +0 -15
 - data/script/bootstrap +0 -6
 - data/script/cibuild +0 -7
 - data/script/console +0 -15
 - data/script/package +0 -20
 - data/script/packages/build +0 -95
 - data/script/packages/linux +0 -57
 - data/script/packages/mac +0 -41
 - data/script/setup +0 -5
 - data/script/source-setup/bower +0 -17
 - data/script/source-setup/bundler +0 -20
 - data/script/source-setup/cabal +0 -19
 - data/script/source-setup/composer +0 -38
 - data/script/source-setup/git_submodule +0 -39
 - data/script/source-setup/go +0 -31
 - data/script/source-setup/mix +0 -19
 - data/script/source-setup/npm +0 -34
 - data/script/source-setup/nuget +0 -17
 - data/script/source-setup/pip +0 -29
 - data/script/source-setup/pipenv +0 -21
 - data/script/source-setup/swift +0 -22
 - data/script/source-setup/yarn +0 -17
 - data/script/test +0 -16
 
| 
         @@ -0,0 +1,152 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "json"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Licensed
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Sources
         
     | 
| 
      
 6 
     | 
    
         
            +
                class Yarn::V1 < Source
         
     | 
| 
      
 7 
     | 
    
         
            +
                  include Licensed::Sources::Yarn
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  # `yarn licenses list --json` returns data in a table format with header
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # ordering specified in the output.  Look for these specific headers and use
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # their indices to get data from the table body
         
     | 
| 
      
 12 
     | 
    
         
            +
                  YARN_NAME_HEAD = "Name".freeze
         
     | 
| 
      
 13 
     | 
    
         
            +
                  YARN_VERSION_HEAD = "Version".freeze
         
     | 
| 
      
 14 
     | 
    
         
            +
                  YARN_URL_HEAD = "URL".freeze
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def self.version_requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                    Gem::Requirement.new("< 2.0")
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  def enumerate_dependencies
         
     | 
| 
      
 21 
     | 
    
         
            +
                    packages.map do |name, package|
         
     | 
| 
      
 22 
     | 
    
         
            +
                      Dependency.new(
         
     | 
| 
      
 23 
     | 
    
         
            +
                        name: name,
         
     | 
| 
      
 24 
     | 
    
         
            +
                        version: package["version"],
         
     | 
| 
      
 25 
     | 
    
         
            +
                        path: package["path"],
         
     | 
| 
      
 26 
     | 
    
         
            +
                        metadata: {
         
     | 
| 
      
 27 
     | 
    
         
            +
                          "type"     => self.class.type,
         
     | 
| 
      
 28 
     | 
    
         
            +
                          "name"     => package["name"],
         
     | 
| 
      
 29 
     | 
    
         
            +
                          "homepage" => dependency_urls[package["id"]]
         
     | 
| 
      
 30 
     | 
    
         
            +
                        }
         
     | 
| 
      
 31 
     | 
    
         
            +
                      )
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  # Finds packages that the current project relies on
         
     | 
| 
      
 36 
     | 
    
         
            +
                  def packages
         
     | 
| 
      
 37 
     | 
    
         
            +
                    return [] if yarn_package_tree.nil?
         
     | 
| 
      
 38 
     | 
    
         
            +
                    all_dependencies = {}
         
     | 
| 
      
 39 
     | 
    
         
            +
                    recursive_dependencies(yarn_package_tree).each do |name, results|
         
     | 
| 
      
 40 
     | 
    
         
            +
                      results.uniq! { |package| package["version"] }
         
     | 
| 
      
 41 
     | 
    
         
            +
                      if results.size == 1
         
     | 
| 
      
 42 
     | 
    
         
            +
                        # if there is only one package for a name, reference it by name
         
     | 
| 
      
 43 
     | 
    
         
            +
                        all_dependencies[name] = results[0]
         
     | 
| 
      
 44 
     | 
    
         
            +
                      else
         
     | 
| 
      
 45 
     | 
    
         
            +
                        # if there is more than one package for a name, reference each by
         
     | 
| 
      
 46 
     | 
    
         
            +
                        # "<name>-<version>"
         
     | 
| 
      
 47 
     | 
    
         
            +
                        results.each do |package|
         
     | 
| 
      
 48 
     | 
    
         
            +
                          all_dependencies["#{name}-#{package["version"]}"] = package
         
     | 
| 
      
 49 
     | 
    
         
            +
                        end
         
     | 
| 
      
 50 
     | 
    
         
            +
                      end
         
     | 
| 
      
 51 
     | 
    
         
            +
                    end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    all_dependencies
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  # Recursively parse dependency JSON data.  Returns a hash mapping the
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # package name to it's metadata
         
     | 
| 
      
 58 
     | 
    
         
            +
                  def recursive_dependencies(dependencies, result = {})
         
     | 
| 
      
 59 
     | 
    
         
            +
                    dependencies.each do |dependency|
         
     | 
| 
      
 60 
     | 
    
         
            +
                      # "shadow" indicate a dependency requirement only, not a
         
     | 
| 
      
 61 
     | 
    
         
            +
                      # resolved package identifier
         
     | 
| 
      
 62 
     | 
    
         
            +
                      next if dependency["shadow"]
         
     | 
| 
      
 63 
     | 
    
         
            +
                      name, _, version = dependency["name"].rpartition("@")
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                      (result[name] ||= []) << {
         
     | 
| 
      
 66 
     | 
    
         
            +
                        "id" => dependency["name"],
         
     | 
| 
      
 67 
     | 
    
         
            +
                        "name" => name,
         
     | 
| 
      
 68 
     | 
    
         
            +
                        "version" => version,
         
     | 
| 
      
 69 
     | 
    
         
            +
                        "path" => dependency_paths[dependency["name"]]
         
     | 
| 
      
 70 
     | 
    
         
            +
                      }
         
     | 
| 
      
 71 
     | 
    
         
            +
                      recursive_dependencies(dependency["children"], result)
         
     | 
| 
      
 72 
     | 
    
         
            +
                    end
         
     | 
| 
      
 73 
     | 
    
         
            +
                    result
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                  # Returns a hash that maps all dependency names to their location on disk
         
     | 
| 
      
 77 
     | 
    
         
            +
                  # by parsing every package.json file under node_modules.
         
     | 
| 
      
 78 
     | 
    
         
            +
                  def dependency_paths
         
     | 
| 
      
 79 
     | 
    
         
            +
                    @dependency_paths ||= Dir.glob(config.pwd.join("node_modules/**/package.json")).each_with_object({}) do |file, hsh|
         
     | 
| 
      
 80 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 81 
     | 
    
         
            +
                        dirname = File.dirname(file)
         
     | 
| 
      
 82 
     | 
    
         
            +
                        json = JSON.parse(File.read(file))
         
     | 
| 
      
 83 
     | 
    
         
            +
                        hsh["#{json["name"]}@#{json["version"]}"] = dirname
         
     | 
| 
      
 84 
     | 
    
         
            +
                      rescue JSON::ParserError
         
     | 
| 
      
 85 
     | 
    
         
            +
                        # don't crash execution if there is a problem parsing a package.json file
         
     | 
| 
      
 86 
     | 
    
         
            +
                        # if the bad package.json file relates to a package that licensed should be reporting on
         
     | 
| 
      
 87 
     | 
    
         
            +
                        # then this will still result in an error about a missing package
         
     | 
| 
      
 88 
     | 
    
         
            +
                      end
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                  # Finds and returns the yarn package tree listing from `yarn list` output
         
     | 
| 
      
 93 
     | 
    
         
            +
                  def yarn_package_tree
         
     | 
| 
      
 94 
     | 
    
         
            +
                    return @yarn_package_tree if defined?(@yarn_package_tree)
         
     | 
| 
      
 95 
     | 
    
         
            +
                    @yarn_package_tree = begin
         
     | 
| 
      
 96 
     | 
    
         
            +
                      # parse all lines of output to json and find one that is "type": "tree"
         
     | 
| 
      
 97 
     | 
    
         
            +
                      tree = yarn_list_command.lines
         
     | 
| 
      
 98 
     | 
    
         
            +
                                              .map(&:strip)
         
     | 
| 
      
 99 
     | 
    
         
            +
                                              .map(&JSON.method(:parse))
         
     | 
| 
      
 100 
     | 
    
         
            +
                                              .find { |json| json["type"] == "tree" }
         
     | 
| 
      
 101 
     | 
    
         
            +
                      tree&.dig("data", "trees")
         
     | 
| 
      
 102 
     | 
    
         
            +
                    end
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  # Returns a mapping of unique dependency identifiers to urls
         
     | 
| 
      
 106 
     | 
    
         
            +
                  def dependency_urls
         
     | 
| 
      
 107 
     | 
    
         
            +
                    @dependency_urls ||= begin
         
     | 
| 
      
 108 
     | 
    
         
            +
                      table = yarn_licenses_command.lines
         
     | 
| 
      
 109 
     | 
    
         
            +
                                                   .map(&:strip)
         
     | 
| 
      
 110 
     | 
    
         
            +
                                                   .map(&JSON.method(:parse))
         
     | 
| 
      
 111 
     | 
    
         
            +
                                                   .find { |json| json["type"] == "table" }
         
     | 
| 
      
 112 
     | 
    
         
            +
                      return {} if table.nil?
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                      head = table.dig("data", "head")
         
     | 
| 
      
 115 
     | 
    
         
            +
                      return {} if head.nil?
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                      name_index = head.index YARN_NAME_HEAD
         
     | 
| 
      
 118 
     | 
    
         
            +
                      version_index = head.index YARN_VERSION_HEAD
         
     | 
| 
      
 119 
     | 
    
         
            +
                      url_index = head.index YARN_URL_HEAD
         
     | 
| 
      
 120 
     | 
    
         
            +
                      return {} if name_index.nil? || version_index.nil? || url_index.nil?
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                      body = table.dig("data", "body")
         
     | 
| 
      
 123 
     | 
    
         
            +
                      return {} if body.nil?
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                      body.each_with_object({}) do |row, hsh|
         
     | 
| 
      
 126 
     | 
    
         
            +
                        id = "#{row[name_index]}@#{row[version_index]}"
         
     | 
| 
      
 127 
     | 
    
         
            +
                        hsh[id] = row[url_index]
         
     | 
| 
      
 128 
     | 
    
         
            +
                      end
         
     | 
| 
      
 129 
     | 
    
         
            +
                    end
         
     | 
| 
      
 130 
     | 
    
         
            +
                  end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                  # Returns the output from running `yarn list` to get project dependencies
         
     | 
| 
      
 133 
     | 
    
         
            +
                  def yarn_list_command
         
     | 
| 
      
 134 
     | 
    
         
            +
                    args = %w(--json -s --no-progress)
         
     | 
| 
      
 135 
     | 
    
         
            +
                    args << "--production" unless include_non_production?
         
     | 
| 
      
 136 
     | 
    
         
            +
                    Licensed::Shell.execute("yarn", "list", *args, allow_failure: true)
         
     | 
| 
      
 137 
     | 
    
         
            +
                  end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                  # Returns the output from running `yarn licenses list` to get project urls
         
     | 
| 
      
 140 
     | 
    
         
            +
                  def yarn_licenses_command
         
     | 
| 
      
 141 
     | 
    
         
            +
                    args = %w(--json -s --no-progress)
         
     | 
| 
      
 142 
     | 
    
         
            +
                    args << "--production" unless include_non_production?
         
     | 
| 
      
 143 
     | 
    
         
            +
                    Licensed::Shell.execute("yarn", "licenses", "list", *args, allow_failure: true)
         
     | 
| 
      
 144 
     | 
    
         
            +
                  end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                  # Returns whether to include non production dependencies based on the licensed configuration settings
         
     | 
| 
      
 147 
     | 
    
         
            +
                  def include_non_production?
         
     | 
| 
      
 148 
     | 
    
         
            +
                    config.dig("yarn", "production_only") == false
         
     | 
| 
      
 149 
     | 
    
         
            +
                  end
         
     | 
| 
      
 150 
     | 
    
         
            +
                end
         
     | 
| 
      
 151 
     | 
    
         
            +
              end
         
     | 
| 
      
 152 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,146 +1,31 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            require "json"
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            module Licensed
         
     | 
| 
       5 
4 
     | 
    
         
             
              module Sources
         
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                  YARN_NAME_HEAD = "Name".freeze
         
     | 
| 
       11 
     | 
    
         
            -
                  YARN_VERSION_HEAD = "Version".freeze
         
     | 
| 
       12 
     | 
    
         
            -
                  YARN_URL_HEAD = "URL".freeze
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  def enabled?
         
     | 
| 
       15 
     | 
    
         
            -
                    return unless Licensed::Shell.tool_available?("yarn")
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                    config.pwd.join("package.json").exist? && config.pwd.join("yarn.lock").exist?
         
     | 
| 
       18 
     | 
    
         
            -
                  end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                  def enumerate_dependencies
         
     | 
| 
       21 
     | 
    
         
            -
                    packages.map do |name, package|
         
     | 
| 
       22 
     | 
    
         
            -
                      Dependency.new(
         
     | 
| 
       23 
     | 
    
         
            -
                        name: name,
         
     | 
| 
       24 
     | 
    
         
            -
                        version: package["version"],
         
     | 
| 
       25 
     | 
    
         
            -
                        path: package["path"],
         
     | 
| 
       26 
     | 
    
         
            -
                        metadata: {
         
     | 
| 
       27 
     | 
    
         
            -
                          "type"     => Yarn.type,
         
     | 
| 
       28 
     | 
    
         
            -
                          "name"     => package["name"],
         
     | 
| 
       29 
     | 
    
         
            -
                          "homepage" => dependency_urls[package["id"]]
         
     | 
| 
       30 
     | 
    
         
            -
                        }
         
     | 
| 
       31 
     | 
    
         
            -
                      )
         
     | 
| 
       32 
     | 
    
         
            -
                    end
         
     | 
| 
       33 
     | 
    
         
            -
                  end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                  # Finds packages that the current project relies on
         
     | 
| 
       36 
     | 
    
         
            -
                  def packages
         
     | 
| 
       37 
     | 
    
         
            -
                    return [] if yarn_package_tree.nil?
         
     | 
| 
       38 
     | 
    
         
            -
                    all_dependencies = {}
         
     | 
| 
       39 
     | 
    
         
            -
                    recursive_dependencies(yarn_package_tree).each do |name, results|
         
     | 
| 
       40 
     | 
    
         
            -
                      results.uniq! { |package| package["version"] }
         
     | 
| 
       41 
     | 
    
         
            -
                      if results.size == 1
         
     | 
| 
       42 
     | 
    
         
            -
                        # if there is only one package for a name, reference it by name
         
     | 
| 
       43 
     | 
    
         
            -
                        all_dependencies[name] = results[0]
         
     | 
| 
       44 
     | 
    
         
            -
                      else
         
     | 
| 
       45 
     | 
    
         
            -
                        # if there is more than one package for a name, reference each by
         
     | 
| 
       46 
     | 
    
         
            -
                        # "<name>-<version>"
         
     | 
| 
       47 
     | 
    
         
            -
                        results.each do |package|
         
     | 
| 
       48 
     | 
    
         
            -
                          all_dependencies["#{name}-#{package["version"]}"] = package
         
     | 
| 
       49 
     | 
    
         
            -
                        end
         
     | 
| 
       50 
     | 
    
         
            -
                      end
         
     | 
| 
       51 
     | 
    
         
            -
                    end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                    all_dependencies
         
     | 
| 
       54 
     | 
    
         
            -
                  end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                  # Recursively parse dependency JSON data.  Returns a hash mapping the
         
     | 
| 
       57 
     | 
    
         
            -
                  # package name to it's metadata
         
     | 
| 
       58 
     | 
    
         
            -
                  def recursive_dependencies(dependencies, result = {})
         
     | 
| 
       59 
     | 
    
         
            -
                    dependencies.each do |dependency|
         
     | 
| 
       60 
     | 
    
         
            -
                      # "shadow" indicate a dependency requirement only, not a
         
     | 
| 
       61 
     | 
    
         
            -
                      # resolved package identifier
         
     | 
| 
       62 
     | 
    
         
            -
                      next if dependency["shadow"]
         
     | 
| 
       63 
     | 
    
         
            -
                      name, _, version = dependency["name"].rpartition("@")
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                      (result[name] ||= []) << {
         
     | 
| 
       66 
     | 
    
         
            -
                        "id" => dependency["name"],
         
     | 
| 
       67 
     | 
    
         
            -
                        "name" => name,
         
     | 
| 
       68 
     | 
    
         
            -
                        "version" => version,
         
     | 
| 
       69 
     | 
    
         
            -
                        "path" => dependency_paths[dependency["name"]]
         
     | 
| 
       70 
     | 
    
         
            -
                      }
         
     | 
| 
       71 
     | 
    
         
            -
                      recursive_dependencies(dependency["children"], result)
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Yarn
         
     | 
| 
      
 6 
     | 
    
         
            +
                  module ClassMethods
         
     | 
| 
      
 7 
     | 
    
         
            +
                    def type
         
     | 
| 
      
 8 
     | 
    
         
            +
                      "yarn"
         
     | 
| 
       72 
9 
     | 
    
         
             
                    end
         
     | 
| 
       73 
     | 
    
         
            -
                    result
         
     | 
| 
       74 
10 
     | 
    
         
             
                  end
         
     | 
| 
       75 
11 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
                   
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                  def dependency_paths
         
     | 
| 
       79 
     | 
    
         
            -
                    @dependency_paths ||= Dir.glob(config.pwd.join("node_modules/**/package.json")).each_with_object({}) do |file, hsh|
         
     | 
| 
       80 
     | 
    
         
            -
                      dirname = File.dirname(file)
         
     | 
| 
       81 
     | 
    
         
            -
                      json = JSON.parse(File.read(file))
         
     | 
| 
       82 
     | 
    
         
            -
                      hsh["#{json["name"]}@#{json["version"]}"] = dirname
         
     | 
| 
       83 
     | 
    
         
            -
                    end
         
     | 
| 
      
 12 
     | 
    
         
            +
                  def self.included(klass)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    klass.extend ClassMethods
         
     | 
| 
       84 
14 
     | 
    
         
             
                  end
         
     | 
| 
       85 
15 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                   
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                    return  
     | 
| 
       89 
     | 
    
         
            -
                    @yarn_package_tree = begin
         
     | 
| 
       90 
     | 
    
         
            -
                      # parse all lines of output to json and find one that is "type": "tree"
         
     | 
| 
       91 
     | 
    
         
            -
                      tree = yarn_list_command.lines
         
     | 
| 
       92 
     | 
    
         
            -
                                              .map(&:strip)
         
     | 
| 
       93 
     | 
    
         
            -
                                              .map(&JSON.method(:parse))
         
     | 
| 
       94 
     | 
    
         
            -
                                              .find { |json| json["type"] == "tree" }
         
     | 
| 
       95 
     | 
    
         
            -
                      tree&.dig("data", "trees")
         
     | 
| 
       96 
     | 
    
         
            -
                    end
         
     | 
| 
       97 
     | 
    
         
            -
                  end
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                  # Returns a mapping of unique dependency identifiers to urls
         
     | 
| 
       100 
     | 
    
         
            -
                  def dependency_urls
         
     | 
| 
       101 
     | 
    
         
            -
                    @dependency_urls ||= begin
         
     | 
| 
       102 
     | 
    
         
            -
                      table = yarn_licenses_command.lines
         
     | 
| 
       103 
     | 
    
         
            -
                                                   .map(&:strip)
         
     | 
| 
       104 
     | 
    
         
            -
                                                   .map(&JSON.method(:parse))
         
     | 
| 
       105 
     | 
    
         
            -
                                                   .find { |json| json["type"] == "table" }
         
     | 
| 
       106 
     | 
    
         
            -
                      return [] if table.nil?
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                      head = table.dig("data", "head")
         
     | 
| 
       109 
     | 
    
         
            -
                      return [] if head.nil?
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                      name_index = head.index YARN_NAME_HEAD
         
     | 
| 
       112 
     | 
    
         
            -
                      version_index = head.index YARN_VERSION_HEAD
         
     | 
| 
       113 
     | 
    
         
            -
                      url_index = head.index YARN_URL_HEAD
         
     | 
| 
       114 
     | 
    
         
            -
                      return [] if name_index.nil? || version_index.nil? || url_index.nil?
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                      body = table.dig("data", "body")
         
     | 
| 
       117 
     | 
    
         
            -
                      return [] if body.nil?
         
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
                      body.each_with_object({}) do |row, hsh|
         
     | 
| 
       120 
     | 
    
         
            -
                        id = "#{row[name_index]}@#{row[version_index]}"
         
     | 
| 
       121 
     | 
    
         
            -
                        hsh[id] = row[url_index]
         
     | 
| 
       122 
     | 
    
         
            -
                      end
         
     | 
| 
       123 
     | 
    
         
            -
                    end
         
     | 
| 
       124 
     | 
    
         
            -
                  end
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                  # Returns the output from running `yarn list` to get project dependencies
         
     | 
| 
       127 
     | 
    
         
            -
                  def yarn_list_command
         
     | 
| 
       128 
     | 
    
         
            -
                    args = %w(--json -s --no-progress)
         
     | 
| 
       129 
     | 
    
         
            -
                    args << "--production" unless include_non_production?
         
     | 
| 
       130 
     | 
    
         
            -
                    Licensed::Shell.execute("yarn", "list", *args, allow_failure: true)
         
     | 
| 
       131 
     | 
    
         
            -
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  def enabled?
         
     | 
| 
      
 17 
     | 
    
         
            +
                    return unless Licensed::Shell.tool_available?("yarn")
         
     | 
| 
      
 18 
     | 
    
         
            +
                    return unless self.class.version_requirement.satisfied_by?(yarn_version)
         
     | 
| 
       132 
19 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
                  def yarn_licenses_command
         
     | 
| 
       135 
     | 
    
         
            -
                    args = %w(--json -s --no-progress)
         
     | 
| 
       136 
     | 
    
         
            -
                    args << "--production" unless include_non_production?
         
     | 
| 
       137 
     | 
    
         
            -
                    Licensed::Shell.execute("yarn", "licenses", "list", *args, allow_failure: true)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    config.pwd.join("package.json").exist? && config.pwd.join("yarn.lock").exist?
         
     | 
| 
       138 
21 
     | 
    
         
             
                  end
         
     | 
| 
       139 
22 
     | 
    
         | 
| 
       140 
     | 
    
         
            -
                   
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                    config.dig("yarn", "production_only") == false
         
     | 
| 
      
 23 
     | 
    
         
            +
                  def yarn_version
         
     | 
| 
      
 24 
     | 
    
         
            +
                    Gem::Version.new(Licensed::Shell.execute("yarn", "-v"))
         
     | 
| 
       143 
25 
     | 
    
         
             
                  end
         
     | 
| 
       144 
26 
     | 
    
         
             
                end
         
     | 
| 
       145 
27 
     | 
    
         
             
              end
         
     | 
| 
       146 
28 
     | 
    
         
             
            end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            require "licensed/sources/yarn/v1"
         
     | 
| 
      
 31 
     | 
    
         
            +
            require "licensed/sources/yarn/berry"
         
     | 
    
        data/lib/licensed/sources.rb
    CHANGED
    
    | 
         @@ -5,6 +5,7 @@ module Licensed 
     | 
|
| 
       5 
5 
     | 
    
         
             
                require "licensed/sources/bower"
         
     | 
| 
       6 
6 
     | 
    
         
             
                require "licensed/sources/bundler"
         
     | 
| 
       7 
7 
     | 
    
         
             
                require "licensed/sources/cabal"
         
     | 
| 
      
 8 
     | 
    
         
            +
                require "licensed/sources/cargo"
         
     | 
| 
       8 
9 
     | 
    
         
             
                require "licensed/sources/composer"
         
     | 
| 
       9 
10 
     | 
    
         
             
                require "licensed/sources/dep"
         
     | 
| 
       10 
11 
     | 
    
         
             
                require "licensed/sources/git_submodule"
         
     | 
    
        data/lib/licensed/version.rb
    CHANGED
    
    
    
        data/licensed.gemspec
    CHANGED
    
    | 
         @@ -16,7 +16,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       16 
16 
     | 
    
         
             
              spec.homepage      = "https://github.com/github/licensed"
         
     | 
| 
       17 
17 
     | 
    
         
             
              spec.license       = "MIT"
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
              spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test 
     | 
| 
      
 19 
     | 
    
         
            +
              spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test/|script/|docker/|\..+)}) }
         
     | 
| 
       20 
20 
     | 
    
         
             
              spec.bindir        = "exe"
         
     | 
| 
       21 
21 
     | 
    
         
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         
     | 
| 
       22 
22 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: licensed
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 3.4.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - GitHub
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2022-01-08 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: licensee
         
     | 
| 
         @@ -238,13 +238,6 @@ executables: 
     | 
|
| 
       238 
238 
     | 
    
         
             
            extensions: []
         
     | 
| 
       239 
239 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       240 
240 
     | 
    
         
             
            files:
         
     | 
| 
       241 
     | 
    
         
            -
            - ".github/dependabot.yml"
         
     | 
| 
       242 
     | 
    
         
            -
            - ".github/workflows/release.yml"
         
     | 
| 
       243 
     | 
    
         
            -
            - ".github/workflows/test.yml"
         
     | 
| 
       244 
     | 
    
         
            -
            - ".gitignore"
         
     | 
| 
       245 
     | 
    
         
            -
            - ".licensed.yml"
         
     | 
| 
       246 
     | 
    
         
            -
            - ".rubocop.yml"
         
     | 
| 
       247 
     | 
    
         
            -
            - ".ruby-version"
         
     | 
| 
       248 
241 
     | 
    
         
             
            - CHANGELOG.md
         
     | 
| 
       249 
242 
     | 
    
         
             
            - CODE_OF_CONDUCT.md
         
     | 
| 
       250 
243 
     | 
    
         
             
            - CONTRIBUTING.md
         
     | 
| 
         @@ -252,7 +245,6 @@ files: 
     | 
|
| 
       252 
245 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       253 
246 
     | 
    
         
             
            - README.md
         
     | 
| 
       254 
247 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       255 
     | 
    
         
            -
            - docker/Dockerfile.build-linux
         
     | 
| 
       256 
248 
     | 
    
         
             
            - docs/adding_a_new_source.md
         
     | 
| 
       257 
249 
     | 
    
         
             
            - docs/commands/README.md
         
     | 
| 
       258 
250 
     | 
    
         
             
            - docs/commands/cache.md
         
     | 
| 
         @@ -280,6 +272,7 @@ files: 
     | 
|
| 
       280 
272 
     | 
    
         
             
            - docs/sources/bower.md
         
     | 
| 
       281 
273 
     | 
    
         
             
            - docs/sources/bundler.md
         
     | 
| 
       282 
274 
     | 
    
         
             
            - docs/sources/cabal.md
         
     | 
| 
      
 275 
     | 
    
         
            +
            - docs/sources/cargo.md
         
     | 
| 
       283 
276 
     | 
    
         
             
            - docs/sources/composer.md
         
     | 
| 
       284 
277 
     | 
    
         
             
            - docs/sources/dep.md
         
     | 
| 
       285 
278 
     | 
    
         
             
            - docs/sources/git_submodule.md
         
     | 
| 
         @@ -326,6 +319,7 @@ files: 
     | 
|
| 
       326 
319 
     | 
    
         
             
            - lib/licensed/sources/bundler/definition.rb
         
     | 
| 
       327 
320 
     | 
    
         
             
            - lib/licensed/sources/bundler/missing_specification.rb
         
     | 
| 
       328 
321 
     | 
    
         
             
            - lib/licensed/sources/cabal.rb
         
     | 
| 
      
 322 
     | 
    
         
            +
            - lib/licensed/sources/cargo.rb
         
     | 
| 
       329 
323 
     | 
    
         
             
            - lib/licensed/sources/composer.rb
         
     | 
| 
       330 
324 
     | 
    
         
             
            - lib/licensed/sources/dep.rb
         
     | 
| 
       331 
325 
     | 
    
         
             
            - lib/licensed/sources/git_submodule.rb
         
     | 
| 
         @@ -341,31 +335,11 @@ files: 
     | 
|
| 
       341 
335 
     | 
    
         
             
            - lib/licensed/sources/source.rb
         
     | 
| 
       342 
336 
     | 
    
         
             
            - lib/licensed/sources/swift.rb
         
     | 
| 
       343 
337 
     | 
    
         
             
            - lib/licensed/sources/yarn.rb
         
     | 
| 
      
 338 
     | 
    
         
            +
            - lib/licensed/sources/yarn/berry.rb
         
     | 
| 
      
 339 
     | 
    
         
            +
            - lib/licensed/sources/yarn/v1.rb
         
     | 
| 
       344 
340 
     | 
    
         
             
            - lib/licensed/ui/shell.rb
         
     | 
| 
       345 
341 
     | 
    
         
             
            - lib/licensed/version.rb
         
     | 
| 
       346 
342 
     | 
    
         
             
            - licensed.gemspec
         
     | 
| 
       347 
     | 
    
         
            -
            - script/bootstrap
         
     | 
| 
       348 
     | 
    
         
            -
            - script/cibuild
         
     | 
| 
       349 
     | 
    
         
            -
            - script/console
         
     | 
| 
       350 
     | 
    
         
            -
            - script/package
         
     | 
| 
       351 
     | 
    
         
            -
            - script/packages/build
         
     | 
| 
       352 
     | 
    
         
            -
            - script/packages/linux
         
     | 
| 
       353 
     | 
    
         
            -
            - script/packages/mac
         
     | 
| 
       354 
     | 
    
         
            -
            - script/setup
         
     | 
| 
       355 
     | 
    
         
            -
            - script/source-setup/bower
         
     | 
| 
       356 
     | 
    
         
            -
            - script/source-setup/bundler
         
     | 
| 
       357 
     | 
    
         
            -
            - script/source-setup/cabal
         
     | 
| 
       358 
     | 
    
         
            -
            - script/source-setup/composer
         
     | 
| 
       359 
     | 
    
         
            -
            - script/source-setup/git_submodule
         
     | 
| 
       360 
     | 
    
         
            -
            - script/source-setup/go
         
     | 
| 
       361 
     | 
    
         
            -
            - script/source-setup/mix
         
     | 
| 
       362 
     | 
    
         
            -
            - script/source-setup/npm
         
     | 
| 
       363 
     | 
    
         
            -
            - script/source-setup/nuget
         
     | 
| 
       364 
     | 
    
         
            -
            - script/source-setup/pip
         
     | 
| 
       365 
     | 
    
         
            -
            - script/source-setup/pipenv
         
     | 
| 
       366 
     | 
    
         
            -
            - script/source-setup/swift
         
     | 
| 
       367 
     | 
    
         
            -
            - script/source-setup/yarn
         
     | 
| 
       368 
     | 
    
         
            -
            - script/test
         
     | 
| 
       369 
343 
     | 
    
         
             
            homepage: https://github.com/github/licensed
         
     | 
| 
       370 
344 
     | 
    
         
             
            licenses:
         
     | 
| 
       371 
345 
     | 
    
         
             
            - MIT
         
     | 
    
        data/.github/dependabot.yml
    DELETED
    
    | 
         @@ -1,19 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # To get started with Dependabot version updates, you'll need to specify which
         
     | 
| 
       2 
     | 
    
         
            -
            # package ecosystems to update and where the package manifests are located.
         
     | 
| 
       3 
     | 
    
         
            -
            # Please see the documentation for all configuration options:
         
     | 
| 
       4 
     | 
    
         
            -
            # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            version: 2
         
     | 
| 
       7 
     | 
    
         
            -
            updates:
         
     | 
| 
       8 
     | 
    
         
            -
              - package-ecosystem: github-actions
         
     | 
| 
       9 
     | 
    
         
            -
                directory: /
         
     | 
| 
       10 
     | 
    
         
            -
                schedule:
         
     | 
| 
       11 
     | 
    
         
            -
                  interval: daily
         
     | 
| 
       12 
     | 
    
         
            -
              - package-ecosystem: bundler
         
     | 
| 
       13 
     | 
    
         
            -
                directory: /
         
     | 
| 
       14 
     | 
    
         
            -
                schedule:
         
     | 
| 
       15 
     | 
    
         
            -
                  interval: weekly
         
     | 
| 
       16 
     | 
    
         
            -
              - package-ecosystem: docker
         
     | 
| 
       17 
     | 
    
         
            -
                directory: docker
         
     | 
| 
       18 
     | 
    
         
            -
                schedule:
         
     | 
| 
       19 
     | 
    
         
            -
                  interval: weekly
         
     | 
| 
         @@ -1,213 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            name: Build and publish release assets
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            on:
         
     | 
| 
       4 
     | 
    
         
            -
              release:
         
     | 
| 
       5 
     | 
    
         
            -
                types: [created]
         
     | 
| 
       6 
     | 
    
         
            -
              workflow_dispatch:
         
     | 
| 
       7 
     | 
    
         
            -
                inputs:
         
     | 
| 
       8 
     | 
    
         
            -
                  version:
         
     | 
| 
       9 
     | 
    
         
            -
                    description: 'Commit-like version of github/licensed to build package at'
         
     | 
| 
       10 
     | 
    
         
            -
                    required: true
         
     | 
| 
       11 
     | 
    
         
            -
                  release_tag:
         
     | 
| 
       12 
     | 
    
         
            -
                    description: 'Release tag to upload built packages to'
         
     | 
| 
       13 
     | 
    
         
            -
                    required: false
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            jobs:
         
     | 
| 
       16 
     | 
    
         
            -
              vars:
         
     | 
| 
       17 
     | 
    
         
            -
                name: "Gather values for remainder of steps"
         
     | 
| 
       18 
     | 
    
         
            -
                runs-on: ubuntu-latest
         
     | 
| 
       19 
     | 
    
         
            -
                outputs:
         
     | 
| 
       20 
     | 
    
         
            -
                  version: ${{ steps.get_version.outputs.result }}
         
     | 
| 
       21 
     | 
    
         
            -
                  upload_url: ${{ steps.get_url.outputs.result }}
         
     | 
| 
       22 
     | 
    
         
            -
                  ref: ${{ steps.get_ref.outputs.result }}
         
     | 
| 
       23 
     | 
    
         
            -
                steps:
         
     | 
| 
       24 
     | 
    
         
            -
                  - id: get_version
         
     | 
| 
       25 
     | 
    
         
            -
                    name: Get package version
         
     | 
| 
       26 
     | 
    
         
            -
                    uses: actions/github-script@v4.1
         
     | 
| 
       27 
     | 
    
         
            -
                    with:
         
     | 
| 
       28 
     | 
    
         
            -
                      github-token: ${{ secrets.GITHUB_TOKEN }}
         
     | 
| 
       29 
     | 
    
         
            -
                      result-encoding: string
         
     | 
| 
       30 
     | 
    
         
            -
                      script: |
         
     | 
| 
       31 
     | 
    
         
            -
                        let version = "${{ github.event.release.tag_name }}"
         
     | 
| 
       32 
     | 
    
         
            -
                        if (!version) {
         
     | 
| 
       33 
     | 
    
         
            -
                          version = "${{ github.event.inputs.version }}"
         
     | 
| 
       34 
     | 
    
         
            -
                        }
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                        if (!version) {
         
     | 
| 
       37 
     | 
    
         
            -
                          throw new Error("unable to find package build version")
         
     | 
| 
       38 
     | 
    
         
            -
                        }
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                        return version
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                  - id: get_url
         
     | 
| 
       43 
     | 
    
         
            -
                    name: Get release upload url
         
     | 
| 
       44 
     | 
    
         
            -
                    uses: actions/github-script@v4.1
         
     | 
| 
       45 
     | 
    
         
            -
                    with:
         
     | 
| 
       46 
     | 
    
         
            -
                      github-token: ${{ secrets.GITHUB_TOKEN }}
         
     | 
| 
       47 
     | 
    
         
            -
                      result-encoding: string
         
     | 
| 
       48 
     | 
    
         
            -
                      script: |
         
     | 
| 
       49 
     | 
    
         
            -
                        let uploadUrl = "${{ github.event.release.upload_url}}"
         
     | 
| 
       50 
     | 
    
         
            -
                        const tag = "${{ github.event.inputs.release_tag }}"
         
     | 
| 
       51 
     | 
    
         
            -
                        if (!uploadUrl && tag) {
         
     | 
| 
       52 
     | 
    
         
            -
                          const { data: release } = await github.repos.getReleaseByTag({
         
     | 
| 
       53 
     | 
    
         
            -
                            ...context.repo,
         
     | 
| 
       54 
     | 
    
         
            -
                            tag
         
     | 
| 
       55 
     | 
    
         
            -
                          })
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                          if (!release.upload_url) {
         
     | 
| 
       58 
     | 
    
         
            -
                            throw new Error("unable to find a release upload url")
         
     | 
| 
       59 
     | 
    
         
            -
                          }
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                          uploadUrl = release.upload_url
         
     | 
| 
       62 
     | 
    
         
            -
                        }
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                        return uploadUrl
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                  - id: get_ref
         
     | 
| 
       67 
     | 
    
         
            -
                    name: Get checkout ref for custom build scripts
         
     | 
| 
       68 
     | 
    
         
            -
                    uses: actions/github-script@v4.1
         
     | 
| 
       69 
     | 
    
         
            -
                    with:
         
     | 
| 
       70 
     | 
    
         
            -
                      github-token: ${{ secrets.GITHUB_TOKEN }}
         
     | 
| 
       71 
     | 
    
         
            -
                      result-encoding: string
         
     | 
| 
       72 
     | 
    
         
            -
                      script: |
         
     | 
| 
       73 
     | 
    
         
            -
                        let ref = "${{ github.event.release.tag_name }}"
         
     | 
| 
       74 
     | 
    
         
            -
                        if (!ref) {
         
     | 
| 
       75 
     | 
    
         
            -
                          ref = "${{ github.event.ref }}".replace(/refs\/[^\/]+\//, '')
         
     | 
| 
       76 
     | 
    
         
            -
                        }
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                        if (!ref) {
         
     | 
| 
       79 
     | 
    
         
            -
                          throw new Error("unable to find a ref for action")
         
     | 
| 
       80 
     | 
    
         
            -
                        }
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                        return ref
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
              package_linux:
         
     | 
| 
       85 
     | 
    
         
            -
                needs: vars
         
     | 
| 
       86 
     | 
    
         
            -
                runs-on: ubuntu-18.04
         
     | 
| 
       87 
     | 
    
         
            -
                steps:
         
     | 
| 
       88 
     | 
    
         
            -
                - uses: actions/checkout@v2
         
     | 
| 
       89 
     | 
    
         
            -
                  with:
         
     | 
| 
       90 
     | 
    
         
            -
                    # checkout at the ref for the action, separate from the target build version
         
     | 
| 
       91 
     | 
    
         
            -
                    # this allows running build scripts independent of the target version
         
     | 
| 
       92 
     | 
    
         
            -
                    ref: ${{needs.vars.outputs.ref}}
         
     | 
| 
       93 
     | 
    
         
            -
                    fetch-depth: 0
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                - name: Set up Ruby 2.6
         
     | 
| 
       96 
     | 
    
         
            -
                  uses: ruby/setup-ruby@v1
         
     | 
| 
       97 
     | 
    
         
            -
                  with:
         
     | 
| 
       98 
     | 
    
         
            -
                    ruby-version: 2.6
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                - name: Build package
         
     | 
| 
       101 
     | 
    
         
            -
                  run: script/packages/linux
         
     | 
| 
       102 
     | 
    
         
            -
                  env:
         
     | 
| 
       103 
     | 
    
         
            -
                    VERSION: ${{needs.vars.outputs.version}}
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
                - uses: actions/upload-artifact@v2
         
     | 
| 
       106 
     | 
    
         
            -
                  with:
         
     | 
| 
       107 
     | 
    
         
            -
                    name: ${{needs.vars.outputs.version}}-linux
         
     | 
| 
       108 
     | 
    
         
            -
                    path: pkg/${{needs.vars.outputs.version}}/licensed-${{needs.vars.outputs.version}}-linux-x64.tar.gz
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
              package_mac:
         
     | 
| 
       111 
     | 
    
         
            -
                needs: vars
         
     | 
| 
       112 
     | 
    
         
            -
                runs-on: macOS-latest
         
     | 
| 
       113 
     | 
    
         
            -
                steps:
         
     | 
| 
       114 
     | 
    
         
            -
                - uses: actions/checkout@v2
         
     | 
| 
       115 
     | 
    
         
            -
                  with:
         
     | 
| 
       116 
     | 
    
         
            -
                    # checkout at the ref for the action, separate from the target build version
         
     | 
| 
       117 
     | 
    
         
            -
                    # this allows running build scripts independent of the target version
         
     | 
| 
       118 
     | 
    
         
            -
                    ref: ${{needs.vars.outputs.ref}}
         
     | 
| 
       119 
     | 
    
         
            -
                    fetch-depth: 0
         
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
                - name: Set up Ruby 2.6
         
     | 
| 
       122 
     | 
    
         
            -
                  uses: ruby/setup-ruby@v1
         
     | 
| 
       123 
     | 
    
         
            -
                  with:
         
     | 
| 
       124 
     | 
    
         
            -
                    ruby-version: 2.6
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                - name: Build package
         
     | 
| 
       127 
     | 
    
         
            -
                  run: script/packages/mac
         
     | 
| 
       128 
     | 
    
         
            -
                  env:
         
     | 
| 
       129 
     | 
    
         
            -
                    VERSION: ${{needs.vars.outputs.version}}
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                - uses: actions/upload-artifact@v2
         
     | 
| 
       132 
     | 
    
         
            -
                  with:
         
     | 
| 
       133 
     | 
    
         
            -
                    name: ${{needs.vars.outputs.version}}-darwin
         
     | 
| 
       134 
     | 
    
         
            -
                    path: pkg/${{needs.vars.outputs.version}}/licensed-${{needs.vars.outputs.version}}-darwin-x64.tar.gz
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
              build_gem:
         
     | 
| 
       137 
     | 
    
         
            -
                needs: vars
         
     | 
| 
       138 
     | 
    
         
            -
                runs-on: ubuntu-latest
         
     | 
| 
       139 
     | 
    
         
            -
                steps:
         
     | 
| 
       140 
     | 
    
         
            -
                - uses: actions/checkout@v2
         
     | 
| 
       141 
     | 
    
         
            -
                  with:
         
     | 
| 
       142 
     | 
    
         
            -
                    # building a gem doesn't use a different ref from the version input
         
     | 
| 
       143 
     | 
    
         
            -
                    ref: ${{needs.vars.outputs.version}}
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                - name: Set up Ruby 2.6
         
     | 
| 
       146 
     | 
    
         
            -
                  uses: ruby/setup-ruby@v1
         
     | 
| 
       147 
     | 
    
         
            -
                  with:
         
     | 
| 
       148 
     | 
    
         
            -
                    ruby-version: 2.6
         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
                - name: Build gem
         
     | 
| 
       151 
     | 
    
         
            -
                  run: gem build licensed.gemspec -o licensed-${{needs.vars.outputs.version}}.gem
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
                - uses: actions/upload-artifact@v2
         
     | 
| 
       154 
     | 
    
         
            -
                  with:
         
     | 
| 
       155 
     | 
    
         
            -
                    name: ${{needs.vars.outputs.version}}-gem
         
     | 
| 
       156 
     | 
    
         
            -
                    path: licensed-${{needs.vars.outputs.version}}.gem
         
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
              upload_packages:
         
     | 
| 
       159 
     | 
    
         
            -
                if: ${{ needs.vars.outputs.upload_url != '' }}
         
     | 
| 
       160 
     | 
    
         
            -
                runs-on: ubuntu-latest
         
     | 
| 
       161 
     | 
    
         
            -
                needs: [vars, package_linux, package_mac, build_gem]
         
     | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
       163 
     | 
    
         
            -
                steps:
         
     | 
| 
       164 
     | 
    
         
            -
                - name: Set up Ruby 2.6
         
     | 
| 
       165 
     | 
    
         
            -
                  uses: ruby/setup-ruby@v1
         
     | 
| 
       166 
     | 
    
         
            -
                  with:
         
     | 
| 
       167 
     | 
    
         
            -
                    ruby-version: 2.6
         
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
       169 
     | 
    
         
            -
                - name: Download linux package
         
     | 
| 
       170 
     | 
    
         
            -
                  uses: actions/download-artifact@v2
         
     | 
| 
       171 
     | 
    
         
            -
                  with:
         
     | 
| 
       172 
     | 
    
         
            -
                    name: ${{needs.vars.outputs.version}}-linux
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                - name: Download macOS package
         
     | 
| 
       175 
     | 
    
         
            -
                  uses: actions/download-artifact@v2
         
     | 
| 
       176 
     | 
    
         
            -
                  with:
         
     | 
| 
       177 
     | 
    
         
            -
                    name: ${{needs.vars.outputs.version}}-darwin
         
     | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
       179 
     | 
    
         
            -
                - name: Download gem
         
     | 
| 
       180 
     | 
    
         
            -
                  uses: actions/download-artifact@v2
         
     | 
| 
       181 
     | 
    
         
            -
                  with:
         
     | 
| 
       182 
     | 
    
         
            -
                    name: ${{needs.vars.outputs.version}}-gem
         
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
                - name: Publish linux package
         
     | 
| 
       185 
     | 
    
         
            -
                  uses: actions/upload-release-asset@v1
         
     | 
| 
       186 
     | 
    
         
            -
                  env:
         
     | 
| 
       187 
     | 
    
         
            -
                    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         
     | 
| 
       188 
     | 
    
         
            -
                  with:
         
     | 
| 
       189 
     | 
    
         
            -
                    upload_url: ${{ needs.vars.outputs.upload_url }}
         
     | 
| 
       190 
     | 
    
         
            -
                    asset_path: ./licensed-${{needs.vars.outputs.version}}-linux-x64.tar.gz
         
     | 
| 
       191 
     | 
    
         
            -
                    asset_name: licensed-${{needs.vars.outputs.version}}-linux-x64.tar.gz
         
     | 
| 
       192 
     | 
    
         
            -
                    asset_content_type: application/gzip
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                - name: Publish mac package
         
     | 
| 
       195 
     | 
    
         
            -
                  uses: actions/upload-release-asset@v1
         
     | 
| 
       196 
     | 
    
         
            -
                  env:
         
     | 
| 
       197 
     | 
    
         
            -
                    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         
     | 
| 
       198 
     | 
    
         
            -
                  with:
         
     | 
| 
       199 
     | 
    
         
            -
                    upload_url: ${{ needs.vars.outputs.upload_url }}
         
     | 
| 
       200 
     | 
    
         
            -
                    asset_path: ./licensed-${{needs.vars.outputs.version}}-darwin-x64.tar.gz
         
     | 
| 
       201 
     | 
    
         
            -
                    asset_name: licensed-${{needs.vars.outputs.version}}-darwin-x64.tar.gz
         
     | 
| 
       202 
     | 
    
         
            -
                    asset_content_type: application/gzip
         
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
                - name: Publish gem to RubyGems
         
     | 
| 
       205 
     | 
    
         
            -
                  run: |
         
     | 
| 
       206 
     | 
    
         
            -
                    mkdir -p $HOME/.gem
         
     | 
| 
       207 
     | 
    
         
            -
                    touch $HOME/.gem/credentials
         
     | 
| 
       208 
     | 
    
         
            -
                    chmod 0600 $HOME/.gem/credentials
         
     | 
| 
       209 
     | 
    
         
            -
                    printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials
         
     | 
| 
       210 
     | 
    
         
            -
                    gem push $GEM
         
     | 
| 
       211 
     | 
    
         
            -
                  env:
         
     | 
| 
       212 
     | 
    
         
            -
                    RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
         
     | 
| 
       213 
     | 
    
         
            -
                    GEM: licensed-${{needs.vars.outputs.version}}.gem
         
     |