Packages
nerves_bootstrap
1.0.0-rc.3
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.5
1.14.4
1.14.3
1.14.2
1.14.0
1.13.1
1.13.0
1.12.2
1.12.1
1.12.0
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.1
1.8.0
1.7.1
1.7.0
1.6.3
1.6.2
1.6.1
1.6.0
1.5.3
1.5.2
1.5.1
1.5.0
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
Nerves mix integration bootstrap and new project generator
Current section
Files
Jump to
Current section
Files
lib/nerves_bootstrap.ex
defmodule Nerves.Bootstrap do
use Application
@version Mix.Project.config()[:version]
# See https://hexdocs.pm/elixir/Application.html
# for more information on OTP Applications
@moduledoc false
def start(_type, _args) do
Nerves.Bootstrap.Aliases.init()
{:ok, self()}
end
@doc """
Returns the version of nerves_bootstrap
"""
def version, do: @version
@doc """
Add the required Nerves bootstrap aliases to the existing ones
"""
defdelegate add_aliases(aliases), to: Nerves.Bootstrap.Aliases
@doc """
Check the nerves_bootstrap updates from hex
"""
def check_for_update() do
try do
Hex.start()
{:ok, {200, resp, _}} = Hex.API.Package.get("hexpm", "nerves_bootstrap")
current_version =
Nerves.Bootstrap.version()
|> Version.parse!()
release_versions =
resp
|> Map.get("releases")
|> Enum.map(&Map.get(&1, "version"))
|> Enum.map(&Version.parse!/1)
case check_for_update(release_versions, current_version) do
nil ->
:noop
latest_version ->
render_update_message(current_version, latest_version)
end
rescue
_e -> :noop
end
end
def check_for_update(releases, current_version) do
releases
|> filter_pre_release(current_version)
|> Enum.filter(&(Version.compare(&1, current_version) == :gt))
|> Enum.sort(&(Version.compare(&1, &2) == :gt))
|> List.first()
end
def render_update_message(current_version, %{pre: pre} = latest_version) do
message =
"A new version of Nerves bootstrap is available(#{current_version} < #{latest_version}), " <>
if pre == [] do
"""
You can update by running
mix local.nerves
"""
else
"""
You can update by running
mix archive.install hex nerves_bootstrap #{latest_version}
"""
end
Mix.shell().info([
IO.ANSI.yellow(),
message,
IO.ANSI.reset()
])
end
defp filter_pre_release(releases, %{pre: []}) do
releases
|> Enum.filter(&(Map.get(&1, :pre) == []))
end
defp filter_pre_release(releases, %{major: major, minor: minor, patch: patch}) do
releases
|> Enum.filter(fn
%{pre: []} ->
true
%{major: ^major, minor: ^minor, patch: ^patch} ->
true
_ ->
false
end)
end
end