aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/release_tasks.ex36
1 files changed, 31 insertions, 5 deletions
diff --git a/lib/pleroma/release_tasks.ex b/lib/pleroma/release_tasks.ex
index 66a8b627f..7726bc635 100644
--- a/lib/pleroma/release_tasks.ex
+++ b/lib/pleroma/release_tasks.ex
@@ -3,18 +3,21 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.ReleaseTasks do
+ @repo Pleroma.Repo
+
def run(args) do
+ Mix.Tasks.Pleroma.Common.start_pleroma()
[task | args] = String.split(args)
case task do
- "migrate" -> migrate(args)
+ "migrate" -> migrate()
+ "create" -> create()
+ "rollback" -> rollback(String.to_integer(Enum.at(args, 0)))
task -> mix_task(task, args)
end
end
defp mix_task(task, args) do
- # Modules are not loaded before application starts
- Mix.Tasks.Pleroma.Common.start_pleroma()
{:ok, modules} = :application.get_key(:pleroma, :modules)
module =
@@ -32,7 +35,30 @@ defmodule Pleroma.ReleaseTasks do
end
end
- defp migrate(_args) do
- :noop
+ def migrate do
+ {:ok, _, _} = Ecto.Migrator.with_repo(@repo, &Ecto.Migrator.run(&1, :up, all: true))
+ end
+
+ def rollback(version) do
+ {:ok, _, _} = Ecto.Migrator.with_repo(@repo, &Ecto.Migrator.run(&1, :down, to: version))
+ end
+
+ def create do
+ case @repo.__adapter__.storage_up(@repo.config) do
+ :ok ->
+ IO.puts("The database for #{inspect(@repo)} has been created")
+
+ {:error, :already_up} ->
+ IO.puts("The database for #{inspect(@repo)} has already been created")
+
+ {:error, term} when is_binary(term) ->
+ IO.puts(:stderr, "The database for #{inspect(@repo)} couldn't be created: #{term}")
+
+ {:error, term} ->
+ IO.puts(
+ :stderr,
+ "The database for #{inspect(@repo)} couldn't be created: #{inspect(term)}"
+ )
+ end
end
end