dependabot-hex 0.212.0 → 0.214.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa6164f9855066705271a83f2556deaa0c32a89af0e49cfff34d5c0a8e1b9312
4
- data.tar.gz: 558c4572c1aa4e94d82177346ebf51aec461887ddb2d92f2de4768bd50438f30
3
+ metadata.gz: 66e2212df8486009a3da3b280dc0c36e342556e4765760c0c3dc38a71e034a00
4
+ data.tar.gz: d3a62fc111e0e50212cb617bc19f8e86077bf681b3b1d82d1950e16fc283a67a
5
5
  SHA512:
6
- metadata.gz: 5e55998f587fea943c00117017cf2080ad856bf006aae03a87652f821110b8deb270bc49cdc83cceb6c886e17e7a4c2088cfba259d507abe63fc6623efb64185
7
- data.tar.gz: e649ad7a932676542b0059fbd37ffa26c992b86eae0948ea654bbacd591c2dcffe12298cf150f286eb97bcdf33b0d5cffcaa86a2414f4c35f25212d3670fbf38
6
+ metadata.gz: 9233d16f7d684b4e79ed18914d2512c7c2f72d9ae5a6b23d86298f7ac01088d0b43caac63367339974337d36b448ff037906c49867bc1a4f12ebf5a65c052bfa
7
+ data.tar.gz: 564a484640d7135729f86dbe931debabda0c14255c5098a4e1041ec97b2f8dfe69f4fe86ba5bf1bea86223037a7e335de6621feec39e6429ca464549bd76e591
data/helpers/build CHANGED
@@ -10,7 +10,14 @@ fi
10
10
  install_dir="$DEPENDABOT_NATIVE_HELPERS_PATH/hex"
11
11
  mkdir -p "$install_dir"
12
12
 
13
- mix local.hex --force
13
+ # Initial Hex install - will always be the latest available version
14
+ mix local.hex --force --if-missing
15
+ # Annoyingly, a specific Hex version cannot be specified during the initial install.
16
+ # The only way to pin is to re-install.
17
+ if [ -n "$HEX_VERSION" ]; then
18
+ mix hex.install "$HEX_VERSION"
19
+ fi
20
+
14
21
  mix archive.install hex nerves_bootstrap --force
15
22
 
16
23
  helpers_dir="$(dirname "${BASH_SOURCE[0]}")"
@@ -1,9 +1,8 @@
1
1
  defmodule UpdateChecker do
2
- def run(dependency_name, credentials) do
3
- set_credentials(credentials)
4
-
2
+ def run(dependency_name) do
5
3
  # Update the lockfile in a session that we can time out
6
4
  task = Task.async(fn -> do_resolution(dependency_name) end)
5
+
7
6
  case Task.yield(task, 30000) || Task.shutdown(task) do
8
7
  {:ok, {:ok, :resolution_successful}} ->
9
8
  # Read the new lock
@@ -15,43 +14,20 @@ defmodule UpdateChecker do
15
14
  updated_lock
16
15
  |> Map.get(String.to_atom(dependency_name))
17
16
  |> elem(2)
17
+
18
18
  {:ok, version}
19
19
 
20
- {:ok, {:error, error}} -> {:error, error}
20
+ {:ok, {:error, error}} ->
21
+ {:error, error}
21
22
 
22
- nil -> {:error, :dependency_resolution_timed_out}
23
+ nil ->
24
+ {:error, :dependency_resolution_timed_out}
23
25
 
24
- {:exit, reason} -> {:error, reason}
26
+ {:exit, reason} ->
27
+ {:error, reason}
25
28
  end
26
29
  end
27
30
 
28
- defp set_credentials(credentials) do
29
- credentials
30
- |> Enum.reduce([], fn cred, acc ->
31
- if List.last(acc) == nil || List.last(acc)[:token] do
32
- List.insert_at(acc, -1, %{organization: cred})
33
- else
34
- {item, acc} = List.pop_at(acc, -1)
35
- item = Map.put(item, :token, cred)
36
- List.insert_at(acc, -1, item)
37
- end
38
- end)
39
- |> Enum.each(fn cred ->
40
- hexpm = Hex.Repo.get_repo("hexpm")
41
-
42
- repo = %{
43
- url: hexpm.url <> "/repos/#{cred.organization}",
44
- public_key: nil,
45
- auth_key: cred.token
46
- }
47
-
48
- Hex.Config.read()
49
- |> Hex.Config.read_repos()
50
- |> Map.put("hexpm:#{cred.organization}", repo)
51
- |> Hex.Config.update_repos()
52
- end)
53
- end
54
-
55
31
  defp do_resolution(dependency_name) do
56
32
  # Fetch dependencies that needs updating
57
33
  {dependency_lock, rest_lock} =
@@ -59,6 +35,7 @@ defmodule UpdateChecker do
59
35
 
60
36
  try do
61
37
  Mix.Dep.Fetcher.by_name([dependency_name], dependency_lock, rest_lock, [])
38
+
62
39
  {:ok, :resolution_successful}
63
40
  rescue
64
41
  error -> {:error, error}
@@ -66,15 +43,14 @@ defmodule UpdateChecker do
66
43
  end
67
44
  end
68
45
 
69
- [dependency_name | credentials] = System.argv()
70
-
46
+ [dependency_name] = System.argv()
71
47
 
72
- case UpdateChecker.run(dependency_name, credentials) do
48
+ case UpdateChecker.run(dependency_name) do
73
49
  {:ok, version} ->
74
50
  version = :erlang.term_to_binary({:ok, version})
75
51
  IO.write(:stdio, version)
76
52
 
77
- {:error, %Hex.Version.InvalidRequirementError{} = error} ->
53
+ {:error, %Version.InvalidRequirementError{} = error} ->
78
54
  result = :erlang.term_to_binary({:error, "Invalid requirement: #{error.requirement}"})
79
55
  IO.write(:stdio, result)
80
56
 
@@ -1,35 +1,11 @@
1
- [dependency_name | credentials] = System.argv()
2
-
3
- grouped_creds = Enum.reduce credentials, [], fn cred, acc ->
4
- if List.last(acc) == nil || List.last(acc)[:token] do
5
- List.insert_at(acc, -1, %{ organization: cred })
6
- else
7
- { item, acc } = List.pop_at(acc, -1)
8
- item = Map.put(item, :token, cred)
9
- List.insert_at(acc, -1, item)
10
- end
11
- end
12
-
13
- Enum.each grouped_creds, fn cred ->
14
- hexpm = Hex.Repo.get_repo("hexpm")
15
- repo = %{
16
- url: hexpm.url <> "/repos/#{cred.organization}",
17
- public_key: nil,
18
- auth_key: cred.token
19
- }
20
-
21
- Hex.Config.read()
22
- |> Hex.Config.read_repos()
23
- |> Map.put("hexpm:#{cred.organization}", repo)
24
- |> Hex.Config.update_repos()
25
- end
26
-
27
- # dependency atom
28
- dependency = String.to_atom(dependency_name)
1
+ dependency =
2
+ System.argv()
3
+ |> List.first()
4
+ |> String.to_atom()
29
5
 
30
6
  # Fetch dependencies that needs updating
31
7
  {dependency_lock, rest_lock} = Map.split(Mix.Dep.Lock.read(), [dependency])
32
- Mix.Dep.Fetcher.by_name([dependency_name], dependency_lock, rest_lock, [])
8
+ Mix.Dep.Fetcher.by_name([dependency], dependency_lock, rest_lock, [])
33
9
 
34
10
  System.cmd(
35
11
  "mix",
data/helpers/lib/run.exs CHANGED
@@ -11,7 +11,8 @@ defmodule DependencyHelper do
11
11
  {:ok, :erlang.binary_to_term(output)}
12
12
  end
13
13
 
14
- {error, 1} -> {:error, error}
14
+ {error, 1} ->
15
+ {:error, error}
15
16
  end
16
17
  |> handle_result()
17
18
  end
@@ -40,37 +41,115 @@ defmodule DependencyHelper do
40
41
  run_script("parse_deps.exs", dir)
41
42
  end
42
43
 
43
- defp run(%{"function" => "get_latest_resolvable_version", "args" => [dir, dependency_name, credentials]}) do
44
- run_script("check_update.exs", dir, [dependency_name] ++ credentials)
44
+ defp run(%{
45
+ "function" => "get_latest_resolvable_version",
46
+ "args" => [dir, dependency_name, credentials]
47
+ }) do
48
+ set_credentials(credentials)
49
+
50
+ run_script("check_update.exs", dir, [dependency_name])
45
51
  end
46
52
 
47
53
  defp run(%{"function" => "get_updated_lockfile", "args" => [dir, dependency_name, credentials]}) do
48
- run_script("do_update.exs", dir, [dependency_name] ++ credentials)
54
+ set_credentials(credentials)
55
+
56
+ run_script("do_update.exs", dir, [dependency_name])
49
57
  end
50
58
 
51
59
  defp run_script(script, dir, args \\ []) do
52
- args = [
53
- "run",
54
- "--no-deps-check",
55
- "--no-start",
56
- "--no-compile",
57
- "--no-elixir-version-check",
58
- script
59
- ] ++ args
60
+ args =
61
+ [
62
+ "run",
63
+ "--no-deps-check",
64
+ "--no-start",
65
+ "--no-compile",
66
+ "--no-elixir-version-check",
67
+ script
68
+ ] ++ args
60
69
 
61
70
  System.cmd(
62
71
  "mix",
63
72
  args,
64
- [
65
- cd: dir,
66
- env: %{
67
- "MIX_EXS" => nil,
68
- "MIX_LOCK" => nil,
69
- "MIX_DEPS" => nil
70
- }
71
- ]
73
+ cd: dir,
74
+ env: %{
75
+ "MIX_EXS" => nil,
76
+ "MIX_LOCK" => nil,
77
+ "MIX_DEPS" => nil
78
+ }
72
79
  )
73
80
  end
81
+
82
+ defp set_credentials([]), do: :ok
83
+
84
+ defp set_credentials(["hex_organization", organization, token | tail]) do
85
+ url =
86
+ "hexpm"
87
+ |> Hex.Repo.get_repo()
88
+ |> Map.fetch!(:url)
89
+ |> URI.merge("/repos/#{organization}")
90
+ |> to_string()
91
+
92
+ update_repos("hexpm:#{organization}", %{url: url, public_key: nil, auth_key: token})
93
+
94
+ set_credentials(tail)
95
+ end
96
+
97
+ defp set_credentials(["hex_repository", repo, url, auth_key, fingerprint | tail]) do
98
+ case fetch_public_key(repo, url, auth_key, fingerprint) do
99
+ {:ok, public_key} ->
100
+ update_repos(repo, %{auth_key: auth_key, public_key: public_key, url: url})
101
+
102
+ set_credentials(tail)
103
+
104
+ error ->
105
+ handle_result(error)
106
+ end
107
+ end
108
+
109
+ defp set_credentials([_mode, org_or_url | _]) do
110
+ handle_result({:error, "Missing credentials for \"#{org_or_url}\""})
111
+ end
112
+
113
+ defp update_repos(name, opts) do
114
+ Hex.Config.read()
115
+ |> Hex.Config.read_repos()
116
+ |> Map.put(name, opts)
117
+ |> Hex.Config.update_repos()
118
+ end
119
+
120
+ defp fetch_public_key(repo, repo_url, auth_key, fingerprint) do
121
+ case Hex.Repo.get_public_key(repo_url, auth_key) do
122
+ {:ok, {200, key, _}} ->
123
+ if public_key_matches?(key, fingerprint) do
124
+ {:ok, key}
125
+ else
126
+ {:error, "Public key fingerprint mismatch for repo \"#{repo}\""}
127
+ end
128
+
129
+ {:ok, {code, _, _}} ->
130
+ {:error, "Downloading public key for repo \"#{repo}\" failed with code: #{inspect(code)}"}
131
+
132
+ other ->
133
+ {:error, "Downloading public key for repo \"#{repo}\" failed: #{inspect(other)}"}
134
+ end
135
+ end
136
+
137
+ defp public_key_matches?(_public_key, _fingerprint = ""), do: true
138
+
139
+ defp public_key_matches?(public_key, fingerprint) do
140
+ public_key =
141
+ public_key
142
+ |> :public_key.pem_decode()
143
+ |> List.first()
144
+ |> :public_key.pem_entry_decode()
145
+
146
+ decoded_fingerprint =
147
+ :sha256
148
+ |> :ssh.hostkey_fingerprint(public_key)
149
+ |> List.to_string()
150
+
151
+ decoded_fingerprint == fingerprint
152
+ end
74
153
  end
75
154
 
76
155
  DependencyHelper.main()
data/helpers/mix.lock CHANGED
@@ -1,3 +1,3 @@
1
1
  %{
2
- "jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"},
2
+ "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"},
3
3
  }
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dependabot
4
+ module Hex
5
+ module CredentialHelpers
6
+ def self.hex_credentials(credentials)
7
+ organization_credentials(credentials) + repo_credentials(credentials)
8
+ end
9
+
10
+ def self.organization_credentials(credentials)
11
+ defaults = { "organization" => "", "token" => "" }
12
+ keys = %w(type organization token)
13
+
14
+ credentials.
15
+ select { |cred| cred["type"] == "hex_organization" }.
16
+ flat_map { |cred| defaults.merge(cred).slice(*keys).values }
17
+ end
18
+
19
+ def self.repo_credentials(credentials)
20
+ # Credentials are serialized as an array that may not have optional fields. Using a
21
+ # default ensures that the array is always the same length, even if values are empty.
22
+ defaults = { "url" => "", "auth_key" => "", "public_key_fingerprint" => "" }
23
+ keys = %w(type repo url auth_key public_key_fingerprint)
24
+
25
+ credentials.
26
+ select { |cred| cred["type"] == "hex_repository" }.
27
+ flat_map { |cred| defaults.merge(cred).slice(*keys).values }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -6,12 +6,11 @@ require "dependabot/file_fetchers/base"
6
6
  module Dependabot
7
7
  module Hex
8
8
  class FileFetcher < Dependabot::FileFetchers::Base
9
- APPS_PATH_REGEX = /apps_path:\s*"(?<path>.*?)"/m.freeze
9
+ APPS_PATH_REGEX = /apps_path:\s*"(?<path>.*?)"/m
10
10
  STRING_ARG = %{(?:["'](.*?)["'])}
11
11
  SUPPORTED_METHODS = %w(eval_file require_file).join("|").freeze
12
- SUPPORT_FILE = /Code\.(?:#{SUPPORTED_METHODS})\(#{STRING_ARG}(?:\s*,\s*#{STRING_ARG})?\)/.
13
- freeze
14
- PATH_DEPS_REGEX = /{.*path: ?#{STRING_ARG}.*}/.freeze
12
+ SUPPORT_FILE = /Code\.(?:#{SUPPORTED_METHODS})\(#{STRING_ARG}(?:\s*,\s*#{STRING_ARG})?\)/
13
+ PATH_DEPS_REGEX = /{.*path: ?#{STRING_ARG}.*}/
15
14
 
16
15
  def self.required_files_in?(filenames)
17
16
  filenames.include?("mix.exs")
@@ -4,8 +4,9 @@ require "dependabot/hex/file_updater"
4
4
  require "dependabot/hex/file_updater/mixfile_updater"
5
5
  require "dependabot/hex/file_updater/mixfile_sanitizer"
6
6
  require "dependabot/hex/file_updater/mixfile_requirement_updater"
7
- require "dependabot/hex/version"
7
+ require "dependabot/hex/credential_helpers"
8
8
  require "dependabot/hex/native_helpers"
9
+ require "dependabot/hex/version"
9
10
  require "dependabot/shared_helpers"
10
11
 
11
12
  module Dependabot
@@ -29,7 +30,7 @@ module Dependabot
29
30
  env: mix_env,
30
31
  command: "mix run #{elixir_helper_path}",
31
32
  function: "get_updated_lockfile",
32
- args: [Dir.pwd, dependency.name, organization_credentials]
33
+ args: [Dir.pwd, dependency.name, CredentialHelpers.hex_credentials(credentials)]
33
34
  )
34
35
  end
35
36
  end
@@ -131,11 +132,6 @@ module Dependabot
131
132
  def lockfile
132
133
  @lockfile ||= dependency_files.find { |f| f.name == "mix.lock" }
133
134
  end
134
-
135
- def organization_credentials
136
- credentials.select { |cred| cred["type"] == "hex_organization" }.
137
- flat_map { |cred| [cred["organization"], cred.fetch("token", "")] }
138
- end
139
135
  end
140
136
  end
141
137
  end
@@ -11,17 +11,15 @@ module Dependabot
11
11
  @mixfile_content = mixfile_content
12
12
  end
13
13
 
14
- FILE_READ = /File.read\(.*?\)/.freeze
15
- FILE_READ_BANG = /File.read!\(.*?\)/.freeze
14
+ FILE_READ = /File.read\(.*?\)/
15
+ FILE_READ_BANG = /File.read!\(.*?\)/
16
16
  PIPE = Regexp.escape("|>").freeze
17
- VERSION_FILE = /"VERSION"/i.freeze
18
-
19
- NESTED_VERSION_FILE_READ = /String\.trim\(#{FILE_READ}\)/.freeze
20
- NESTED_VERSION_FILE_READ_BANG = /String\.trim\(#{FILE_READ_BANG}\)/.freeze
21
- PIPED_VERSION_FILE_READ =
22
- /#{VERSION_FILE}[[:space:]]+#{PIPE}[[:space:]]+#{FILE_READ}/.freeze
23
- PIPED_VERSION_FILE_READ_BANG =
24
- /#{VERSION_FILE}[[:space:]]+#{PIPE}[[:space:]]+#{FILE_READ_BANG}/.freeze
17
+ VERSION_FILE = /"VERSION"/i
18
+
19
+ NESTED_VERSION_FILE_READ = /String\.trim\(#{FILE_READ}\)/
20
+ NESTED_VERSION_FILE_READ_BANG = /String\.trim\(#{FILE_READ_BANG}\)/
21
+ PIPED_VERSION_FILE_READ = /#{VERSION_FILE}[[:space:]]+#{PIPE}[[:space:]]+#{FILE_READ}/
22
+ PIPED_VERSION_FILE_READ_BANG = /#{VERSION_FILE}[[:space:]]+#{PIPE}[[:space:]]+#{FILE_READ_BANG}/
25
23
 
26
24
  # rubocop:disable Performance/MethodObjectAsBlock
27
25
  def sanitized_content
@@ -6,8 +6,8 @@ require "dependabot/hex/version"
6
6
  module Dependabot
7
7
  module Hex
8
8
  class Requirement < Gem::Requirement
9
- AND_SEPARATOR = /\s+and\s+/.freeze
10
- OR_SEPARATOR = /\s+or\s+/.freeze
9
+ AND_SEPARATOR = /\s+and\s+/
10
+ OR_SEPARATOR = /\s+or\s+/
11
11
 
12
12
  # Add the double-equality matcher to the list of allowed operations
13
13
  OPS = OPS.merge("==" => ->(v, r) { v == r })
@@ -15,7 +15,7 @@ module Dependabot
15
15
  # Override the version pattern to allow local versions
16
16
  quoted = OPS.keys.map { |k| Regexp.quote k }.join "|"
17
17
  PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Hex::Version::VERSION_PATTERN})\\s*"
18
- PATTERN = /\A#{PATTERN_RAW}\z/.freeze
18
+ PATTERN = /\A#{PATTERN_RAW}\z/
19
19
 
20
20
  # Returns an array of requirements. At least one requirement from the
21
21
  # returned array must be satisfied for a version to be valid.
@@ -8,10 +8,10 @@ module Dependabot
8
8
  module Hex
9
9
  class UpdateChecker
10
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
11
+ OPERATORS = />=|<=|>|<|==|~>/
12
+ AND_SEPARATOR = /\s+and\s+/
13
+ OR_SEPARATOR = /\s+or\s+/
14
+ SEPARATOR = /#{AND_SEPARATOR}|#{OR_SEPARATOR}/
15
15
 
16
16
  def initialize(requirements:, latest_resolvable_version:,
17
17
  updated_source:)
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "dependabot/hex/version"
4
4
  require "dependabot/hex/update_checker"
5
+ require "dependabot/hex/credential_helpers"
5
6
  require "dependabot/hex/native_helpers"
6
7
  require "dependabot/hex/file_updater/mixfile_sanitizer"
7
8
  require "dependabot/shared_helpers"
@@ -32,10 +33,7 @@ module Dependabot
32
33
  latest_resolvable_version =
33
34
  SharedHelpers.in_a_temporary_directory do
34
35
  write_temporary_sanitized_dependency_files
35
- FileUtils.cp(
36
- elixir_helper_check_update_path,
37
- "check_update.exs"
38
- )
36
+ FileUtils.cp(elixir_helper_check_update_path, "check_update.exs")
39
37
 
40
38
  SharedHelpers.with_git_configured(credentials: credentials) do
41
39
  run_elixir_update_checker
@@ -55,23 +53,31 @@ module Dependabot
55
53
  env: mix_env,
56
54
  command: "mix run #{elixir_helper_path}",
57
55
  function: "get_latest_resolvable_version",
58
- args: [Dir.pwd,
59
- dependency.name,
60
- organization_credentials],
56
+ args: [Dir.pwd, dependency.name, CredentialHelpers.hex_credentials(credentials)],
61
57
  stderr_to_stdout: true
62
58
  )
63
59
  end
64
60
 
65
61
  def handle_hex_errors(error)
66
- if error.message.include?("No authenticated organization found")
67
- org = error.message.match(/found for ([a-z_]+)\./).captures.first
68
- raise Dependabot::PrivateSourceAuthenticationFailure, org
62
+ if (match = error.message.match(/No authenticated organization found for (?<repo>[a-z_]+)\./))
63
+ raise Dependabot::PrivateSourceAuthenticationFailure, match[:repo]
69
64
  end
70
65
 
71
- if error.message.include?("Failed to fetch record for")
72
- org_match = error.message.match(%r{for 'hexpm:([a-z_]+)/})
73
- org = org_match&.captures&.first
74
- raise Dependabot::PrivateSourceAuthenticationFailure, org if org
66
+ if (match = error.message.match(/Public key fingerprint mismatch for repo "(?<repo>[a-z_]+)"/))
67
+ raise Dependabot::PrivateSourceAuthenticationFailure, match[:repo]
68
+ end
69
+
70
+ if (match = error.message.match(/Missing credentials for "(?<repo>[a-z_]+)"/))
71
+ raise Dependabot::PrivateSourceAuthenticationFailure, match[:repo]
72
+ end
73
+
74
+ if (match = error.message.match(/Downloading public key for repo "(?<repo>[a-z_]+)"/))
75
+ raise Dependabot::PrivateSourceAuthenticationFailure, match[:repo]
76
+ end
77
+
78
+ if (match = error.message.match(/Failed to fetch record for '(?<repo>[a-z_]+)(?::(?<org>[a-z_]+))?/))
79
+ name = match[:org] || match[:repo]
80
+ raise Dependabot::PrivateSourceAuthenticationFailure, name
75
81
  end
76
82
 
77
83
  # TODO: Catch the warnings as part of the Elixir module. This happens
@@ -171,12 +177,6 @@ module Dependabot
171
177
  def elixir_helper_check_update_path
172
178
  File.join(NativeHelpers.hex_helpers_dir, "lib/check_update.exs")
173
179
  end
174
-
175
- def organization_credentials
176
- credentials.
177
- select { |cred| cred["type"] == "hex_organization" }.
178
- flat_map { |cred| [cred["organization"], cred.fetch("token", "")] }
179
- end
180
180
  end
181
181
  end
182
182
  end
@@ -231,7 +231,7 @@ module Dependabot
231
231
  # rubocop:enable Metrics/PerceivedComplexity
232
232
 
233
233
  def filter_lower_versions(versions_array)
234
- return versions_array unless current_version && version_class.correct?(current_version)
234
+ return versions_array unless current_version
235
235
 
236
236
  versions_array.select do |version|
237
237
  version > current_version
@@ -251,12 +251,6 @@ module Dependabot
251
251
  nil
252
252
  end
253
253
 
254
- def current_version
255
- return unless dependency.version && version_class.correct?(dependency.version)
256
-
257
- version_class.new(dependency.version)
258
- end
259
-
260
254
  def wants_prerelease?
261
255
  return true if current_version&.prerelease?
262
256
 
@@ -13,7 +13,7 @@ module Dependabot
13
13
  attr_reader :build_info
14
14
 
15
15
  VERSION_PATTERN = Gem::Version::VERSION_PATTERN + '(\+[0-9a-zA-Z\-.]+)?'
16
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/.freeze
16
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/
17
17
 
18
18
  def self.correct?(version)
19
19
  return false if version.nil?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-hex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.212.0
4
+ version: 0.214.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-06 00:00:00.000000000 Z
11
+ date: 2022-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,42 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.212.0
19
+ version: 0.214.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.212.0
27
- - !ruby/object:Gem::Dependency
28
- name: debase
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '='
32
- - !ruby/object:Gem::Version
33
- version: 0.2.3
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '='
39
- - !ruby/object:Gem::Version
40
- version: 0.2.3
41
- - !ruby/object:Gem::Dependency
42
- name: debase-ruby_core_source
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 0.10.16
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 0.10.16
26
+ version: 0.214.0
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: debug
57
29
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +58,14 @@ dependencies:
86
58
  requirements:
87
59
  - - "~>"
88
60
  - !ruby/object:Gem::Version
89
- version: 3.12.0
61
+ version: 4.0.0
90
62
  type: :development
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
66
  - - "~>"
95
67
  - !ruby/object:Gem::Version
96
- version: 3.12.0
68
+ version: 4.0.0
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: rake
99
71
  requirement: !ruby/object:Gem::Requirement
@@ -142,42 +114,28 @@ dependencies:
142
114
  requirements:
143
115
  - - "~>"
144
116
  - !ruby/object:Gem::Version
145
- version: 1.36.0
117
+ version: 1.39.0
146
118
  type: :development
147
119
  prerelease: false
148
120
  version_requirements: !ruby/object:Gem::Requirement
149
121
  requirements:
150
122
  - - "~>"
151
123
  - !ruby/object:Gem::Version
152
- version: 1.36.0
124
+ version: 1.39.0
153
125
  - !ruby/object:Gem::Dependency
154
126
  name: rubocop-performance
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
129
  - - "~>"
158
130
  - !ruby/object:Gem::Version
159
- version: 1.14.2
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: 1.14.2
167
- - !ruby/object:Gem::Dependency
168
- name: ruby-debug-ide
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: 0.7.3
131
+ version: 1.15.0
174
132
  type: :development
175
133
  prerelease: false
176
134
  version_requirements: !ruby/object:Gem::Requirement
177
135
  requirements:
178
136
  - - "~>"
179
137
  - !ruby/object:Gem::Version
180
- version: 0.7.3
138
+ version: 1.15.0
181
139
  - !ruby/object:Gem::Dependency
182
140
  name: simplecov
183
141
  requirement: !ruby/object:Gem::Requirement
@@ -263,6 +221,7 @@ files:
263
221
  - helpers/mix.exs
264
222
  - helpers/mix.lock
265
223
  - lib/dependabot/hex.rb
224
+ - lib/dependabot/hex/credential_helpers.rb
266
225
  - lib/dependabot/hex/file_fetcher.rb
267
226
  - lib/dependabot/hex/file_parser.rb
268
227
  - lib/dependabot/hex/file_updater.rb
@@ -291,14 +250,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
291
250
  requirements:
292
251
  - - ">="
293
252
  - !ruby/object:Gem::Version
294
- version: 2.7.0
253
+ version: 3.1.0
295
254
  required_rubygems_version: !ruby/object:Gem::Requirement
296
255
  requirements:
297
256
  - - ">="
298
257
  - !ruby/object:Gem::Version
299
- version: 2.7.0
258
+ version: 3.1.0
300
259
  requirements: []
301
- rubygems_version: 3.1.6
260
+ rubygems_version: 3.3.7
302
261
  signing_key:
303
262
  specification_version: 4
304
263
  summary: Elixir (Hex) support for dependabot