Packages
nerves_bootstrap
1.6.2
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
def mix_target do
if function_exported?(Mix, :target, 0) do
apply(Mix, :target, [])
else
(System.get_env("MIX_TARGET") || "host")
|> String.to_atom()
end
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