Current section
Files
Jump to
Current section
Files
lib/mix/tasks/bottler.ex
require Bottler.Helpers, as: H
alias Bottler, as: B
defmodule Mix.Tasks.Deploy do
@moduledoc """
Build a release file, ship it to remote servers, install it, and restart
the app. No hot code swap for now.
Use like `mix deploy`.
`prod` environment is used by default. Use like
`MIX_ENV=other_env mix deploy` to force it to `other_env`.
"""
use Mix.Task
def run(_args) do
H.set_prod_environment
c = H.read_and_validate_config
:ok = B.release c
{:ok, _} = B.ship c
{:ok, _} = B.install c
{:ok, _} = B.restart c
:ok
end
end
defmodule Mix.Tasks.Bottler.Release do
@moduledoc """
Build a release file. Use like `mix bottler.release`.
`prod` environment is used by default. Use like
`MIX_ENV=other_env mix bottler.release` to force it to `other_env`.
"""
use Mix.Task
def run(_args) do
H.set_prod_environment
c = H.read_and_validate_config
:ok = B.release c
:ok
end
end
defmodule Mix.Tasks.Bottler.Ship do
@moduledoc """
Ship a release file to configured remote servers.
Use like `mix bottler.ship`.
`prod` environment is used by default. Use like
`MIX_ENV=other_env mix bottler.ship` to force it to `other_env`.
"""
use Mix.Task
def run(_args) do
H.set_prod_environment
c = H.read_and_validate_config
{:ok, _} = B.ship c
:ok
end
end
defmodule Mix.Tasks.Bottler.Install do
@moduledoc """
Install a shipped file on configured remote servers.
Use like `mix bottler.install`.
`prod` environment is used by default. Use like
`MIX_ENV=other_env mix bottler.install` to force it to `other_env`.
"""
use Mix.Task
def run(_args) do
H.set_prod_environment
c = H.read_and_validate_config
{:ok, _} = B.install c
:ok
end
end
defmodule Mix.Tasks.Bottler.Restart do
@moduledoc """
Touch `tmp/restart` on configured remote servers.
That expects to have `Harakiri` or similar software reacting to that.
Use like `mix bottler.restart`.
`prod` environment is used by default. Use like
`MIX_ENV=other_env mix bottler.restart` to force it to `other_env`.
"""
use Mix.Task
def run(_args) do
H.set_prod_environment
c = H.read_and_validate_config
{:ok, _} = B.restart c
:ok
end
end
defmodule Mix.Tasks.Bottler.Rollback do
@moduledoc """
Simply move the _current_ link to the previous release and restart to
apply. It's quite faster than to deploy a previous release, that is
also possible.
Be careful because the _previous release_ may be different on each server.
It's up to you to keep all your servers rollback-able (yeah).
Use like `mix bottler.rollback`.
`prod` environment is used by default. Use like
`MIX_ENV=other_env mix bottler.rollback` to force it to `other_env`.
"""
use Mix.Task
def run(_args) do
H.set_prod_environment
c = H.read_and_validate_config
{:ok, _} = B.rollback c
:ok
end
end