From 8e4985be246083b89cf11268b94dcb670f63ae3e Mon Sep 17 00:00:00 2001 From: Chris McCord Date: Fri, 7 Jun 2024 14:58:48 -0400 Subject: [PATCH] Add FLAME support (#2629) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jonatan Kłosko Co-authored-by: José Valim --- Dockerfile | 2 +- rel/server/overlays/bin/server | 11 +++++++ rel/server/overlays/bin/start_flame.exs | 38 +++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100755 rel/server/overlays/bin/server create mode 100644 rel/server/overlays/bin/start_flame.exs diff --git a/Dockerfile b/Dockerfile index 4038253e0..1b6c1995f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,4 +95,4 @@ RUN chmod -R go=u $HOME HEALTHCHECK CMD wget --no-verbose --tries=1 --spider http://localhost:${LIVEBOOK_PORT-8080}/public/health || exit 1 -CMD [ "/app/bin/livebook", "start" ] +CMD [ "/app/bin/server" ] diff --git a/rel/server/overlays/bin/server b/rel/server/overlays/bin/server new file mode 100755 index 000000000..0c5d34ff2 --- /dev/null +++ b/rel/server/overlays/bin/server @@ -0,0 +1,11 @@ +#!/bin/sh +set -e + +cd -P -- "$(dirname -- "$0")" + +if [ -n "${FLAME_PARENT}" ]; then + epmd -daemon + elixir ./start_flame.exs +else + exec ./livebook start +fi diff --git a/rel/server/overlays/bin/start_flame.exs b/rel/server/overlays/bin/start_flame.exs new file mode 100644 index 000000000..d4135529b --- /dev/null +++ b/rel/server/overlays/bin/start_flame.exs @@ -0,0 +1,38 @@ +flame_parent = System.fetch_env!("FLAME_PARENT") |> Base.decode64!() |> :erlang.binary_to_term() + +%{ + pid: parent_pid, + flame_vsn: flame_parent_vsn, + backend: _backend, + backend_app: backend_app, + backend_vsn: backend_vsn, + node_base: node_base, + host_env: host_env +} = flame_parent + +flame_node_name = :"#{node_base}@#{System.fetch_env!(host_env)}" +flame_node_cookie = String.to_atom(System.fetch_env!("LIVEBOOK_COOKIE")) + +flame_dep = + if git_ref = System.get_env("FLAME_GIT_REF") do + {:flame, github: "phoenixframework/flame", ref: git_ref} + else + {:flame, flame_parent_vsn} + end + +flame_backend_deps = + case backend_app do + :flame -> [] + _ -> [{backend_app, backend_vsn}] + end + +{:ok, _} = :net_kernel.start(flame_node_name, %{name_domain: :longnames}) +Node.set_cookie(flame_node_cookie) + +Mix.install([flame_dep | flame_backend_deps], consolidate_protocols: false) + +IO.puts( + "[Livebook] starting #{inspect(flame_node_name)} in FLAME mode with parent: #{inspect(parent_pid)}, backend: #{inspect(backend_app)}" +) + +System.no_halt(true)