Skip to content

Commit 9ac7bd7

Browse files
committed
check for new phx.new version
1 parent 3b4f773 commit 9ac7bd7

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

installer/lib/mix/tasks/phx.new.ex

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ defmodule Mix.Tasks.Phx.New do
150150

151151
def run(argv) do
152152
elixir_version_check!()
153+
check_for_new_version()
153154

154155
case OptionParser.parse!(argv, strict: @switches) do
155156
{_opts, []} ->
@@ -385,4 +386,56 @@ defmodule Mix.Tasks.Phx.New do
385386
)
386387
end
387388
end
389+
390+
defp check_for_new_version do
391+
current_version =
392+
Application.spec(:phx_new)[:vsn]
393+
|> to_string()
394+
|> Version.parse!()
395+
396+
latest_version = get_latest_version("phx_new")
397+
398+
if Version.compare(current_version, latest_version) == :lt do
399+
Mix.shell().info([
400+
:yellow,
401+
"A new version of phx.new is available:",
402+
:green,
403+
" v#{latest_version}",
404+
:reset,
405+
".",
406+
"\n",
407+
"You are currently running ",
408+
:red,
409+
"v#{current_version}",
410+
:reset,
411+
".\n",
412+
"To update, run:\n\n",
413+
" $ mix local.phx\n"
414+
])
415+
end
416+
rescue
417+
_ ->
418+
# ignore any errors to not prevent the generators from running
419+
# due to any issues while checking the version
420+
:ok
421+
end
422+
423+
defp get_latest_version(package) do
424+
case :hex_repo.get_package(:hex_core.default_config(), package) do
425+
{:ok, {200, _headers, package}} ->
426+
latest_release =
427+
Enum.max_by(
428+
package.releases,
429+
fn release ->
430+
Version.parse!(release.version)
431+
end,
432+
Version
433+
)
434+
435+
Version.parse!(latest_release.version)
436+
437+
_ ->
438+
nil
439+
end
440+
end
388441
end

installer/mix.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ defmodule Phx.New.MixProject do
5858

5959
def deps do
6060
[
61+
{:hex_core, "~> 0.11.0"},
6162
{:ex_doc, "~> 0.24", only: :docs}
6263
]
6364
end

installer/mix.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"earmark": {:hex, :earmark, "1.4.10", "bddce5e8ea37712a5bfb01541be8ba57d3b171d3fa4f80a0be9bcf1db417bcaf", [:mix], [{:earmark_parser, ">= 1.4.10", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "12dbfa80810478e521d3ffb941ad9fbfcbbd7debe94e1341b4c4a1b2411c1c27"},
33
"earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"},
44
"ex_doc": {:hex, :ex_doc, "0.34.0", "ab95e0775db3df71d30cf8d78728dd9261c355c81382bcd4cefdc74610bef13e", [:mix], [{:earmark_parser, "~> 1.4.39", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "60734fb4c1353f270c3286df4a0d51e65a2c1d9fba66af3940847cc65a8066d7"},
5+
"hex_core": {:hex, :hex_core, "0.11.0", "d1c6bbf2a4ee6b5f002bec6fa52b5080c53c8b63b7caf6eb88b943687547bff4", [:rebar3], [], "hexpm", "707893677a425491962a2db522f1d2b1f85f97ea27418b06f7929f1d30cde0b0"},
56
"makeup": {:hex, :makeup, "1.1.2", "9ba8837913bdf757787e71c1581c21f9d2455f4dd04cfca785c70bbfff1a76a3", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cce1566b81fbcbd21eca8ffe808f33b221f9eee2cbc7a1706fc3da9ff18e6cac"},
67
"makeup_elixir": {:hex, :makeup_elixir, "0.16.2", "627e84b8e8bf22e60a2579dad15067c755531fea049ae26ef1020cad58fe9578", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "41193978704763f6bbe6cc2758b84909e62984c7752b3784bd3c218bb341706b"},
78
"makeup_erlang": {:hex, :makeup_erlang, "1.0.0", "6f0eff9c9c489f26b69b61440bf1b238d95badae49adac77973cbacae87e3c2e", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "ea7a9307de9d1548d2a72d299058d1fd2339e3d398560a0e46c27dab4891e4d2"},

0 commit comments

Comments
 (0)