farmbot_os/farmbot_os/lib/mix/tasks.farmbot/firmware/sign.ex

53 lines
1.1 KiB
Elixir

defmodule Mix.Tasks.Farmbot.Firmware.Sign do
@moduledoc "Sign a firmware."
@shortdoc "Sign a firmware."
import Mix.Tasks.Farmbot.Env
use Mix.Task
def run(args) do
case args do
[private_key_file, input_fw_file, output_fw_file] ->
do_run(private_key_file, input_fw_file, output_fw_file)
[private_key_file] ->
do_run(private_key_file, fw_file(), signed_fw_file())
_ ->
error()
end
end
@dialyzer {[:no_return], [error: 0]}
defp error do
Mix.raise(
"Usage: mix farmbot.firmware.sign /path/to/private/key [input.fw] [output.fw]"
)
end
defp do_run(private_key_file, input_fw_file, output_fw_file) do
unless File.exists?(private_key_file) do
error()
end
unless File.exists?(input_fw_file) do
Mix.raise("Could not find input file: #{input_fw_file}")
end
Mix.shell().info([
:green,
"Signing: #{input_fw_file} with: #{private_key_file} to: #{output_fw_file}"
])
System.cmd("fwup", [
"-S",
"-s",
private_key_file,
"-i",
input_fw_file,
"-o",
output_fw_file
])
end
end