dependabot-hex 0.88.0
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 +7 -0
- data/helpers/build +19 -0
- data/helpers/deps/jason/.fetch +0 -0
- data/helpers/deps/jason/.hex +2 -0
- data/helpers/deps/jason/CHANGELOG.md +60 -0
- data/helpers/deps/jason/LICENSE +13 -0
- data/helpers/deps/jason/README.md +179 -0
- data/helpers/deps/jason/hex_metadata.config +20 -0
- data/helpers/deps/jason/lib/codegen.ex +158 -0
- data/helpers/deps/jason/lib/decoder.ex +657 -0
- data/helpers/deps/jason/lib/encode.ex +630 -0
- data/helpers/deps/jason/lib/encoder.ex +216 -0
- data/helpers/deps/jason/lib/formatter.ex +253 -0
- data/helpers/deps/jason/lib/fragment.ex +11 -0
- data/helpers/deps/jason/lib/helpers.ex +90 -0
- data/helpers/deps/jason/lib/jason.ex +228 -0
- data/helpers/deps/jason/mix.exs +92 -0
- data/helpers/lib/check_update.exs +92 -0
- data/helpers/lib/do_update.exs +39 -0
- data/helpers/lib/parse_deps.exs +103 -0
- data/helpers/lib/run.exs +76 -0
- data/helpers/mix.exs +21 -0
- data/helpers/mix.lock +3 -0
- data/lib/dependabot/hex.rb +11 -0
- data/lib/dependabot/hex/file_fetcher.rb +79 -0
- data/lib/dependabot/hex/file_parser.rb +125 -0
- data/lib/dependabot/hex/file_updater.rb +71 -0
- data/lib/dependabot/hex/file_updater/lockfile_updater.rb +142 -0
- data/lib/dependabot/hex/file_updater/mixfile_git_pin_updater.rb +51 -0
- data/lib/dependabot/hex/file_updater/mixfile_requirement_updater.rb +72 -0
- data/lib/dependabot/hex/file_updater/mixfile_sanitizer.rb +26 -0
- data/lib/dependabot/hex/file_updater/mixfile_updater.rb +94 -0
- data/lib/dependabot/hex/metadata_finder.rb +70 -0
- data/lib/dependabot/hex/native_helpers.rb +20 -0
- data/lib/dependabot/hex/requirement.rb +53 -0
- data/lib/dependabot/hex/update_checker.rb +275 -0
- data/lib/dependabot/hex/update_checker/file_preparer.rb +191 -0
- data/lib/dependabot/hex/update_checker/requirements_updater.rb +173 -0
- data/lib/dependabot/hex/update_checker/version_resolver.rb +170 -0
- data/lib/dependabot/hex/version.rb +67 -0
- metadata +208 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/hex/version"
|
|
4
|
+
require "dependabot/hex/requirement"
|
|
5
|
+
require "dependabot/hex/update_checker"
|
|
6
|
+
|
|
7
|
+
module Dependabot
|
|
8
|
+
module Hex
|
|
9
|
+
class UpdateChecker
|
|
10
|
+
class RequirementsUpdater
|
|
11
|
+
OPERATORS = />=|<=|>|<|==|~>/.freeze
|
|
12
|
+
AND_SEPARATOR = /\s+and\s+/.freeze
|
|
13
|
+
OR_SEPARATOR = /\s+or\s+/.freeze
|
|
14
|
+
SEPARATOR = /#{AND_SEPARATOR}|#{OR_SEPARATOR}/.freeze
|
|
15
|
+
|
|
16
|
+
def initialize(requirements:, latest_resolvable_version:,
|
|
17
|
+
updated_source:)
|
|
18
|
+
@requirements = requirements
|
|
19
|
+
@updated_source = updated_source
|
|
20
|
+
|
|
21
|
+
return unless latest_resolvable_version
|
|
22
|
+
return unless Hex::Version.correct?(latest_resolvable_version)
|
|
23
|
+
|
|
24
|
+
@latest_resolvable_version =
|
|
25
|
+
Hex::Version.new(latest_resolvable_version)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def updated_requirements
|
|
29
|
+
requirements.map { |req| updated_mixfile_requirement(req) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
attr_reader :requirements, :latest_resolvable_version, :updated_source
|
|
35
|
+
|
|
36
|
+
# rubocop:disable Metrics/AbcSize
|
|
37
|
+
# rubocop:disable PerceivedComplexity
|
|
38
|
+
def updated_mixfile_requirement(req)
|
|
39
|
+
req = update_source(req)
|
|
40
|
+
return req unless latest_resolvable_version && req[:requirement]
|
|
41
|
+
return req if req_satisfied_by_latest_resolvable?(req[:requirement])
|
|
42
|
+
|
|
43
|
+
or_string_reqs = req[:requirement].split(OR_SEPARATOR)
|
|
44
|
+
last_string_reqs = or_string_reqs.last.split(AND_SEPARATOR).
|
|
45
|
+
map(&:strip)
|
|
46
|
+
|
|
47
|
+
new_requirement =
|
|
48
|
+
if last_string_reqs.any? { |r| r.match(/^(?:\d|=)/) }
|
|
49
|
+
exact_req = last_string_reqs.find { |r| r.match(/^(?:\d|=)/) }
|
|
50
|
+
update_exact_version(exact_req, latest_resolvable_version).to_s
|
|
51
|
+
elsif last_string_reqs.any? { |r| r.start_with?("~>") }
|
|
52
|
+
tw_req = last_string_reqs.find { |r| r.start_with?("~>") }
|
|
53
|
+
update_twiddle_version(tw_req, latest_resolvable_version).to_s
|
|
54
|
+
else
|
|
55
|
+
update_mixfile_range(last_string_reqs).map(&:to_s).join(" and ")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if or_string_reqs.count > 1
|
|
59
|
+
new_requirement = req[:requirement] + " or " + new_requirement
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
req.merge(requirement: new_requirement)
|
|
63
|
+
end
|
|
64
|
+
# rubocop:enable Metrics/AbcSize
|
|
65
|
+
# rubocop:enable PerceivedComplexity
|
|
66
|
+
|
|
67
|
+
def update_source(requirement_hash)
|
|
68
|
+
# Only git sources ever need to be updated. Anything else should be
|
|
69
|
+
# left alone.
|
|
70
|
+
unless requirement_hash.dig(:source, :type) == "git"
|
|
71
|
+
return requirement_hash
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
requirement_hash.merge(source: updated_source)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def req_satisfied_by_latest_resolvable?(requirement_string)
|
|
78
|
+
ruby_requirements(requirement_string).
|
|
79
|
+
any? { |r| r.satisfied_by?(latest_resolvable_version) }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def ruby_requirements(requirement_string)
|
|
83
|
+
requirement_class.requirements_array(requirement_string)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def update_exact_version(previous_req, new_version)
|
|
87
|
+
op = previous_req.match(OPERATORS).to_s
|
|
88
|
+
old_version =
|
|
89
|
+
Hex::Version.new(previous_req.gsub(OPERATORS, ""))
|
|
90
|
+
updated_version = at_same_precision(new_version, old_version)
|
|
91
|
+
"#{op} #{updated_version}".strip
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def update_twiddle_version(previous_req, new_version)
|
|
95
|
+
previous_req = requirement_class.new(previous_req)
|
|
96
|
+
old_version = previous_req.requirements.first.last
|
|
97
|
+
updated_version = at_same_precision(new_version, old_version)
|
|
98
|
+
requirement_class.new("~> #{updated_version}")
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def update_mixfile_range(requirements)
|
|
102
|
+
requirements = requirements.map { |r| requirement_class.new(r) }
|
|
103
|
+
updated_requirements =
|
|
104
|
+
requirements.flat_map do |r|
|
|
105
|
+
next r if r.satisfied_by?(latest_resolvable_version)
|
|
106
|
+
|
|
107
|
+
case op = r.requirements.first.first
|
|
108
|
+
when "<", "<="
|
|
109
|
+
[update_greatest_version(r, latest_resolvable_version)]
|
|
110
|
+
when "!="
|
|
111
|
+
[]
|
|
112
|
+
else
|
|
113
|
+
raise "Unexpected operation for unsatisfied Gemfile "\
|
|
114
|
+
"requirement: #{op}"
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
binding_requirements(updated_requirements)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def at_same_precision(new_version, old_version)
|
|
122
|
+
precision = old_version.to_s.split(".").count
|
|
123
|
+
new_version.to_s.split(".").first(precision).join(".")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Updates the version in a "<" or "<=" constraint to allow the given
|
|
127
|
+
# version
|
|
128
|
+
def update_greatest_version(requirement, version_to_be_permitted)
|
|
129
|
+
if version_to_be_permitted.is_a?(String)
|
|
130
|
+
version_to_be_permitted =
|
|
131
|
+
Hex::Version.new(version_to_be_permitted)
|
|
132
|
+
end
|
|
133
|
+
op, version = requirement.requirements.first
|
|
134
|
+
version = version.release if version.prerelease?
|
|
135
|
+
|
|
136
|
+
index_to_update =
|
|
137
|
+
version.segments.map.with_index { |seg, i| seg.zero? ? 0 : i }.max
|
|
138
|
+
|
|
139
|
+
new_segments = version.segments.map.with_index do |_, index|
|
|
140
|
+
if index < index_to_update
|
|
141
|
+
version_to_be_permitted.segments[index]
|
|
142
|
+
elsif index == index_to_update
|
|
143
|
+
version_to_be_permitted.segments[index] + 1
|
|
144
|
+
else 0
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
requirement_class.new("#{op} #{new_segments.join('.')}")
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def binding_requirements(requirements)
|
|
152
|
+
grouped_by_operator =
|
|
153
|
+
requirements.group_by { |r| r.requirements.first.first }
|
|
154
|
+
|
|
155
|
+
binding_reqs = grouped_by_operator.flat_map do |operator, reqs|
|
|
156
|
+
case operator
|
|
157
|
+
when "<", "<=" then reqs.min_by { |r| r.requirements.first.last }
|
|
158
|
+
when ">", ">=" then reqs.max_by { |r| r.requirements.first.last }
|
|
159
|
+
else requirements
|
|
160
|
+
end
|
|
161
|
+
end.uniq
|
|
162
|
+
|
|
163
|
+
binding_reqs << requirement_class.new if binding_reqs.empty?
|
|
164
|
+
binding_reqs.sort_by { |r| r.requirements.first.last }
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def requirement_class
|
|
168
|
+
Hex::Requirement
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "dependabot/hex/version"
|
|
4
|
+
require "dependabot/hex/update_checker"
|
|
5
|
+
require "dependabot/hex/native_helpers"
|
|
6
|
+
require "dependabot/shared_helpers"
|
|
7
|
+
require "dependabot/errors"
|
|
8
|
+
|
|
9
|
+
module Dependabot
|
|
10
|
+
module Hex
|
|
11
|
+
class UpdateChecker
|
|
12
|
+
class VersionResolver
|
|
13
|
+
def initialize(dependency:, credentials:,
|
|
14
|
+
original_dependency_files:, prepared_dependency_files:)
|
|
15
|
+
@dependency = dependency
|
|
16
|
+
@original_dependency_files = original_dependency_files
|
|
17
|
+
@prepared_dependency_files = prepared_dependency_files
|
|
18
|
+
@credentials = credentials
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def latest_resolvable_version
|
|
22
|
+
@latest_resolvable_version ||= fetch_latest_resolvable_version
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
attr_reader :dependency, :credentials,
|
|
28
|
+
:original_dependency_files, :prepared_dependency_files
|
|
29
|
+
|
|
30
|
+
def fetch_latest_resolvable_version
|
|
31
|
+
latest_resolvable_version =
|
|
32
|
+
SharedHelpers.in_a_temporary_directory do
|
|
33
|
+
write_temporary_dependency_files
|
|
34
|
+
FileUtils.cp(
|
|
35
|
+
elixir_helper_check_update_path,
|
|
36
|
+
"check_update.exs"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
SharedHelpers.with_git_configured(credentials: credentials) do
|
|
40
|
+
run_elixir_update_checker
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
return if latest_resolvable_version.nil?
|
|
45
|
+
if latest_resolvable_version.match?(/^[0-9a-f]{40}$/)
|
|
46
|
+
return latest_resolvable_version
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
version_class.new(latest_resolvable_version)
|
|
50
|
+
rescue SharedHelpers::HelperSubprocessFailed => error
|
|
51
|
+
handle_hex_errors(error)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def run_elixir_update_checker
|
|
55
|
+
SharedHelpers.run_helper_subprocess(
|
|
56
|
+
env: mix_env,
|
|
57
|
+
command: "mix run #{elixir_helper_path}",
|
|
58
|
+
function: "get_latest_resolvable_version",
|
|
59
|
+
args: [Dir.pwd,
|
|
60
|
+
dependency.name,
|
|
61
|
+
organization_credentials],
|
|
62
|
+
popen_opts: { err: %i(child out) }
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def handle_hex_errors(error)
|
|
67
|
+
if error.message.include?("No authenticated organization found")
|
|
68
|
+
org = error.message.match(/found for ([a-z_]+)\./).captures.first
|
|
69
|
+
raise Dependabot::PrivateSourceAuthenticationFailure, org
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
if error.message.include?("Failed to fetch record for")
|
|
73
|
+
org_match = error.message.match(%r{for 'hexpm:([a-z_]+)/})
|
|
74
|
+
org = org_match&.captures&.first
|
|
75
|
+
raise Dependabot::PrivateSourceAuthenticationFailure, org if org
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# TODO: This isn't pretty. It would be much nicer to catch the
|
|
79
|
+
# warnings as part of the Elixir module.
|
|
80
|
+
return error_result(error) if includes_result?(error)
|
|
81
|
+
|
|
82
|
+
# Ignore dependencies which don't resolve due to mis-matching
|
|
83
|
+
# environment specifications.
|
|
84
|
+
# TODO: Update the environment specifications instead
|
|
85
|
+
return if error.message.include?("Dependencies have diverged")
|
|
86
|
+
|
|
87
|
+
check_original_requirements_resolvable
|
|
88
|
+
raise error
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def error_result(error)
|
|
92
|
+
return false unless includes_result?(error)
|
|
93
|
+
|
|
94
|
+
result_json = error.message&.split("\n")&.last
|
|
95
|
+
result = JSON.parse(result_json)["result"]
|
|
96
|
+
return version_class.new(result) if version_class.correct?(result)
|
|
97
|
+
|
|
98
|
+
result
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def includes_result?(error)
|
|
102
|
+
result = error.message&.split("\n")&.last
|
|
103
|
+
return false unless result
|
|
104
|
+
|
|
105
|
+
JSON.parse(error.message&.split("\n")&.last)["result"]
|
|
106
|
+
true
|
|
107
|
+
rescue JSON::ParserError
|
|
108
|
+
false
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def check_original_requirements_resolvable
|
|
112
|
+
SharedHelpers.in_a_temporary_directory do
|
|
113
|
+
write_temporary_dependency_files(prepared: false)
|
|
114
|
+
FileUtils.cp(
|
|
115
|
+
elixir_helper_check_update_path,
|
|
116
|
+
"check_update.exs"
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
SharedHelpers.with_git_configured(credentials: credentials) do
|
|
120
|
+
run_elixir_update_checker
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
true
|
|
125
|
+
rescue SharedHelpers::HelperSubprocessFailed => error
|
|
126
|
+
raise Dependabot::DependencyFileNotResolvable, error.message
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def write_temporary_dependency_files(prepared: true)
|
|
130
|
+
files = if prepared then prepared_dependency_files
|
|
131
|
+
else original_dependency_files
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
files.each do |file|
|
|
135
|
+
path = file.name
|
|
136
|
+
FileUtils.mkdir_p(Pathname.new(path).dirname)
|
|
137
|
+
File.write(path, file.content)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def version_class
|
|
142
|
+
Hex::Version
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def mix_env
|
|
146
|
+
{
|
|
147
|
+
"MIX_EXS" => File.join(NativeHelpers.hex_helpers_dir, "mix.exs"),
|
|
148
|
+
"MIX_LOCK" => File.join(NativeHelpers.hex_helpers_dir, "mix.lock"),
|
|
149
|
+
"MIX_DEPS" => File.join(NativeHelpers.hex_helpers_dir, "deps"),
|
|
150
|
+
"MIX_QUIET" => "1"
|
|
151
|
+
}
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def elixir_helper_path
|
|
155
|
+
File.join(NativeHelpers.hex_helpers_dir, "lib/run.exs")
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def elixir_helper_check_update_path
|
|
159
|
+
File.join(NativeHelpers.hex_helpers_dir, "lib/check_update.exs")
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def organization_credentials
|
|
163
|
+
credentials.
|
|
164
|
+
select { |cred| cred["type"] == "hex_organization" }.
|
|
165
|
+
flat_map { |cred| [cred["organization"], cred["token"]] }
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rubygems_version_patch"
|
|
4
|
+
require "dependabot/utils"
|
|
5
|
+
|
|
6
|
+
# Elixir versions can include build information, which Ruby can't parse.
|
|
7
|
+
# This class augments Gem::Version with build information.
|
|
8
|
+
# See https://hexdocs.pm/elixir/Version.html for details.
|
|
9
|
+
|
|
10
|
+
module Dependabot
|
|
11
|
+
module Hex
|
|
12
|
+
class Version < Gem::Version
|
|
13
|
+
attr_reader :build_info
|
|
14
|
+
|
|
15
|
+
VERSION_PATTERN = Gem::Version::VERSION_PATTERN +
|
|
16
|
+
'(\+[0-9a-zA-Z\-.]+)?'
|
|
17
|
+
|
|
18
|
+
def self.correct?(version)
|
|
19
|
+
return false if version.nil?
|
|
20
|
+
|
|
21
|
+
version = version.to_s.split("+").first if version.to_s.include?("+")
|
|
22
|
+
super
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def initialize(version)
|
|
26
|
+
@version_string = version.to_s
|
|
27
|
+
|
|
28
|
+
if version.to_s.include?("+")
|
|
29
|
+
version, @build_info = version.to_s.split("+")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def to_s
|
|
36
|
+
@version_string
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def inspect # :nodoc:
|
|
40
|
+
"#<#{self.class} #{@version_string}>"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def <=>(other)
|
|
44
|
+
version_comparison = super(other)
|
|
45
|
+
return version_comparison unless version_comparison.zero?
|
|
46
|
+
|
|
47
|
+
return build_info.nil? ? 0 : 1 unless other.is_a?(Hex::Version)
|
|
48
|
+
|
|
49
|
+
# Build information comparison
|
|
50
|
+
lhsegments = build_info.to_s.split(".").map(&:downcase)
|
|
51
|
+
rhsegments = other.build_info.to_s.split(".").map(&:downcase)
|
|
52
|
+
limit = [lhsegments.count, rhsegments.count].min
|
|
53
|
+
|
|
54
|
+
lhs = ["1", *lhsegments.first(limit)].join(".")
|
|
55
|
+
rhs = ["1", *rhsegments.first(limit)].join(".")
|
|
56
|
+
|
|
57
|
+
local_comparison = Gem::Version.new(lhs) <=> Gem::Version.new(rhs)
|
|
58
|
+
|
|
59
|
+
return local_comparison unless local_comparison.zero?
|
|
60
|
+
|
|
61
|
+
lhsegments.count <=> rhsegments.count
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
Dependabot::Utils.register_version_class("hex", Dependabot::Hex::Version)
|
metadata
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: dependabot-hex
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.88.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Dependabot
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2019-01-09 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: dependabot-core
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.88.0
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.88.0
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: byebug
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '10.0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '10.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '12'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '12'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.8'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.8'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rspec-its
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '1.2'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '1.2'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rspec_junit_formatter
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0.4'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0.4'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rubocop
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0.61'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0.61'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: vcr
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '4.0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '4.0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: webmock
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '3.4'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '3.4'
|
|
139
|
+
description: Automated dependency management for Ruby, JavaScript, Python, PHP, Elixir,
|
|
140
|
+
Rust, Java, .NET, Elm and Go
|
|
141
|
+
email: support@dependabot.com
|
|
142
|
+
executables: []
|
|
143
|
+
extensions: []
|
|
144
|
+
extra_rdoc_files: []
|
|
145
|
+
files:
|
|
146
|
+
- helpers/build
|
|
147
|
+
- helpers/deps/jason/.fetch
|
|
148
|
+
- helpers/deps/jason/.hex
|
|
149
|
+
- helpers/deps/jason/CHANGELOG.md
|
|
150
|
+
- helpers/deps/jason/LICENSE
|
|
151
|
+
- helpers/deps/jason/README.md
|
|
152
|
+
- helpers/deps/jason/hex_metadata.config
|
|
153
|
+
- helpers/deps/jason/lib/codegen.ex
|
|
154
|
+
- helpers/deps/jason/lib/decoder.ex
|
|
155
|
+
- helpers/deps/jason/lib/encode.ex
|
|
156
|
+
- helpers/deps/jason/lib/encoder.ex
|
|
157
|
+
- helpers/deps/jason/lib/formatter.ex
|
|
158
|
+
- helpers/deps/jason/lib/fragment.ex
|
|
159
|
+
- helpers/deps/jason/lib/helpers.ex
|
|
160
|
+
- helpers/deps/jason/lib/jason.ex
|
|
161
|
+
- helpers/deps/jason/mix.exs
|
|
162
|
+
- helpers/lib/check_update.exs
|
|
163
|
+
- helpers/lib/do_update.exs
|
|
164
|
+
- helpers/lib/parse_deps.exs
|
|
165
|
+
- helpers/lib/run.exs
|
|
166
|
+
- helpers/mix.exs
|
|
167
|
+
- helpers/mix.lock
|
|
168
|
+
- lib/dependabot/hex.rb
|
|
169
|
+
- lib/dependabot/hex/file_fetcher.rb
|
|
170
|
+
- lib/dependabot/hex/file_parser.rb
|
|
171
|
+
- lib/dependabot/hex/file_updater.rb
|
|
172
|
+
- lib/dependabot/hex/file_updater/lockfile_updater.rb
|
|
173
|
+
- lib/dependabot/hex/file_updater/mixfile_git_pin_updater.rb
|
|
174
|
+
- lib/dependabot/hex/file_updater/mixfile_requirement_updater.rb
|
|
175
|
+
- lib/dependabot/hex/file_updater/mixfile_sanitizer.rb
|
|
176
|
+
- lib/dependabot/hex/file_updater/mixfile_updater.rb
|
|
177
|
+
- lib/dependabot/hex/metadata_finder.rb
|
|
178
|
+
- lib/dependabot/hex/native_helpers.rb
|
|
179
|
+
- lib/dependabot/hex/requirement.rb
|
|
180
|
+
- lib/dependabot/hex/update_checker.rb
|
|
181
|
+
- lib/dependabot/hex/update_checker/file_preparer.rb
|
|
182
|
+
- lib/dependabot/hex/update_checker/requirements_updater.rb
|
|
183
|
+
- lib/dependabot/hex/update_checker/version_resolver.rb
|
|
184
|
+
- lib/dependabot/hex/version.rb
|
|
185
|
+
homepage: https://github.com/dependabot/dependabot-core
|
|
186
|
+
licenses:
|
|
187
|
+
- Nonstandard
|
|
188
|
+
metadata: {}
|
|
189
|
+
post_install_message:
|
|
190
|
+
rdoc_options: []
|
|
191
|
+
require_paths:
|
|
192
|
+
- lib
|
|
193
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
|
+
requirements:
|
|
195
|
+
- - ">="
|
|
196
|
+
- !ruby/object:Gem::Version
|
|
197
|
+
version: 2.5.0
|
|
198
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
|
+
requirements:
|
|
200
|
+
- - ">="
|
|
201
|
+
- !ruby/object:Gem::Version
|
|
202
|
+
version: 2.5.0
|
|
203
|
+
requirements: []
|
|
204
|
+
rubygems_version: 3.0.2
|
|
205
|
+
signing_key:
|
|
206
|
+
specification_version: 4
|
|
207
|
+
summary: Elixir (Hex) support for dependabot-core
|
|
208
|
+
test_files: []
|