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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/helpers/build +19 -0
  3. data/helpers/deps/jason/.fetch +0 -0
  4. data/helpers/deps/jason/.hex +2 -0
  5. data/helpers/deps/jason/CHANGELOG.md +60 -0
  6. data/helpers/deps/jason/LICENSE +13 -0
  7. data/helpers/deps/jason/README.md +179 -0
  8. data/helpers/deps/jason/hex_metadata.config +20 -0
  9. data/helpers/deps/jason/lib/codegen.ex +158 -0
  10. data/helpers/deps/jason/lib/decoder.ex +657 -0
  11. data/helpers/deps/jason/lib/encode.ex +630 -0
  12. data/helpers/deps/jason/lib/encoder.ex +216 -0
  13. data/helpers/deps/jason/lib/formatter.ex +253 -0
  14. data/helpers/deps/jason/lib/fragment.ex +11 -0
  15. data/helpers/deps/jason/lib/helpers.ex +90 -0
  16. data/helpers/deps/jason/lib/jason.ex +228 -0
  17. data/helpers/deps/jason/mix.exs +92 -0
  18. data/helpers/lib/check_update.exs +92 -0
  19. data/helpers/lib/do_update.exs +39 -0
  20. data/helpers/lib/parse_deps.exs +103 -0
  21. data/helpers/lib/run.exs +76 -0
  22. data/helpers/mix.exs +21 -0
  23. data/helpers/mix.lock +3 -0
  24. data/lib/dependabot/hex.rb +11 -0
  25. data/lib/dependabot/hex/file_fetcher.rb +79 -0
  26. data/lib/dependabot/hex/file_parser.rb +125 -0
  27. data/lib/dependabot/hex/file_updater.rb +71 -0
  28. data/lib/dependabot/hex/file_updater/lockfile_updater.rb +142 -0
  29. data/lib/dependabot/hex/file_updater/mixfile_git_pin_updater.rb +51 -0
  30. data/lib/dependabot/hex/file_updater/mixfile_requirement_updater.rb +72 -0
  31. data/lib/dependabot/hex/file_updater/mixfile_sanitizer.rb +26 -0
  32. data/lib/dependabot/hex/file_updater/mixfile_updater.rb +94 -0
  33. data/lib/dependabot/hex/metadata_finder.rb +70 -0
  34. data/lib/dependabot/hex/native_helpers.rb +20 -0
  35. data/lib/dependabot/hex/requirement.rb +53 -0
  36. data/lib/dependabot/hex/update_checker.rb +275 -0
  37. data/lib/dependabot/hex/update_checker/file_preparer.rb +191 -0
  38. data/lib/dependabot/hex/update_checker/requirements_updater.rb +173 -0
  39. data/lib/dependabot/hex/update_checker/version_resolver.rb +170 -0
  40. data/lib/dependabot/hex/version.rb +67 -0
  41. 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: []