Current section

Files

Jump to
mandrag lib mix tasks mandrag.deploy.ex
Raw

lib/mix/tasks/mandrag.deploy.ex

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