defmodule Mix.Tasks.Pleroma.TestRunner do
  @shortdoc "Retries tests once if they fail"

  use Mix.Task

  def run(args \\ []) do
    case System.cmd("mix", ["test", "--warnings-as-errors"] ++ args,
           into: IO.stream(:stdio, :line)
         ) do
      {_, 0} ->
        :ok

      _ ->
        retry(args)
    end
  end

  def retry(args) do
    case System.cmd("mix", ["test", "--failed"] ++ args, into: IO.stream(:stdio, :line)) do
      {_, 0} ->
        :ok

      _ ->
        exit(1)
    end
  end
end
