Current section

Files

Jump to
nerves_firmware_ssh lib mix tasks firmware.gen.script.ex
Raw

lib/mix/tasks/firmware.gen.script.ex

defmodule Mix.Tasks.Firmware.Gen.Script do
use Mix.Task
@script_name "upload.sh"
@shortdoc "Generates a shell script for pushing firmware updates"
@moduledoc """
Creates a shell script for invoking ssh to upgrade devices with nerves_firmware_ssh.
This script may be used on its own or used as a base for more complicated
device software upgrade deployments.
It saves the script to #{@script_name}.
"""
@spec run(keyword()) :: :ok
def run(_args) do
upload_script_contents =
Application.app_dir(:nerves_firmware_ssh, "priv/templates/script.upload.eex")
|> EEx.eval_file([])
if File.exists?(@script_name) do
Mix.shell().yes?("OK to overwrite #{@script_name}?") || Mix.raise("Aborted")
end
Mix.shell().info("""
Writing #{@script_name}...
""")
File.write!(@script_name, upload_script_contents)
File.chmod!(@script_name, 0o755)
end
end