lib/mix/tasks/migrate.ex
defmodule Mix.Tasks.ExcellentMigrations.Migrate do
@moduledoc "Runs `ecto.migrate` task only if no dangerous operations were detected in migrations."
use Mix.Task
require Logger
@shortdoc "Runs `ecto.migrate` if migrations are safe"
def run(args) do
case ExcellentMigrations.Runner.check_migrations() do
:safe ->
Mix.Task.run("ecto.migrate", args)
{:dangerous, dangers} ->
Enum.each(dangers, fn danger ->
danger
|> ExcellentMigrations.MessageGenerator.build_message()
|> Logger.error()
end)
System.stop(1)
end
end
end