lib/mix/tasks/cloister_run.ex

defmodule Mix.Tasks.Cloister.Run do
  @shortdoc "Run tests in Cloister"
  @moduledoc """
  Mix task to run test in previously started Cloister env.
  """

  use Mix.Task

  import Cloister.Mix.Commons

  @impl Mix.Task
  @doc false
  def run(args) do
    {[], pass_thru, []} = OptionParser.parse(args, strict: [])

    if config?() do
      epmd_port = spawn_epmd()
      ports = spawn_nodes()

      Mix.shell().info([:green, "* spawned ", :reset, inspect(epmd: epmd_port, nodes: ports)])

      Mix.shell().info([
        :green,
        "* ",
        :reset,
        "use ",
        :magenta,
        "iex --name #{node_name(0)} -S mix ",
        :reset,
        "to connect to a cluster"
      ])

      spawn_this()
      Mix.Tasks.Run.run(["--no-halt" | pass_thru])

      cleanup([epmd_port | ports])
    end
  end
end