defmodule Mix.Tasks.Mandrag.Deploy do use Mix.Task import Mandrag @shortdoc "Deploys an exrm release." def run(_) do # Silence output unless :debug if output_level < 2, do: System.put_env("MIX_QUIET", "true") initial_deploy? |> deploy end defp deploy(true) do message "Starting initial deploy." Mix.Task.run "mandrag.prepare" Mix.Task.run "mandrag.build" Mix.Task.run "mandrag.start" end defp deploy(false) do message "Starting deploy." Mix.Task.run "mandrag.build" if Code.ensure_loaded?(Ecto), do: update_db location |> rel_dir? |> upgrade end defp upgrade(true), do: Mix.Task.run "mandrag.upgrade.hot" defp upgrade(false), do: Mix.Task.run "mandrag.upgrade.cold" defp update_db do case location do :local -> Mix.Task.run "ecto.migrate", [] :remote -> ssh "cd #{name} && MIX_ENV=#{Mix.env} mix ecto.migrate" end end defp initial_deploy?, do: ssh("ls #{name} &>/dev/null") != 0 defp rel_dir?(:remote), do: ssh("ls #{name}/rel/* %>/dev/null") == 0 defp rel_dir?(:local), do: Mix.Shell.IO.cmd("ls rel/* %>/dev/null") == 0 end