defmodule WorkloadService.Release do @moduledoc """ Used for executing DB release tasks when run in production without Mix installed. """ @app :workload_service def migrate do :ok = load_app() :ok = init_event_store() for repo <- repos() do {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true)) end :ok end def rollback(repo, version) do load_app() {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version)) end defp repos do Application.fetch_env!(@app, :ecto_repos) end defp load_app do {:ok, _} = Application.ensure_all_started(:ssl) {:ok, _} = Application.ensure_all_started(:postgrex) :ok = Application.ensure_loaded(@app) :ok end def init_event_store do config = WorkloadService.EventStore.config() :ok = EventStore.Tasks.Init.exec(config, []) end end