Packages
nerves
1.6.7
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.0
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.3
1.9.2
retired
1.9.1
1.9.0
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
retired
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
retired
1.7.1
retired
1.7.0
retired
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
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.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-rc.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
Craft and deploy bulletproof embedded software
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/compile.nerves_package.ex
defmodule Mix.Tasks.Compile.NervesPackage do
use Mix.Task
import Mix.Nerves.IO
require Logger
@moduledoc """
Build a Nerves Artifact from a Nerves Package
"""
@shortdoc "Nerves Package Compiler"
@recursive true
@impl true
def run(_args) do
debug_info("Compile.NervesPackage start")
if Nerves.Env.enabled?() do
config = Mix.Project.config()
bootstrap_started?()
|> bootstrap_check()
Nerves.Env.ensure_loaded(Mix.Project.config()[:app])
package = Nerves.Env.package(config[:app])
toolchain = Nerves.Env.toolchain()
ret =
if Nerves.Artifact.stale?(package) do
Nerves.Artifact.build(package, toolchain)
:ok
else
:noop
end
debug_info("Compile.NervesPackage end")
ret
else
debug_info("Compile.NervesPackage disabled")
:noop
end
end
@doc false
def bootstrap_check(true), do: :ok
def bootstrap_check(false) do
error =
cond do
in_umbrella?(File.cwd!()) ->
"""
Compiling Nerves packages from the top of umbrella projects isn't supported.
Please cd into the application directory and try again.
"""
true ->
"""
Compiling Nerves packages requires nerves_bootstrap to be started.
Please ensure that MIX_TARGET is set in your environment and that you have added
the proper aliases to your mix.exs file:
def project do
[
# ...
aliases: [loadconfig: [&bootstrap/1]],
]
end
defp bootstrap(args) do
Application.start(:nerves_bootstrap)
Mix.Task.run("loadconfig", args)
end
"""
end
Mix.raise(error)
end
defp bootstrap_started?() do
Application.started_applications()
|> Enum.map(&Tuple.to_list/1)
|> Enum.map(&List.first/1)
|> Enum.member?(:nerves_bootstrap)
end
defp in_umbrella?(app_path) do
umbrella = Path.expand(Path.join([app_path, "..", ".."]))
mix_path = Path.join(umbrella, "mix.exs")
apps_path = Path.join(umbrella, "apps")
File.exists?(mix_path) && File.exists?(apps_path)
end
end