support for tuples with more than 2 values
[akkoma] / lib / pleroma / release_tasks.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.ReleaseTasks do
6 @repo Pleroma.Repo
7
8 def run(args) do
9 [task | args] = String.split(args)
10
11 case task do
12 "migrate" -> migrate(args)
13 "create" -> create()
14 "rollback" -> rollback(args)
15 task -> mix_task(task, args)
16 end
17 end
18
19 defp mix_task(task, args) do
20 Application.load(:pleroma)
21 {:ok, modules} = :application.get_key(:pleroma, :modules)
22
23 module =
24 Enum.find(modules, fn module ->
25 module = Module.split(module)
26
27 match?(["Mix", "Tasks", "Pleroma" | _], module) and
28 String.downcase(List.last(module)) == task
29 end)
30
31 if module do
32 module.run(args)
33 else
34 IO.puts("The task #{task} does not exist")
35 end
36 end
37
38 def migrate(args) do
39 Mix.Tasks.Pleroma.Ecto.Migrate.run(args)
40 end
41
42 def rollback(args) do
43 Mix.Tasks.Pleroma.Ecto.Rollback.run(args)
44 end
45
46 def create do
47 case @repo.__adapter__.storage_up(@repo.config) do
48 :ok ->
49 IO.puts("The database for #{inspect(@repo)} has been created")
50
51 {:error, :already_up} ->
52 IO.puts("The database for #{inspect(@repo)} has already been created")
53
54 {:error, term} when is_binary(term) ->
55 IO.puts(:stderr, "The database for #{inspect(@repo)} couldn't be created: #{term}")
56
57 {:error, term} ->
58 IO.puts(
59 :stderr,
60 "The database for #{inspect(@repo)} couldn't be created: #{inspect(term)}"
61 )
62 end
63 end
64 end