livebook/lib/livebook/release.ex
Jonatan Kłosko 8c91a1f788
Introduce abstraction for app deployment and permanent apps (#2524)
Co-authored-by: José Valim <jose.valim@dashbit.co>
2024-03-26 20:20:07 +01:00

44 lines
1.1 KiB
Elixir

defmodule Livebook.Release do
require Logger
@doc """
Runs the setup for all apps deployed from directory on startup.
"""
def warmup_apps() do
start_app()
if apps_path = Livebook.Config.apps_path() do
case Livebook.Config.apps_path_warmup() do
:manual ->
:ok
other ->
Livebook.Config.abort!(
"expected apps warmup mode to be :manual, got: #{inspect(other)}." <>
" Make sure to set LIVEBOOK_APPS_PATH_WARMUP=manual"
)
end
app_specs =
Livebook.Apps.build_app_specs_in_dir(apps_path,
hub_id: Livebook.Config.apps_path_hub_id()
)
if app_specs != [] do
Logger.info("Running app warmups")
for app_spec <- app_specs do
with {:error, message} <- Livebook.Apps.warmup_app(app_spec) do
Logger.info("Warmup failed for app #{app_spec.slug}, #{message}")
end
end
end
end
end
defp start_app() do
Application.load(:livebook)
Application.put_env(:livebook, :serverless, true)
{:ok, _} = Application.ensure_all_started(:livebook)
end
end