@@ -198,26 +198,32 @@ defmodule Mix.Local do
198198
199199 defp find_latest_eligible_version ( entries , artifact_version ) do
200200 elixir_version = Version . parse! ( System . version ( ) )
201+ otp_release = System . otp_release ( )
201202
202203 entries
203204 |> Enum . reverse ( )
204- |> find_version ( artifact_version , elixir_version )
205+ |> find_version ( artifact_version , elixir_version , otp_release )
205206 end
206207
207- defp find_version ( entries , artifact_version , elixir_version ) do
208+ defp find_version ( entries , artifact_version , elixir_version , otp_release ) do
208209 entries =
209210 if artifact_version do
210211 Enum . filter ( entries , & ( hd ( & 1 ) == artifact_version ) )
211212 else
212213 entries
213214 end
214215
215- Enum . find_value ( entries , & find_by_elixir_version ( & 1 , elixir_version ) )
216+ Enum . find_value ( entries , & find_by_elixir_version ( & 1 , elixir_version , otp_release ) )
216217 end
217218
218- defp find_by_elixir_version ( [ artifact_version , digest , hex_elixir_version | _ ] , elixir_version ) do
219- if Version . compare ( hex_elixir_version , elixir_version ) != :gt do
220- { hex_elixir_version , artifact_version , digest }
219+ defp find_by_elixir_version (
220+ [ artifact_version , digest , hex_elixir_version , hex_otp_release | _ ] ,
221+ elixir_version ,
222+ otp_release
223+ ) do
224+ if Version . compare ( hex_elixir_version , elixir_version ) != :gt and
225+ hex_otp_release <= otp_release do
226+ { hex_elixir_version , artifact_version , digest , hex_otp_release }
221227 end
222228 end
223229end
0 commit comments