Current section

Files

Jump to
nerves lib mix tasks firmware.burn.ex
Raw

lib/mix/tasks/firmware.burn.ex

defmodule Mix.Tasks.Firmware.Burn do
use Mix.Task
import Mix.Nerves.Utils
def run(args) do
preflight
Mix.shell.info "Nerves Firmware Burn"
config = Mix.Project.config
otp_app = config[:app]
target = config[:target]
System.get_env("NERVES_SYSTEM") || raise """
Environment variable $NERVES_SYSTEM is not set
"""
System.get_env("NERVES_TOOLCHAIN") || raise """
Environment variable $NERVES_TOOLCHAIN is not set
"""
fw = Path.join(File.cwd!, "_images/#{target}/#{otp_app}.fw")
unless File.exists?(fw) do
raise "Firmware for target #{target} not found at #{fw} run `mix firmware` to build"
end
fwup = "fwup -a -i #{fw} -t complete #{args}"
fwup =
case :os.type do
{_, :darwin} ->
fwup
{_, :linux} ->
ask_pass = System.get_env("SUDO_ASKPASS") || "/usr/bin/ssh-askpass"
System.put_env("SUDO_ASKPASS", ask_pass)
"sudo #{fwup}"
{_, type} ->
raise "Unable to burn firmware on your host #{inspect type}"
end
shell(fwup)
|> result
end
def result(%{status: 0}), do: nil
def result(result), do: Mix.raise """
Nerves encountered an error. #{inspect result}
"""
end