Merge branch 'fix/1610-release-compilation-config-fix' into 'develop'
Merging default release config on app start Closes #1610 See merge request pleroma/pleroma!2288
This commit is contained in:
		
							parent
							
								
									7cf7083076
								
							
						
					
					
						commit
						423cfaf141
					
				
					 10 changed files with 55 additions and 54 deletions
				
			
		| 
						 | 
				
			
			@ -28,7 +28,7 @@ def run(_) do
 | 
			
		|||
  defp do_run(implementation) do
 | 
			
		||||
    start_pleroma()
 | 
			
		||||
 | 
			
		||||
    with descriptions <- Pleroma.Config.Loader.load("config/description.exs"),
 | 
			
		||||
    with descriptions <- Pleroma.Config.Loader.read("config/description.exs"),
 | 
			
		||||
         {:ok, file_path} <-
 | 
			
		||||
           Pleroma.Docs.Generator.process(
 | 
			
		||||
             implementation,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,6 +31,7 @@ def user_agent do
 | 
			
		|||
  # See http://elixir-lang.org/docs/stable/elixir/Application.html
 | 
			
		||||
  # for more information on OTP Applications
 | 
			
		||||
  def start(_type, _args) do
 | 
			
		||||
    Pleroma.Config.Holder.save_default()
 | 
			
		||||
    Pleroma.HTML.compile_scrubbers()
 | 
			
		||||
    Pleroma.Config.DeprecationWarnings.warn()
 | 
			
		||||
    Pleroma.Plugs.HTTPSecurityPlug.warn_if_disabled()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,14 +3,33 @@
 | 
			
		|||
# SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		||||
 | 
			
		||||
defmodule Pleroma.Config.Holder do
 | 
			
		||||
  @config Pleroma.Config.Loader.load_and_merge()
 | 
			
		||||
  @config Pleroma.Config.Loader.default_config()
 | 
			
		||||
 | 
			
		||||
  @spec config() :: keyword()
 | 
			
		||||
  def config, do: @config
 | 
			
		||||
  @spec save_default() :: :ok
 | 
			
		||||
  def save_default do
 | 
			
		||||
    default_config =
 | 
			
		||||
      if System.get_env("RELEASE_NAME") do
 | 
			
		||||
        release_config =
 | 
			
		||||
          [:code.root_dir(), "releases", System.get_env("RELEASE_VSN"), "releases.exs"]
 | 
			
		||||
          |> Path.join()
 | 
			
		||||
          |> Pleroma.Config.Loader.read()
 | 
			
		||||
 | 
			
		||||
  @spec config(atom()) :: any()
 | 
			
		||||
  def config(group), do: @config[group]
 | 
			
		||||
        Pleroma.Config.Loader.merge(@config, release_config)
 | 
			
		||||
      else
 | 
			
		||||
        @config
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
  @spec config(atom(), atom()) :: any()
 | 
			
		||||
  def config(group, key), do: @config[group][key]
 | 
			
		||||
    Pleroma.Config.put(:default_config, default_config)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  @spec default_config() :: keyword()
 | 
			
		||||
  def default_config, do: get_default()
 | 
			
		||||
 | 
			
		||||
  @spec default_config(atom()) :: keyword()
 | 
			
		||||
  def default_config(group), do: Keyword.get(get_default(), group)
 | 
			
		||||
 | 
			
		||||
  @spec default_config(atom(), atom()) :: keyword()
 | 
			
		||||
  def default_config(group, key), do: get_in(get_default(), [group, key])
 | 
			
		||||
 | 
			
		||||
  defp get_default, do: Pleroma.Config.get(:default_config)
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,32 +13,28 @@ defmodule Pleroma.Config.Loader do
 | 
			
		|||
  ]
 | 
			
		||||
 | 
			
		||||
  if Code.ensure_loaded?(Config.Reader) do
 | 
			
		||||
    @spec load(Path.t()) :: keyword()
 | 
			
		||||
    def load(path), do: Config.Reader.read!(path)
 | 
			
		||||
    @reader Config.Reader
 | 
			
		||||
 | 
			
		||||
    defp do_merge(conf1, conf2), do: Config.Reader.merge(conf1, conf2)
 | 
			
		||||
    def read(path), do: @reader.read!(path)
 | 
			
		||||
  else
 | 
			
		||||
    # support for Elixir less than 1.9
 | 
			
		||||
    @spec load(Path.t()) :: keyword()
 | 
			
		||||
    def load(path) do
 | 
			
		||||
    @reader Mix.Config
 | 
			
		||||
    def read(path) do
 | 
			
		||||
      path
 | 
			
		||||
      |> Mix.Config.eval!()
 | 
			
		||||
      |> @reader.eval!()
 | 
			
		||||
      |> elem(0)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    defp do_merge(conf1, conf2), do: Mix.Config.merge(conf1, conf2)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  @spec load_and_merge() :: keyword()
 | 
			
		||||
  def load_and_merge do
 | 
			
		||||
    all_paths =
 | 
			
		||||
      if Pleroma.Config.get(:release),
 | 
			
		||||
        do: ["config/config.exs", "config/releases.exs"],
 | 
			
		||||
        else: ["config/config.exs"]
 | 
			
		||||
  @spec read(Path.t()) :: keyword()
 | 
			
		||||
 | 
			
		||||
    all_paths
 | 
			
		||||
    |> Enum.map(&load(&1))
 | 
			
		||||
    |> Enum.reduce([], &do_merge(&2, &1))
 | 
			
		||||
  @spec merge(keyword(), keyword()) :: keyword()
 | 
			
		||||
  def merge(c1, c2), do: @reader.merge(c1, c2)
 | 
			
		||||
 | 
			
		||||
  @spec default_config() :: keyword()
 | 
			
		||||
  def default_config do
 | 
			
		||||
    "config/config.exs"
 | 
			
		||||
    |> read()
 | 
			
		||||
    |> filter()
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,7 +83,7 @@ defp merge_and_update(setting) do
 | 
			
		|||
      key = ConfigDB.from_string(setting.key)
 | 
			
		||||
      group = ConfigDB.from_string(setting.group)
 | 
			
		||||
 | 
			
		||||
      default = Pleroma.Config.Holder.config(group, key)
 | 
			
		||||
      default = Pleroma.Config.Holder.default_config(group, key)
 | 
			
		||||
      value = ConfigDB.from_binary(setting.value)
 | 
			
		||||
 | 
			
		||||
      merged_value =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@ def process(descriptions) do
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def compile do
 | 
			
		||||
    with config <- Pleroma.Config.Loader.load("config/description.exs") do
 | 
			
		||||
    with config <- Pleroma.Config.Loader.read("config/description.exs") do
 | 
			
		||||
      config[:pleroma][:config_description]
 | 
			
		||||
      |> Pleroma.Docs.Generator.convert_to_strings()
 | 
			
		||||
      |> Jason.encode!()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -834,7 +834,7 @@ def config_show(conn, _params) do
 | 
			
		|||
      configs = ConfigDB.get_all_as_keyword()
 | 
			
		||||
 | 
			
		||||
      merged =
 | 
			
		||||
        Config.Holder.config()
 | 
			
		||||
        Config.Holder.default_config()
 | 
			
		||||
        |> ConfigDB.merge(configs)
 | 
			
		||||
        |> Enum.map(fn {group, values} ->
 | 
			
		||||
          Enum.map(values, fn {key, value} ->
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,8 +7,8 @@ defmodule Pleroma.Config.HolderTest do
 | 
			
		|||
 | 
			
		||||
  alias Pleroma.Config.Holder
 | 
			
		||||
 | 
			
		||||
  test "config/0" do
 | 
			
		||||
    config = Holder.config()
 | 
			
		||||
  test "default_config/0" do
 | 
			
		||||
    config = Holder.default_config()
 | 
			
		||||
    assert config[:pleroma][Pleroma.Uploaders.Local][:uploads] == "test/uploads"
 | 
			
		||||
    assert config[:tesla][:adapter] == Tesla.Mock
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -20,15 +20,15 @@ test "config/0" do
 | 
			
		|||
    refute config[:phoenix][:serve_endpoints]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "config/1" do
 | 
			
		||||
    pleroma_config = Holder.config(:pleroma)
 | 
			
		||||
  test "default_config/1" do
 | 
			
		||||
    pleroma_config = Holder.default_config(:pleroma)
 | 
			
		||||
    assert pleroma_config[Pleroma.Uploaders.Local][:uploads] == "test/uploads"
 | 
			
		||||
    tesla_config = Holder.config(:tesla)
 | 
			
		||||
    tesla_config = Holder.default_config(:tesla)
 | 
			
		||||
    assert tesla_config[:adapter] == Tesla.Mock
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "config/2" do
 | 
			
		||||
    assert Holder.config(:pleroma, Pleroma.Uploaders.Local) == [uploads: "test/uploads"]
 | 
			
		||||
    assert Holder.config(:tesla, :adapter) == Tesla.Mock
 | 
			
		||||
  test "default_config/2" do
 | 
			
		||||
    assert Holder.default_config(:pleroma, Pleroma.Uploaders.Local) == [uploads: "test/uploads"]
 | 
			
		||||
    assert Holder.default_config(:tesla, :adapter) == Tesla.Mock
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,28 +7,13 @@ defmodule Pleroma.Config.LoaderTest do
 | 
			
		|||
 | 
			
		||||
  alias Pleroma.Config.Loader
 | 
			
		||||
 | 
			
		||||
  test "load/1" do
 | 
			
		||||
    config = Loader.load("test/fixtures/config/temp.secret.exs")
 | 
			
		||||
  test "read/1" do
 | 
			
		||||
    config = Loader.read("test/fixtures/config/temp.secret.exs")
 | 
			
		||||
    assert config[:pleroma][:first_setting][:key] == "value"
 | 
			
		||||
    assert config[:pleroma][:first_setting][:key2] == [Pleroma.Repo]
 | 
			
		||||
    assert config[:quack][:level] == :info
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "load_and_merge/0" do
 | 
			
		||||
    config = Loader.load_and_merge()
 | 
			
		||||
 | 
			
		||||
    refute config[:pleroma][Pleroma.Repo]
 | 
			
		||||
    refute config[:pleroma][Pleroma.Web.Endpoint]
 | 
			
		||||
    refute config[:pleroma][:env]
 | 
			
		||||
    refute config[:pleroma][:configurable_from_database]
 | 
			
		||||
    refute config[:pleroma][:database]
 | 
			
		||||
    refute config[:phoenix][:serve_endpoints]
 | 
			
		||||
 | 
			
		||||
    assert config[:pleroma][:ecto_repos] == [Pleroma.Repo]
 | 
			
		||||
    assert config[:pleroma][Pleroma.Uploaders.Local][:uploads] == "test/uploads"
 | 
			
		||||
    assert config[:tesla][:adapter] == Tesla.Mock
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "filter_group/2" do
 | 
			
		||||
    assert Loader.filter_group(:pleroma,
 | 
			
		||||
             pleroma: [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,7 +70,7 @@ test "transfer config values for 1 group and some keys" do
 | 
			
		|||
 | 
			
		||||
    assert Application.get_env(:quack, :level) == :info
 | 
			
		||||
    assert Application.get_env(:quack, :meta) == [:none]
 | 
			
		||||
    default = Pleroma.Config.Holder.config(:quack, :webhook_url)
 | 
			
		||||
    default = Pleroma.Config.Holder.default_config(:quack, :webhook_url)
 | 
			
		||||
    assert Application.get_env(:quack, :webhook_url) == default
 | 
			
		||||
 | 
			
		||||
    on_exit(fn ->
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue