Packages

Generic Elixir toolkit for deploying, observing, and readiness-verifying Coolify apps

Current section

Files

Jump to
coolify_ex lib mix tasks coolify.status.ex
Raw

lib/mix/tasks/coolify.status.ex

defmodule Mix.Tasks.Coolify.Status do
use Mix.Task
@shortdoc "Fetches deployment status from Coolify"
alias CoolifyEx.Client
alias CoolifyEx.Config
alias CoolifyEx.MixTaskSupport
@moduledoc """
Fetches a deployment by UUID.
mix coolify.status DEPLOYMENT_UUID
mix coolify.status DEPLOYMENT_UUID --config .coolify_ex.exs
"""
@impl Mix.Task
def run(args) do
MixTaskSupport.ensure_started!()
{opts, argv, _invalid} = OptionParser.parse(args, strict: [config: :string])
case argv do
[deployment_uuid] ->
case Config.load(Keyword.get(opts, :config)) do
{:ok, config} -> fetch_and_print_status(config, deployment_uuid)
{:error, reason} -> Mix.raise("Could not fetch deployment status: #{inspect(reason)}")
end
_ ->
Mix.raise("Usage: mix coolify.status DEPLOYMENT_UUID [--config path]")
end
end
defp fetch_and_print_status(config, deployment_uuid) do
case Client.fetch_deployment(config.base_url, config.token, deployment_uuid) do
{:ok, deployment} ->
Mix.shell().info("Status: #{deployment.status}")
print_logs_url(deployment.deployment_url)
{:error, reason} ->
Mix.raise("Could not fetch deployment status: #{inspect(reason)}")
end
end
defp print_logs_url(nil), do: :ok
defp print_logs_url(url), do: Mix.shell().info("Logs: #{url}")
end