licensed 3.2.0 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -1
- data/README.md +1 -1
- data/docs/commands/status.md +1 -0
- data/docs/sources/cargo.md +19 -0
- data/lib/licensed/commands/cache.rb +4 -2
- data/lib/licensed/commands/command.rb +5 -2
- data/lib/licensed/reporters/status_reporter.rb +1 -1
- data/lib/licensed/sources/bundler/definition.rb +36 -0
- data/lib/licensed/sources/bundler/missing_specification.rb +10 -7
- data/lib/licensed/sources/bundler.rb +33 -69
- data/lib/licensed/sources/cargo.rb +70 -0
- data/lib/licensed/sources/dep.rb +2 -2
- data/lib/licensed/sources/go.rb +3 -3
- data/lib/licensed/sources/helpers/content_versioning.rb +2 -1
- data/lib/licensed/sources/nuget.rb +1 -2
- data/lib/licensed/sources.rb +1 -0
- data/lib/licensed/version.rb +1 -1
- data/licensed.gemspec +5 -5
- metadata +27 -41
- data/.github/workflows/release.yml +0 -213
- data/.github/workflows/test.yml +0 -439
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f452bd7c6a58fdaa9a56cf7085b20fe4ff3a8f3eb214835ba82a52b2ed1ac71c
|
4
|
+
data.tar.gz: 8b3aff33c001623780455c68d23c014746e988b82a44db0fa243829c2be34cd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0bb95e3496257986e52294a7788824043697d8f99d2745c65e30e3a5c255843bc1471cf47ab3f3cd407d597c658b2d82e1bc27a76e6f985b45af6803d0e98a5
|
7
|
+
data.tar.gz: 93eb593c4389bff724a0a41be7c583e96541bfc308a9c331bf5d34c35217c98160e026733a49cc07b93b654b23e4507a447dbd5ab9ef8f1596a0e38139187757
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,49 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## 3.3.0
|
10
|
+
|
11
|
+
2021-09-18
|
12
|
+
|
13
|
+
### Added
|
14
|
+
|
15
|
+
- New cargo source enumerates rust dependencies (https://github.com/github/licensed/pull/404)
|
16
|
+
|
17
|
+
### Changed
|
18
|
+
|
19
|
+
- Removed non-functional files from gem builds (https://github.com/github/licensed/pull/405)
|
20
|
+
|
21
|
+
## 3.2.3
|
22
|
+
|
23
|
+
2021-09-14
|
24
|
+
|
25
|
+
### Fixed
|
26
|
+
|
27
|
+
- Bundler source will no longer infinitely recurse when enumerating specifications (https://github.com/github/licensed/pull/402)
|
28
|
+
- Using the `--sources` command line option will no longer delete skipped sources' cached files (https://github.com/github/licensed/pull/401)
|
29
|
+
|
30
|
+
## 3.2.2
|
31
|
+
|
32
|
+
2021-09-09
|
33
|
+
|
34
|
+
### Fixed
|
35
|
+
|
36
|
+
- Bundler source works properly again when used outside of `bundle exec` (https://github.com/github/licensed/pull/397)
|
37
|
+
|
38
|
+
## 3.2.1
|
39
|
+
|
40
|
+
2021-09-06
|
41
|
+
|
42
|
+
### Changed
|
43
|
+
|
44
|
+
- Updated multiple dependency versions (:tada: @mmorel-35 https://github.com/github/licensed/pull/385, https://github.com/github/licensed/pull/389)
|
45
|
+
- Go homepage links use pkg.go.dev instead of godoc.org (:tada: @mmorel-35 https://github.com/github/licensed/commit/73cfbbe954a3e8c8cbaf8b68253053b157e01b79)
|
46
|
+
- Local development ruby version changed to 2.7.4 (https://github.com/github/licensed/pull/393)
|
47
|
+
|
48
|
+
### Fixed
|
49
|
+
|
50
|
+
- Bundler source correctly finds platform specific dependencies (https://github.com/github/licensed/pull/392)
|
51
|
+
|
9
52
|
## 3.2.0
|
10
53
|
|
11
54
|
2021-08-19
|
@@ -466,4 +509,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
466
509
|
|
467
510
|
Initial release :tada:
|
468
511
|
|
469
|
-
[Unreleased]: https://github.com/github/licensed/compare/3.
|
512
|
+
[Unreleased]: https://github.com/github/licensed/compare/3.3.0...HEAD
|
data/README.md
CHANGED
@@ -84,7 +84,7 @@ A configuration file is required for most commands. See the [configuration file
|
|
84
84
|
|
85
85
|
### Available dependency sources
|
86
86
|
|
87
|
-
Licensed can enumerate dependency for many languages, package managers, and frameworks. See the [sources documentation](./docs/sources) for the list of currently available sources. Sources can be explicitly enabled and disabled as a [configuration option](./docs/configuration/
|
87
|
+
Licensed can enumerate dependency for many languages, package managers, and frameworks. See the [sources documentation](./docs/sources) for the list of currently available sources. Sources can be explicitly enabled and disabled as a [configuration option](./docs/configuration/dependency_source_enumerators.md.md).
|
88
88
|
|
89
89
|
### Automation
|
90
90
|
|
data/docs/commands/status.md
CHANGED
@@ -65,6 +65,7 @@ If the dependency does not include license text but does specify that it uses a
|
|
65
65
|
**Resolution:** Review the dependency's usage and specified license with someone familiar with OSS licensing and compliance rules to determine whether the dependency is allowable. Some common resolutions:
|
66
66
|
|
67
67
|
1. The dependency's specified license text differed enough from the standard license text that it was not recognized and classified as `other`. If, with human review, the license text is recognizable then update the `license: other` value in the cached metadata file to the correct license.
|
68
|
+
- An updated classification will persist through version upgrades until the detected license contents have changed. The determination is made by [licensee/licensee](https://github.com/licensee/licensee), the library which this tool uses to detect and classify license contents.
|
68
69
|
1. The dependency might need to be marked as [ignored] or [reviewed] if either of those scenarios are applicable.
|
69
70
|
1. If the used license should be allowable without review (if your entity has a legal team, they may want to review this assessment), ensure the license SPDX is set as [allowed] in the licensed configuration file.
|
70
71
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Cargo
|
2
|
+
|
3
|
+
The cargo source will detect dependencies when `Cargo.toml` is found at an apps `source_path`. The source uses the `cargo metadata` CLI and reports on all dependencies that are listed in the output in `resolve.nodes`, excluding packages that are listed in `workspace_members`.
|
4
|
+
|
5
|
+
## Metadata CLI options
|
6
|
+
|
7
|
+
Licensed by default runs `cargo metadata --format-version=1`. You can specify additional CLI options by specifying them in your licensed configuration file under `cargo.metadata_options`. The configuration can be set as a string, or as an array of strings for multiple options.
|
8
|
+
|
9
|
+
```yml
|
10
|
+
cargo:
|
11
|
+
metadata_options: '--all-features'
|
12
|
+
```
|
13
|
+
|
14
|
+
```yml
|
15
|
+
cargo:
|
16
|
+
metadata_options:
|
17
|
+
- '--all-features'
|
18
|
+
- '--filter-platform x86_64-pc-windows-msvc'
|
19
|
+
```
|
@@ -39,11 +39,13 @@ module Licensed
|
|
39
39
|
#
|
40
40
|
# Returns whether the command succeeded for the dependency source enumerator
|
41
41
|
def run_source(app, source, report)
|
42
|
+
result = super
|
43
|
+
|
42
44
|
# add the full cache path to the list of cache paths
|
43
45
|
# that should be cleaned up after the command run
|
44
|
-
cache_paths << app.cache_path.join(source.class.type)
|
46
|
+
cache_paths << app.cache_path.join(source.class.type) unless result == :skipped
|
45
47
|
|
46
|
-
|
48
|
+
result
|
47
49
|
end
|
48
50
|
|
49
51
|
# Cache dependency record data.
|
@@ -121,13 +121,16 @@ module Licensed
|
|
121
121
|
# source - A dependency source enumerator
|
122
122
|
# report - A report object for this source
|
123
123
|
#
|
124
|
-
# Returns whether the command succeeded for the dependency source enumerator
|
124
|
+
# Returns whether the command succeeded, failed, or was skipped for the dependency source enumerator
|
125
125
|
def run_source(app, source, report)
|
126
126
|
reporter.begin_report_source(source, report)
|
127
127
|
|
128
128
|
if !sources_overrides.empty? && !sources_overrides.include?(source.class.type)
|
129
129
|
report.warnings << "skipped source"
|
130
|
-
|
130
|
+
|
131
|
+
# return a symbol to speficy the source was skipped.
|
132
|
+
# This is truthy and will result in the source being considered successful
|
133
|
+
return :skipped
|
131
134
|
end
|
132
135
|
|
133
136
|
dependencies = source.dependencies.sort_by { |dependency| dependency.name }
|
@@ -48,7 +48,7 @@ module Licensed
|
|
48
48
|
|
49
49
|
errored_reports = all_reports.select { |r| r.errors.any? }.to_a
|
50
50
|
|
51
|
-
dependency_count = all_reports.
|
51
|
+
dependency_count = all_reports.count { |r| r.target.is_a?(Licensed::Dependency) }
|
52
52
|
error_count = errored_reports.sum { |r| r.errors.size }
|
53
53
|
|
54
54
|
if error_count > 0
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Licensed
|
4
|
+
module Bundler
|
5
|
+
module DefinitionExtensions
|
6
|
+
attr_accessor :force_exclude_groups
|
7
|
+
|
8
|
+
# Override specs to avoid logic that would raise Gem::NotFound
|
9
|
+
# which is handled in this ./missing_specification.rb, and to not add
|
10
|
+
# bundler as a dependency if it's not a user-requested gem.
|
11
|
+
#
|
12
|
+
# Newer versions of Bundler have changed the implementation of specs_for
|
13
|
+
# as well which no longer calls this function. Overriding this function
|
14
|
+
# gives a stable access point for licensed
|
15
|
+
def specs
|
16
|
+
@specs ||= begin
|
17
|
+
specs = resolve.materialize(requested_dependencies)
|
18
|
+
|
19
|
+
all_dependencies = requested_dependencies.concat(specs.flat_map(&:dependencies))
|
20
|
+
if all_dependencies.any? { |d| d.name == "bundler" } && !specs["bundler"].any?
|
21
|
+
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", ::Bundler::VERSION)).last
|
22
|
+
specs["bundler"] = bundler
|
23
|
+
end
|
24
|
+
|
25
|
+
specs
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Override requested_groups to also exclude any groups that are
|
30
|
+
# in the "bundler.without" section of the licensed configuration file.
|
31
|
+
def requested_groups
|
32
|
+
super - Array(force_exclude_groups)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -38,17 +38,20 @@ module Licensed
|
|
38
38
|
"could not find #{name} (#{version}) in any sources"
|
39
39
|
end
|
40
40
|
end
|
41
|
+
|
42
|
+
module LazySpecification
|
43
|
+
def __materialize__
|
44
|
+
spec = super
|
45
|
+
return spec if spec
|
46
|
+
|
47
|
+
Licensed::Bundler::MissingSpecification.new(name: name, version: version, platform: platform, source: source)
|
48
|
+
end
|
49
|
+
end
|
41
50
|
end
|
42
51
|
end
|
43
52
|
|
44
53
|
module Bundler
|
45
54
|
class LazySpecification
|
46
|
-
|
47
|
-
def __materialize__
|
48
|
-
spec = orig_materialize
|
49
|
-
return spec if spec
|
50
|
-
|
51
|
-
Licensed::Bundler::MissingSpecification.new(name: name, version: version, platform: platform, source: source)
|
52
|
-
end
|
55
|
+
prepend ::Licensed::Bundler::LazySpecification
|
53
56
|
end
|
54
57
|
end
|
@@ -3,6 +3,7 @@ require "delegate"
|
|
3
3
|
begin
|
4
4
|
require "bundler"
|
5
5
|
require "licensed/sources/bundler/missing_specification"
|
6
|
+
require "licensed/sources/bundler/definition"
|
6
7
|
rescue LoadError
|
7
8
|
end
|
8
9
|
|
@@ -37,7 +38,6 @@ module Licensed
|
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
40
|
-
GEMFILES = { "Gemfile" => "Gemfile.lock", "gems.rb" => "gems.locked" }
|
41
41
|
DEFAULT_WITHOUT_GROUPS = %i{development test}
|
42
42
|
RUBY_PACKER_ERROR = "The bundler source cannot be used from the executable built with ruby-packer. Please install licensed using `gem install` or using bundler."
|
43
43
|
|
@@ -45,15 +45,20 @@ module Licensed
|
|
45
45
|
# running a ruby-packer-built licensed exe when ruby isn't available
|
46
46
|
# could lead to errors if the host ruby doesn't exist
|
47
47
|
return false if ruby_packer? && !Licensed::Shell.tool_available?("ruby")
|
48
|
-
|
48
|
+
|
49
|
+
# if Bundler isn't loaded, this enumerator won't work!
|
50
|
+
return false unless defined?(::Bundler)
|
51
|
+
|
52
|
+
with_application_environment { ::Bundler.default_lockfile&.exist? }
|
53
|
+
rescue ::Bundler::GemfileNotFound
|
54
|
+
false
|
49
55
|
end
|
50
56
|
|
51
57
|
def enumerate_dependencies
|
52
58
|
raise Licensed::Sources::Source::Error.new(RUBY_PACKER_ERROR) if ruby_packer?
|
53
59
|
|
54
|
-
|
55
|
-
specs.map do |spec|
|
56
|
-
next if spec.name == "bundler" && !include_bundler?
|
60
|
+
with_application_environment do
|
61
|
+
definition.specs.map do |spec|
|
57
62
|
next if spec.name == config["name"]
|
58
63
|
|
59
64
|
error = spec.error if spec.respond_to?(:error)
|
@@ -73,41 +78,13 @@ module Licensed
|
|
73
78
|
end
|
74
79
|
end
|
75
80
|
|
76
|
-
# Returns an array of Gem::Specifications for all gem dependencies
|
77
|
-
def specs
|
78
|
-
@specs ||= definition.specs_for(groups)
|
79
|
-
end
|
80
|
-
|
81
|
-
# Returns whether to include bundler as a listed dependency of the project
|
82
|
-
def include_bundler?
|
83
|
-
@include_bundler ||= begin
|
84
|
-
# include if bundler is listed as a direct dependency that should be included
|
85
|
-
requested_dependencies = definition.dependencies.select { |d| (d.groups & groups).any? && d.should_include? }
|
86
|
-
return true if requested_dependencies.any? { |d| d.name == "bundler" }
|
87
|
-
# include if bundler is an indirect dependency
|
88
|
-
return true if specs.flat_map(&:dependencies).any? { |d| d.name == "bundler" }
|
89
|
-
false
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Build the bundler definition
|
94
81
|
def definition
|
95
|
-
@definition ||=
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
@groups ||= definition.groups - bundler_setting_array(:without) + bundler_setting_array(:with) - exclude_groups
|
102
|
-
end
|
103
|
-
|
104
|
-
# Returns a bundler setting as an array.
|
105
|
-
# Depending on the version of bundler, array values are either returned as
|
106
|
-
# a raw string ("a:b:c") or as an array ([:a, :b, :c])
|
107
|
-
def bundler_setting_array(key)
|
108
|
-
setting = ::Bundler.settings[key]
|
109
|
-
setting = setting.split(":").map(&:to_sym) if setting.is_a?(String)
|
110
|
-
Array(setting)
|
82
|
+
@definition ||= begin
|
83
|
+
definition = ::Bundler::Definition.build(::Bundler.default_gemfile, ::Bundler.default_lockfile, nil)
|
84
|
+
definition.extend Licensed::Bundler::DefinitionExtensions
|
85
|
+
definition.force_exclude_groups = exclude_groups
|
86
|
+
definition
|
87
|
+
end
|
111
88
|
end
|
112
89
|
|
113
90
|
# Returns any groups to exclude specified from both licensed configuration
|
@@ -121,46 +98,33 @@ module Licensed
|
|
121
98
|
end
|
122
99
|
end
|
123
100
|
|
124
|
-
#
|
125
|
-
def
|
126
|
-
|
127
|
-
.map { |g| config.pwd.join g }
|
128
|
-
.find { |f| f.exist? }
|
129
|
-
end
|
101
|
+
# helper to clear all bundler environment around a yielded block
|
102
|
+
def with_application_environment
|
103
|
+
backup = nil
|
130
104
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
end
|
105
|
+
::Bundler.ui.silence do
|
106
|
+
if ::Bundler.root != config.source_path
|
107
|
+
backup = ENV.to_hash
|
108
|
+
ENV.replace(::Bundler.original_env)
|
136
109
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
bundler_ui, ::Bundler.ui = ::Bundler.ui, ::Bundler::UI::Silent.new
|
110
|
+
# reset bundler to load from the current app's source path
|
111
|
+
::Bundler.reset!
|
112
|
+
end
|
141
113
|
|
142
|
-
|
143
|
-
|
144
|
-
# force bundler to use the local gem file
|
145
|
-
original_bundle_gemfile, ENV["BUNDLE_GEMFILE"] = ENV["BUNDLE_GEMFILE"], gemfile_path.to_s
|
114
|
+
# ensure the bundler environment is loaded before enumeration
|
115
|
+
::Bundler.load
|
146
116
|
|
147
|
-
|
148
|
-
::Bundler.reset!
|
149
|
-
# and re-configure with settings for current directory
|
150
|
-
::Bundler.configure
|
117
|
+
yield
|
151
118
|
end
|
152
|
-
|
153
|
-
yield
|
154
119
|
ensure
|
155
|
-
if
|
156
|
-
ENV["BUNDLE_GEMFILE"] = original_bundle_gemfile
|
157
|
-
|
120
|
+
if backup
|
158
121
|
# restore bundler configuration
|
122
|
+
ENV.replace(backup)
|
159
123
|
::Bundler.reset!
|
160
|
-
::Bundler.configure
|
161
124
|
end
|
162
125
|
|
163
|
-
|
126
|
+
# reload the bundler environment after enumeration
|
127
|
+
::Bundler.load
|
164
128
|
end
|
165
129
|
|
166
130
|
# Returns whether the current licensed execution is running ruby-packer
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
module Licensed
|
6
|
+
module Sources
|
7
|
+
class Cargo < Source
|
8
|
+
# Source is enabled when the cargo tool and Cargo.toml manifest file are available
|
9
|
+
def enabled?
|
10
|
+
return false unless Licensed::Shell.tool_available?("cargo")
|
11
|
+
config.pwd.join("Cargo.toml").exist?
|
12
|
+
end
|
13
|
+
|
14
|
+
def enumerate_dependencies
|
15
|
+
packages.map do |package|
|
16
|
+
Dependency.new(
|
17
|
+
name: "#{package["name"]}-#{package["version"]}",
|
18
|
+
version: package["version"],
|
19
|
+
path: File.dirname(package["manifest_path"]),
|
20
|
+
metadata: {
|
21
|
+
"name" => package["name"],
|
22
|
+
"type" => Cargo.type,
|
23
|
+
"summary" => package["description"],
|
24
|
+
"homepage" => package["homepage"]
|
25
|
+
}
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns the package data for all dependencies used to build the current package
|
31
|
+
def packages
|
32
|
+
cargo_metadata_resolved_node_ids.map { |id| cargo_metadata_packages[id] }
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the ids of all resolved nodes used to build the current package
|
36
|
+
def cargo_metadata_resolved_node_ids
|
37
|
+
cargo_metadata.dig("resolve", "nodes")
|
38
|
+
.map { |node| node["id"] }
|
39
|
+
.reject { |id| cargo_metadata_workspace_members.include?(id) }
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns a hash of id => package pairs sourced from the "packages" cargo metadata property
|
44
|
+
def cargo_metadata_packages
|
45
|
+
@cargo_metadata_packages ||= cargo_metadata["packages"].each_with_object({}) do |package, hsh|
|
46
|
+
hsh[package["id"]] = package
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns a set of the ids of packages in the current workspace
|
51
|
+
def cargo_metadata_workspace_members
|
52
|
+
@cargo_metadata_workspace_members ||= Set.new(Array(cargo_metadata["workspace_members"]))
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns parsed JSON metadata returned from the cargo CLI
|
56
|
+
def cargo_metadata
|
57
|
+
@cargo_metadata ||= JSON.parse(cargo_metadata_command)
|
58
|
+
rescue JSON::ParserError => e
|
59
|
+
message = "Licensed was unable to parse the output from 'cargo metadata'. JSON Error: #{e.message}"
|
60
|
+
raise Licensed::Sources::Source::Error, message
|
61
|
+
end
|
62
|
+
|
63
|
+
# Runs a command to get cargo metadata for the current package
|
64
|
+
def cargo_metadata_command
|
65
|
+
options = Array(config.dig("cargo", "metadata_options")).flat_map(&:split)
|
66
|
+
Licensed::Shell.execute("cargo", "metadata", "--format-version=1", *options)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/licensed/sources/dep.rb
CHANGED
@@ -40,10 +40,10 @@ module Licensed
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
# Returns the
|
43
|
+
# Returns the pkg.go.dev page for a package.
|
44
44
|
def homepage(import_path)
|
45
45
|
return unless import_path
|
46
|
-
"https://
|
46
|
+
"https://pkg.go.dev/#{import_path}"
|
47
47
|
end
|
48
48
|
|
49
49
|
# Returns whether the package is part of the go std list. Replaces
|
data/lib/licensed/sources/go.rb
CHANGED
@@ -98,7 +98,7 @@ module Licensed
|
|
98
98
|
# Returns whether the package is local to the current project
|
99
99
|
def local_package?(package)
|
100
100
|
return false unless package && package["Dir"]
|
101
|
-
return false unless File.fnmatch?("#{config.root
|
101
|
+
return false unless File.fnmatch?("#{config.root}*", package["Dir"], File::FNM_CASEFOLD)
|
102
102
|
vendored_path_parts(package).nil?
|
103
103
|
end
|
104
104
|
|
@@ -132,10 +132,10 @@ module Licensed
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
-
# Returns the
|
135
|
+
# Returns the pkg.go.dev page for a package.
|
136
136
|
def homepage(import_path)
|
137
137
|
return unless import_path
|
138
|
-
"https://
|
138
|
+
"https://pkg.go.dev/#{import_path}"
|
139
139
|
end
|
140
140
|
|
141
141
|
# Returns the root directory to search for a package license
|
@@ -61,11 +61,12 @@ module Licensed
|
|
61
61
|
|
62
62
|
paths = paths.compact.select { |path| File.file?(path) }
|
63
63
|
return if paths.empty?
|
64
|
-
|
64
|
+
# rubocop:disable GitHub/InsecureHashAlgorithm
|
65
65
|
paths.sort
|
66
66
|
.reduce(Digest::XXHash64.new, :file)
|
67
67
|
.digest
|
68
68
|
.to_s(16) # convert to hex
|
69
|
+
# rubocop:enable GitHub/InsecureHashAlgorithm
|
69
70
|
end
|
70
71
|
end
|
71
72
|
end
|
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"]
|
@@ -26,16 +26,16 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency "licensee", ">= 9.14.0", "< 10.0.0"
|
27
27
|
spec.add_dependency "thor", ">= 0.19"
|
28
28
|
spec.add_dependency "pathname-common_prefix", "~> 0.0.1"
|
29
|
-
spec.add_dependency "tomlrb", "
|
29
|
+
spec.add_dependency "tomlrb", ">= 1.2", "< 3.0"
|
30
30
|
spec.add_dependency "bundler", ">= 1.10"
|
31
31
|
spec.add_dependency "ruby-xxHash", "~> 0.4"
|
32
32
|
spec.add_dependency "parallel", ">= 0.18.0"
|
33
|
-
spec.add_dependency "reverse_markdown", "
|
33
|
+
spec.add_dependency "reverse_markdown", ">= 1", "< 3"
|
34
34
|
|
35
35
|
spec.add_development_dependency "rake", ">= 12.3.3"
|
36
36
|
spec.add_development_dependency "minitest", "~> 5.8"
|
37
37
|
spec.add_development_dependency "mocha", "~> 1.0"
|
38
|
-
spec.add_development_dependency "rubocop", "~> 0.49", "<
|
38
|
+
spec.add_development_dependency "rubocop", "~> 0.49", "< 1.20"
|
39
39
|
spec.add_development_dependency "rubocop-github", "~> 0.6"
|
40
|
-
spec.add_development_dependency "byebug", "~>
|
40
|
+
spec.add_development_dependency "byebug", "~> 11.0.1"
|
41
41
|
end
|