license_scout 1.3.17 → 2.0.2
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/README.md +195 -0
- data/bin/license_scout +3 -59
- data/bin/mix_lock_json +0 -0
- data/bin/rebar_lock_json +0 -0
- data/lib/license_scout/cli.rb +99 -0
- data/lib/license_scout/collector.rb +25 -77
- data/lib/license_scout/config.rb +94 -0
- data/lib/license_scout/data/dependeny_manifest_v2_schema.json +62 -0
- data/lib/license_scout/data/exceptions.json +306 -0
- data/lib/license_scout/data/licenses.json +4653 -0
- data/lib/license_scout/dependency.rb +79 -7
- data/lib/license_scout/dependency_manager/base.rb +74 -42
- data/lib/license_scout/dependency_manager/berkshelf.rb +25 -50
- data/lib/license_scout/dependency_manager/bundler/_bundler_script.rb +1 -1
- data/lib/license_scout/dependency_manager/bundler.rb +47 -69
- data/lib/license_scout/dependency_manager/cpanm.rb +62 -112
- data/lib/license_scout/dependency_manager/dep.rb +29 -36
- data/lib/license_scout/dependency_manager/glide.rb +25 -36
- data/lib/license_scout/dependency_manager/godep.rb +27 -26
- data/lib/license_scout/dependency_manager/habitat.rb +126 -0
- data/lib/license_scout/dependency_manager/mix.rb +105 -0
- data/lib/license_scout/dependency_manager/npm.rb +30 -86
- data/lib/license_scout/dependency_manager/rebar.rb +26 -45
- data/lib/license_scout/dependency_manager.rb +19 -5
- data/lib/license_scout/exceptions.rb +2 -43
- data/lib/license_scout/license.rb +126 -0
- data/lib/license_scout/{license_file_analyzer.rb → log.rb} +4 -6
- data/lib/license_scout/reporter.rb +149 -55
- data/lib/license_scout/spdx.rb +123 -0
- data/lib/license_scout/version.rb +1 -1
- data/lib/license_scout.rb +2 -0
- data/native_parsers/mix_lock_json/README.md +21 -0
- data/native_parsers/mix_lock_json/lib/mix_lock_json.ex +20 -0
- data/native_parsers/mix_lock_json/mix.exs +31 -0
- data/native_parsers/mix_lock_json/mix.lock +3 -0
- data/{erl_src → native_parsers}/rebar_lock_json/rebar.lock +2 -2
- metadata +144 -67
- data/lib/license_scout/canonical_licenses/BSD-2-Clause.txt +0 -19
- data/lib/license_scout/canonical_licenses/BSD-3-Clause.txt +0 -27
- data/lib/license_scout/canonical_licenses/BSD-4-Clause.txt +0 -31
- data/lib/license_scout/canonical_licenses/Chef-MLSA.txt +0 -5
- data/lib/license_scout/canonical_licenses/ISC.txt +0 -14
- data/lib/license_scout/canonical_licenses/MIT.txt +0 -20
- data/lib/license_scout/dependency_manager/bundler/LICENSE.md +0 -23
- data/lib/license_scout/dependency_manager/json/README.md +0 -392
- data/lib/license_scout/dependency_manager/manual.rb +0 -67
- data/lib/license_scout/license_file_analyzer/any_matcher.rb +0 -37
- data/lib/license_scout/license_file_analyzer/definitions.rb +0 -219
- data/lib/license_scout/license_file_analyzer/header_matcher.rb +0 -34
- data/lib/license_scout/license_file_analyzer/matcher.rb +0 -46
- data/lib/license_scout/license_file_analyzer/template.rb +0 -45
- data/lib/license_scout/license_file_analyzer/templates/Apache2-short.txt +0 -11
- data/lib/license_scout/license_file_analyzer/templates/Apache2.txt +0 -170
- data/lib/license_scout/license_file_analyzer/templates/BSD-2-Clause-bullets.txt +0 -18
- data/lib/license_scout/license_file_analyzer/templates/BSD-2-Clause.txt +0 -19
- data/lib/license_scout/license_file_analyzer/templates/BSD-3-Clause-alt-format.txt +0 -24
- data/lib/license_scout/license_file_analyzer/templates/BSD-3-Clause.txt +0 -21
- data/lib/license_scout/license_file_analyzer/templates/BSD.txt +0 -24
- data/lib/license_scout/license_file_analyzer/templates/Chef-MLSA.txt +0 -5
- data/lib/license_scout/license_file_analyzer/templates/EPLICENSE.txt +0 -286
- data/lib/license_scout/license_file_analyzer/templates/GPL-2.0.txt +0 -339
- data/lib/license_scout/license_file_analyzer/templates/GPL-3.0.txt +0 -674
- data/lib/license_scout/license_file_analyzer/templates/ISC.txt +0 -2
- data/lib/license_scout/license_file_analyzer/templates/LGPL-3.0.txt +0 -165
- data/lib/license_scout/license_file_analyzer/templates/MIT.txt +0 -9
- data/lib/license_scout/license_file_analyzer/templates/MPL2.txt +0 -373
- data/lib/license_scout/license_file_analyzer/templates/Python-2.0.txt +0 -47
- data/lib/license_scout/license_file_analyzer/templates/Ruby.txt +0 -52
- data/lib/license_scout/license_file_analyzer/text.rb +0 -46
- data/lib/license_scout/net_fetcher.rb +0 -106
- data/lib/license_scout/options.rb +0 -47
- data/lib/license_scout/overrides.rb +0 -1125
- /data/{erl_src → native_parsers}/rebar_lock_json/README.md +0 -0
- /data/{erl_src → native_parsers}/rebar_lock_json/rebar.config +0 -0
- /data/{erl_src → native_parsers}/rebar_lock_json/src/rebar_lock_json.app.src +0 -0
- /data/{erl_src → native_parsers}/rebar_lock_json/src/rebar_lock_json.erl +0 -0
@@ -15,97 +15,191 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
require "ffi_yajl"
|
18
|
+
require "ffi_yajl"
|
19
|
+
require "terminal-table"
|
19
20
|
|
20
21
|
require "license_scout/exceptions"
|
21
22
|
|
22
23
|
module LicenseScout
|
23
24
|
class Reporter
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
class Result
|
27
|
+
class << self
|
28
|
+
def success(dependency)
|
29
|
+
new(dependency, nil, true)
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
def failure(dependency, reason)
|
33
|
+
new(dependency, reason, false)
|
34
|
+
end
|
35
|
+
end
|
33
36
|
|
34
|
-
|
37
|
+
attr_reader :dependency
|
38
|
+
attr_reader :reason
|
35
39
|
|
36
|
-
|
40
|
+
def initialize(dependency, reason, did_succeed)
|
41
|
+
@dependency = dependency
|
42
|
+
@reason = reason
|
43
|
+
@did_succeed = did_succeed
|
44
|
+
end
|
37
45
|
|
38
|
-
|
46
|
+
def <=>(other)
|
47
|
+
dependency.path <=> other.dependency.path
|
48
|
+
end
|
39
49
|
|
40
|
-
|
50
|
+
def succeeded?
|
51
|
+
@did_succeed
|
52
|
+
end
|
41
53
|
|
42
|
-
|
43
|
-
|
54
|
+
def dependency_string
|
55
|
+
dependency.uid
|
56
|
+
end
|
44
57
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
problem_deps += 1
|
49
|
-
report.concat(problems)
|
50
|
-
end
|
51
|
-
end
|
58
|
+
def license_string
|
59
|
+
dependency.license.records.map(&:id).compact.uniq.join(", ")
|
60
|
+
end
|
52
61
|
|
53
|
-
|
54
|
-
|
62
|
+
def reason_string
|
63
|
+
case reason
|
64
|
+
when :not_allowed
|
65
|
+
"Not Allowed"
|
66
|
+
when :flagged
|
67
|
+
"Flagged"
|
68
|
+
when :undetermined
|
69
|
+
"Undetermined"
|
70
|
+
when :missing
|
71
|
+
"Missing"
|
72
|
+
else
|
73
|
+
"OK"
|
55
74
|
end
|
56
75
|
end
|
76
|
+
end
|
57
77
|
|
58
|
-
|
78
|
+
attr_reader :all_dependencies
|
79
|
+
attr_reader :results
|
80
|
+
attr_reader :dependency_license_manifest
|
81
|
+
|
82
|
+
def initialize(all_dependencies)
|
83
|
+
@all_dependencies = all_dependencies.sort
|
84
|
+
@results = {}
|
85
|
+
@did_fail = false
|
86
|
+
@needs_fallback = false
|
87
|
+
@needs_exception = false
|
59
88
|
end
|
60
89
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
90
|
+
def report
|
91
|
+
generate_dependency_license_manifest
|
92
|
+
save_manifest_file
|
93
|
+
detect_problems
|
94
|
+
evaluate_results
|
95
|
+
end
|
66
96
|
|
67
|
-
|
68
|
-
problems << "Dependency '#{dependency["name"]}' under '#{dependency_manager}' is missing version information."
|
69
|
-
end
|
97
|
+
private
|
70
98
|
|
71
|
-
|
72
|
-
|
99
|
+
def save_manifest_file
|
100
|
+
LicenseScout::Log.info("[reporter] Writing dependency license manifest written to #{license_manifest_path}")
|
101
|
+
File.open(license_manifest_path, "w+") do |file|
|
102
|
+
file.print(FFI_Yajl::Encoder.encode(dependency_license_manifest, pretty: true))
|
73
103
|
end
|
104
|
+
end
|
74
105
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
106
|
+
def detect_problems
|
107
|
+
LicenseScout::Log.info("[reporter] Analyzing dependency's license information against requirements")
|
108
|
+
|
109
|
+
LicenseScout::Log.info("[reporter] Allowed licenses: #{LicenseScout::Config.allowed_licenses.join(", ")}") unless LicenseScout::Config.allowed_licenses.empty?
|
110
|
+
LicenseScout::Log.info("[reporter] Flagged licenses: #{LicenseScout::Config.flagged_licenses.join(", ")}") unless LicenseScout::Config.flagged_licenses.empty?
|
111
|
+
|
112
|
+
all_dependencies.each do |dependency|
|
113
|
+
@results[dependency.type] ||= []
|
114
|
+
|
115
|
+
if dependency.license.records.empty?
|
116
|
+
@results[dependency.type] << Result.failure(dependency, :missing)
|
117
|
+
@did_fail = true
|
118
|
+
@needs_fallback = true
|
119
|
+
elsif dependency.license.undetermined?
|
120
|
+
@results[dependency.type] << Result.failure(dependency, :undetermined)
|
121
|
+
@did_fail = true
|
122
|
+
@needs_fallback = true
|
123
|
+
elsif !LicenseScout::Config.allowed_licenses.empty? && !dependency.license.is_allowed?
|
124
|
+
unless dependency.has_exception?
|
125
|
+
@results[dependency.type] << Result.failure(dependency, :not_allowed)
|
126
|
+
@did_fail = true
|
127
|
+
@needs_exception = true
|
128
|
+
else
|
129
|
+
@results[dependency.type] << Result.success(dependency)
|
81
130
|
end
|
131
|
+
elsif dependency.license.is_flagged?
|
132
|
+
unless dependency.has_exception?
|
133
|
+
@results[dependency.type] << Result.failure(dependency, :flagged)
|
134
|
+
@did_fail = true
|
135
|
+
@needs_exception = true
|
136
|
+
else
|
137
|
+
@results[dependency.type] << Result.success(dependency)
|
138
|
+
end
|
139
|
+
else
|
140
|
+
@results[dependency.type] << Result.success(dependency)
|
82
141
|
end
|
83
142
|
end
|
84
|
-
|
85
|
-
[ problems.empty?, problems ]
|
86
143
|
end
|
87
144
|
|
88
|
-
def
|
89
|
-
|
90
|
-
|
91
|
-
|
145
|
+
def evaluate_results
|
146
|
+
table = Terminal::Table.new
|
147
|
+
table.headings = ["Type", "Dependency", "License(s)", "Results"]
|
148
|
+
table.style = { border_bottom: false } # the extra :separator will add this
|
92
149
|
|
93
|
-
|
150
|
+
results.each do |type, results_for_type|
|
151
|
+
type_in_table = false
|
94
152
|
|
95
|
-
|
96
|
-
|
97
|
-
|
153
|
+
results_for_type.each do |result|
|
154
|
+
next if LicenseScout::Config.only_show_failures && result.succeeded?
|
155
|
+
|
156
|
+
modified_row = []
|
157
|
+
modified_row << (type_in_table ? "" : type)
|
158
|
+
modified_row << result.dependency_string
|
159
|
+
modified_row << result.license_string
|
160
|
+
modified_row << result.reason_string
|
161
|
+
|
162
|
+
type_in_table = true
|
163
|
+
table.add_row(modified_row)
|
164
|
+
end
|
98
165
|
|
99
|
-
|
100
|
-
raise LicenseScout::Exceptions::InvalidOutputReport.new("Found multiple manifests '#{manifests.join(", ")}' under '#{output_directory}'.")
|
166
|
+
table.add_separator if type_in_table
|
101
167
|
end
|
102
168
|
|
103
|
-
|
169
|
+
puts table unless LicenseScout::Config.only_show_failures && !@did_fail
|
170
|
+
|
171
|
+
puts
|
172
|
+
puts "Additional steps are required in order to pass Open Source license compliance:"
|
173
|
+
puts " * Please add fallback licenses for the 'Missing' or 'Undetermined' dependencies" if @needs_fallback
|
174
|
+
puts " https://github.com/chef/license_scout#fallback-licenses" if @needs_fallback
|
175
|
+
puts " * Please add exceptions for the 'Flagged' or 'Not Allowed' dependencies" if @needs_exception
|
176
|
+
puts " https://github.com/chef/license_scout#dependency-exceptions" if @needs_exception
|
177
|
+
|
178
|
+
exit 1 if @did_fail
|
104
179
|
end
|
105
180
|
|
106
|
-
def
|
107
|
-
|
181
|
+
def generate_dependency_license_manifest
|
182
|
+
@dependency_license_manifest = {
|
183
|
+
license_manifest_version: 2,
|
184
|
+
generated_on: DateTime.now.to_s,
|
185
|
+
name: LicenseScout::Config.name,
|
186
|
+
dependencies: []
|
187
|
+
}
|
188
|
+
|
189
|
+
all_dependencies.each do |dep|
|
190
|
+
dependency_license_manifest[:dependencies] << {
|
191
|
+
type: dep.type,
|
192
|
+
name: dep.name,
|
193
|
+
version: dep.version,
|
194
|
+
has_exception: dep.has_exception?,
|
195
|
+
exception_reason: dep.exception_reason,
|
196
|
+
licenses: dep.license.records.map(&:to_h),
|
197
|
+
}
|
198
|
+
end
|
108
199
|
end
|
109
200
|
|
201
|
+
def license_manifest_path
|
202
|
+
File.join(LicenseScout::Config.output_directory, "#{LicenseScout::Config.name}-dependency-licenses.json")
|
203
|
+
end
|
110
204
|
end
|
111
205
|
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2018 Chef Software, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
# This library was inspired by (and pulls some logic from) librariesio/spdx
|
19
|
+
|
20
|
+
require "ffi_yajl"
|
21
|
+
require "fuzzy_match"
|
22
|
+
|
23
|
+
module LicenseScout
|
24
|
+
class SPDX
|
25
|
+
class << self
|
26
|
+
|
27
|
+
# Try to find the SPDX ID that most closely matches the given license ID
|
28
|
+
#
|
29
|
+
# @param license_id [String, nil] The license ID
|
30
|
+
# @return [String, nil, false] Returns either the SPDX ID, false if the
|
31
|
+
# license_id was nil, or nil if we could not find a valid SPDX ID
|
32
|
+
def find(license_id, force = false)
|
33
|
+
return license_id if force
|
34
|
+
return nil if license_id.nil?
|
35
|
+
lookup(license_id) || find_by_special_case(license_id) || closest(license_id) || license_id
|
36
|
+
end
|
37
|
+
|
38
|
+
# Right now this just returns the license keys that are present in the string.
|
39
|
+
# In the future, we should handle a proper compound structure like
|
40
|
+
# https://github.com/jslicense/spdx-expression-parse.js
|
41
|
+
def parse(license_string)
|
42
|
+
license_string.nil? ? [] : (license_string.tr("()", "").split("\s") - spdx_join_words)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Hash] The SPDX license data in Hash form
|
46
|
+
def licenses
|
47
|
+
@@license_data ||= FFI_Yajl::Parser.parse(File.read(File.expand_path("../data/licenses.json", __FILE__)))["licenses"]
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [Hash] The SPDX license data in Hash form
|
51
|
+
def exceptions
|
52
|
+
@@license_data ||= FFI_Yajl::Parser.parse(File.read(File.expand_path("../data/exceptions.json", __FILE__)))["exceptions"]
|
53
|
+
end
|
54
|
+
|
55
|
+
def known_ids
|
56
|
+
@@known_ids ||= licenses.map { |l| l["licenseId"] }
|
57
|
+
end
|
58
|
+
|
59
|
+
def known_names
|
60
|
+
@@known_names ||= licenses.map { |l| l["name"] }
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def lookup(license_id)
|
66
|
+
return license_id if known_ids.include?(license_id)
|
67
|
+
return spdx_for(license_id) if (Array(license_id) & known_names).any?
|
68
|
+
return license_id if (parse(license_id) & known_ids).any?
|
69
|
+
end
|
70
|
+
|
71
|
+
def find_by_special_case(license_id)
|
72
|
+
gpl = gpl_match(license_id)
|
73
|
+
return gpl unless gpl.nil?
|
74
|
+
lookup(special_cases[license_id.downcase])
|
75
|
+
end
|
76
|
+
|
77
|
+
def closest(license_id)
|
78
|
+
spdx_for(FuzzyMatch.new(known_names).find(license_id)) || FuzzyMatch.new(known_ids).find(license_id)
|
79
|
+
end
|
80
|
+
|
81
|
+
def gpl_match(license_id)
|
82
|
+
match = license_id.match(/^(l|a)?gpl-?\s?_?v?(1|2|3)\.?(\d)?(\+)?$/i)
|
83
|
+
return unless match
|
84
|
+
lookup("#{match[1]}GPL-#{match[2]}.#{match[3] || 0}#{match[4]}".upcase)
|
85
|
+
end
|
86
|
+
|
87
|
+
def spdx_for(license_name)
|
88
|
+
licenses.find { |n| n["name"] == license_name }["licenseId"]
|
89
|
+
end
|
90
|
+
|
91
|
+
def spdx_join_words
|
92
|
+
%w{WITH AND OR}
|
93
|
+
end
|
94
|
+
|
95
|
+
def special_cases
|
96
|
+
{
|
97
|
+
# Pulled from http://search.cpan.org/~dagolden/CPAN-Meta-2.150010/lib/CPAN/Meta/Spec.pm#license
|
98
|
+
"agpl_3" => "AGPL-3.0",
|
99
|
+
"apache_1_1" => "Apache-1.1",
|
100
|
+
"apache_2_0" => "Apache-2.0",
|
101
|
+
"artistic_1" => "Artistic-1.0",
|
102
|
+
"artistic_2" => "Artistic-2.0",
|
103
|
+
"bsd" => "BSD-3-Clause",
|
104
|
+
"freebsd" => "BSD-2-Clause-FreeBSD",
|
105
|
+
"gfdl_1_2" => "GFDL-1.2-only",
|
106
|
+
"gfdl_1_3" => "GFDL-1.3-only",
|
107
|
+
"lgpl_2_1" => "LGPL-2.1-only",
|
108
|
+
"lgpl_3_0" => "LGPL-3.0-only",
|
109
|
+
"mit" => "MIT",
|
110
|
+
"mozilla_1_0" => "MPL-1.0",
|
111
|
+
"mozilla_1_1" => "MPL-1.1",
|
112
|
+
"openssl" => "OpenSSL",
|
113
|
+
"qpl_1_0" => "QPL-1.0",
|
114
|
+
"perl" => "Artistic-1.0-Perl",
|
115
|
+
"perl_5" => "Artistic-1.0-Perl",
|
116
|
+
"ssleay" => "OpenSSL",
|
117
|
+
"sun" => "SISSL",
|
118
|
+
"zlib" => "Zlib",
|
119
|
+
}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/lib/license_scout.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
# MixLockJson
|
2
|
+
|
3
|
+
**TODO: Add description**
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
|
8
|
+
by adding `mix_lock_json` to your list of dependencies in `mix.exs`:
|
9
|
+
|
10
|
+
```elixir
|
11
|
+
def deps do
|
12
|
+
[
|
13
|
+
{:mix_lock_json, "~> 0.1.0"}
|
14
|
+
]
|
15
|
+
end
|
16
|
+
```
|
17
|
+
|
18
|
+
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
|
19
|
+
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
|
20
|
+
be found at [https://hexdocs.pm/mix_lock_json](https://hexdocs.pm/mix_lock_json).
|
21
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
defmodule MixLockJson.CLI do
|
2
|
+
def main(mix_lock_path \\ "") do
|
3
|
+
mix_lock_path
|
4
|
+
|> parse_mix_lock
|
5
|
+
|> IO.puts
|
6
|
+
end
|
7
|
+
|
8
|
+
defp parse_mix_lock(mix_lock_path) do
|
9
|
+
{:ok, lockfile} = File.read(mix_lock_path)
|
10
|
+
{lock_deps, _} = lockfile |> Code.eval_string
|
11
|
+
|
12
|
+
Poison.encode!(Enum.reduce(lock_deps, [], fn(i, acc) ->
|
13
|
+
case i do
|
14
|
+
{name, {_, _, version, _hash, _, _child_deps, _}} -> [%{name => version} | acc]
|
15
|
+
{name, {:git, _path, hash, _}} -> [%{name => hash} | acc]
|
16
|
+
_ -> acc
|
17
|
+
end
|
18
|
+
end))
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
defmodule MixLockJson.MixProject do
|
2
|
+
use Mix.Project
|
3
|
+
|
4
|
+
def project do
|
5
|
+
[
|
6
|
+
app: :mix_lock_json,
|
7
|
+
version: "0.1.0",
|
8
|
+
escript: escript(),
|
9
|
+
deps: deps()
|
10
|
+
]
|
11
|
+
end
|
12
|
+
|
13
|
+
def application do
|
14
|
+
[applications: []]
|
15
|
+
end
|
16
|
+
|
17
|
+
defp escript do
|
18
|
+
[
|
19
|
+
main_module: MixLockJson.CLI,
|
20
|
+
path: "../../bin/mix_lock_json",
|
21
|
+
app: nil,
|
22
|
+
embed_elixir: true
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
defp deps do
|
27
|
+
[
|
28
|
+
{:poison, "~> 3.1"}
|
29
|
+
]
|
30
|
+
end
|
31
|
+
end
|
@@ -11,11 +11,11 @@
|
|
11
11
|
{<<"providers">>,{pkg,<<"providers">>,<<"1.6.0">>},1},
|
12
12
|
{<<"rebar">>,
|
13
13
|
{git,"https://github.com/erlang/rebar3",
|
14
|
-
{ref,"
|
14
|
+
{ref,"86e883b8d8d1d16487e245fff02eba8c83da2cdd"}},
|
15
15
|
0},
|
16
16
|
{<<"rebar3">>,
|
17
17
|
{git,"https://github.com/erlang/rebar3",
|
18
|
-
{ref,"
|
18
|
+
{ref,"cb743f76cbc26ac780066d285329e8a6c8330605"}},
|
19
19
|
0},
|
20
20
|
{<<"relx">>,{pkg,<<"relx">>,<<"3.22.2">>},1},
|
21
21
|
{<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.1">>},1}]}.
|