diff --git a/config/runtime.exs b/config/runtime.exs index 0d3158270..249a9e82e 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -1,41 +1,2 @@ import Config -require Logger - -config :livebook, LivebookWeb.Endpoint, - secret_key_base: - Livebook.Config.secret!("LIVEBOOK_SECRET_KEY_BASE") || - Base.encode64(:crypto.strong_rand_bytes(48)) - -if password = Livebook.Config.password!("LIVEBOOK_PASSWORD") do - config :livebook, authentication_mode: :password, password: password -else - config :livebook, token: Livebook.Utils.random_id() -end - -if port = Livebook.Config.port!("LIVEBOOK_PORT") do - config :livebook, LivebookWeb.Endpoint, http: [port: port] -end - -if ip = Livebook.Config.ip!("LIVEBOOK_IP") do - config :livebook, LivebookWeb.Endpoint, http: [ip: ip] -end - -config :livebook, - :cookie, - Livebook.Config.cookie!("LIVEBOOK_COOKIE") || - Livebook.Config.cookie!("RELEASE_COOKIE") || - Livebook.Utils.random_cookie() - -config :livebook, - :default_runtime, - Livebook.Config.default_runtime!("LIVEBOOK_DEFAULT_RUNTIME") || - {Livebook.Runtime.ElixirStandalone, []} - -root_path = - Livebook.Config.root_path!("LIVEBOOK_ROOT_PATH") - |> Livebook.FileSystem.Utils.ensure_dir_path() - -local_file_system = Livebook.FileSystem.Local.new(default_path: root_path) -configured_file_systems = Livebook.Config.file_systems!("LIVEBOOK_FILE_SYSTEM_") - -config :livebook, :file_systems, [local_file_system | configured_file_systems] +Livebook.config_runtime() diff --git a/lib/livebook.ex b/lib/livebook.ex index 4589f5780..f77ec0e29 100644 --- a/lib/livebook.ex +++ b/lib/livebook.ex @@ -5,6 +5,58 @@ defmodule Livebook do This module includes the public API. """ + @doc """ + Executes Livebook's config/runtime.exs. + + If you use Livebook as a dependency, you can add the following + to your `config/runtime.exs` to trigger Livebook's config/runtime.exs + configuration: + + Livebook.config_runtime() + + """ + def config_runtime do + import Config + + config :livebook, LivebookWeb.Endpoint, + secret_key_base: + Livebook.Config.secret!("LIVEBOOK_SECRET_KEY_BASE") || + Base.encode64(:crypto.strong_rand_bytes(48)) + + if port = Livebook.Config.port!("LIVEBOOK_PORT") do + config :livebook, LivebookWeb.Endpoint, http: [port: port] + end + + if ip = Livebook.Config.ip!("LIVEBOOK_IP") do + config :livebook, LivebookWeb.Endpoint, http: [ip: ip] + end + + if password = Livebook.Config.password!("LIVEBOOK_PASSWORD") do + config :livebook, authentication_mode: :password, password: password + else + config :livebook, token: Livebook.Utils.random_id() + end + + if runtime = Livebook.Config.default_runtime!("LIVEBOOK_DEFAULT_RUNTIME") do + config :livebook, :default_runtime, runtime + end + + config :livebook, + :cookie, + Livebook.Config.cookie!("LIVEBOOK_COOKIE") || + Livebook.Config.cookie!("RELEASE_COOKIE") || + Livebook.Utils.random_cookie() + + root_path = + Livebook.Config.root_path!("LIVEBOOK_ROOT_PATH") + |> Livebook.FileSystem.Utils.ensure_dir_path() + + local_file_system = Livebook.FileSystem.Local.new(default_path: root_path) + configured_file_systems = Livebook.Config.file_systems!("LIVEBOOK_FILE_SYSTEM_") + + config :livebook, :file_systems, [local_file_system | configured_file_systems] + end + @doc """ Parses the given Live Markdown document and converts it to Elixir source code. diff --git a/mix.exs b/mix.exs index fde3821dd..db3f7ae86 100644 --- a/mix.exs +++ b/mix.exs @@ -24,7 +24,8 @@ defmodule Livebook.MixProject do def application do [ mod: {Livebook.Application, []}, - extra_applications: [:logger, :runtime_tools, :os_mon, :inets, :ssl, :xmerl] + extra_applications: [:logger, :runtime_tools, :os_mon, :inets, :ssl, :xmerl], + env: Application.get_all_env(:livebook) ] end