mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-17 08:57:28 +08:00
Improvement docker deployment flow (#2508)
This commit is contained in:
parent
9ec411fb3a
commit
b58b732db2
8 changed files with 75 additions and 34 deletions
|
@ -196,6 +196,11 @@ defmodule LivebookWeb.SessionLive do
|
|||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_params(params, _url, socket)
|
||||
when socket.assigns.live_action in [:app_settings, :file_settings] do
|
||||
{:noreply, assign(socket, route_params: Map.take(params, ["context"]))}
|
||||
end
|
||||
|
||||
def handle_params(_params, _url, socket) do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
@ -579,14 +584,16 @@ defmodule LivebookWeb.SessionLive do
|
|||
|
||||
if Livebook.Notebook.AppSettings.valid?(app_settings) do
|
||||
{:noreply,
|
||||
LivebookWeb.SessionLive.AppSettingsComponent.deploy_app(
|
||||
LivebookWeb.SessionLive.AppSettingsComponent.preview_app(
|
||||
socket,
|
||||
app_settings,
|
||||
data.deployed_app_slug
|
||||
)}
|
||||
else
|
||||
{:noreply,
|
||||
push_patch(socket, to: ~p"/sessions/#{socket.assigns.session.id}/settings/launch-app")}
|
||||
push_patch(socket,
|
||||
to: ~p"/sessions/#{socket.assigns.session.id}/settings/app?context=preview"
|
||||
)}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -85,7 +85,10 @@ defmodule LivebookWeb.SessionLive.AppDockerComponent do
|
|||
<p class="text-gray-700">
|
||||
To deploy this app, make sure to save the notebook first.
|
||||
</p>
|
||||
<.link class="text-blue-600 font-medium" patch={~p"/sessions/#{@session.id}/settings/file"}>
|
||||
<.link
|
||||
class="text-blue-600 font-medium"
|
||||
patch={~p"/sessions/#{@session.id}/settings/file?context=app-docker"}
|
||||
>
|
||||
<span>Save</span>
|
||||
<.remix_icon icon="arrow-right-line" />
|
||||
</.link>
|
||||
|
@ -99,7 +102,10 @@ defmodule LivebookWeb.SessionLive.AppDockerComponent do
|
|||
<p class="text-gray-700">
|
||||
To deploy this app, make sure to specify valid settings.
|
||||
</p>
|
||||
<.link class="text-blue-600 font-medium" patch={~p"/sessions/#{@session.id}/settings/app"}>
|
||||
<.link
|
||||
class="text-blue-600 font-medium"
|
||||
patch={~p"/sessions/#{@session.id}/settings/app?context=app-docker"}
|
||||
>
|
||||
<span>Configure</span>
|
||||
<.remix_icon icon="arrow-right-line" />
|
||||
</.link>
|
||||
|
|
|
@ -63,11 +63,26 @@ defmodule LivebookWeb.SessionLive.AppInfoComponent do
|
|||
|
||||
<div class="mt-2 flex flex-col gap-2">
|
||||
<%!-- TODO: Livebook Teams flow --%>
|
||||
<.button color="blue" patch={~p"/sessions/#{@session.id}/app-docker"}>
|
||||
<.button
|
||||
color="blue"
|
||||
patch={
|
||||
if Livebook.Notebook.AppSettings.valid?(@settings),
|
||||
do: ~p"/sessions/#{@session.id}/app-docker",
|
||||
else: ~p"/sessions/#{@session.id}/settings/app?context=app-docker"
|
||||
}
|
||||
>
|
||||
<.remix_icon icon="rocket-line" /> Deploy with Livebook Teams
|
||||
</.button>
|
||||
|
||||
<.button color="gray" outlined patch={~p"/sessions/#{@session.id}/app-docker"}>
|
||||
<.button
|
||||
color="gray"
|
||||
outlined
|
||||
patch={
|
||||
if Livebook.Notebook.AppSettings.valid?(@settings),
|
||||
do: ~p"/sessions/#{@session.id}/app-docker",
|
||||
else: ~p"/sessions/#{@session.id}/settings/app?context=app-docker"
|
||||
}
|
||||
>
|
||||
<.remix_icon icon="ship-line" /> Manual Docker deployment
|
||||
</.button>
|
||||
</div>
|
||||
|
|
|
@ -25,11 +25,13 @@ defmodule LivebookWeb.SessionLive.AppSettingsComponent do
|
|||
<h3 class="text-2xl font-semibold text-gray-800">
|
||||
App settings
|
||||
</h3>
|
||||
<%= if @live_action == :app_settings_and_launch do %>
|
||||
<.message_box kind={:info}>
|
||||
You must configure your app before launch it.
|
||||
</.message_box>
|
||||
<% end %>
|
||||
<.message_box :if={@context == "preview"} kind={:info}>
|
||||
You must configure your app before previewing it.
|
||||
</.message_box>
|
||||
<.message_box :if={@context && @context != "preview"} kind={:info}>
|
||||
You must configure your app before deploying it.
|
||||
</.message_box>
|
||||
|
||||
<.form
|
||||
:let={f}
|
||||
for={@changeset}
|
||||
|
@ -131,12 +133,10 @@ defmodule LivebookWeb.SessionLive.AppSettingsComponent do
|
|||
<% end %>
|
||||
</div>
|
||||
<div class="mt-8 flex space-x-2">
|
||||
<%= if @live_action == :app_settings do %>
|
||||
<.button type="submit" disabled={not @changeset.valid?}>Save</.button>
|
||||
<% end %>
|
||||
<%= if @live_action == :app_settings_and_launch do %>
|
||||
<.button disabled={not @changeset.valid?}>Launch</.button>
|
||||
<% end %>
|
||||
<.button disabled={not @changeset.valid?}>
|
||||
<%= if @context == "preview", do: "Launch", else: "Save" %>
|
||||
</.button>
|
||||
|
||||
<.button color="gray" outlined type="reset" name="reset">
|
||||
Reset
|
||||
</.button>
|
||||
|
@ -170,14 +170,19 @@ defmodule LivebookWeb.SessionLive.AppSettingsComponent do
|
|||
Livebook.Session.set_app_settings(socket.assigns.session.pid, settings)
|
||||
end
|
||||
|
||||
if socket.assigns.live_action == :app_settings_and_launch do
|
||||
{:noreply, deploy_app(socket, app_settings, deployed_app_slug)}
|
||||
else
|
||||
{:noreply, push_patch(socket, to: ~p"/sessions/#{socket.assigns.session.id}")}
|
||||
case socket.assigns.context do
|
||||
"preview" ->
|
||||
{:noreply, preview_app(socket, app_settings, deployed_app_slug)}
|
||||
|
||||
redirect when is_binary(redirect) ->
|
||||
{:noreply, push_patch(socket, to: ~p"/sessions/#{socket.assigns.session.id}/#{redirect}")}
|
||||
|
||||
nil ->
|
||||
{:noreply, push_patch(socket, to: ~p"/sessions/#{socket.assigns.session.id}")}
|
||||
end
|
||||
end
|
||||
|
||||
def deploy_app(socket, app_settings, deployed_app_slug) do
|
||||
def preview_app(socket, app_settings, deployed_app_slug) do
|
||||
on_confirm = fn socket ->
|
||||
Livebook.Session.deploy_app(socket.assigns.session.pid)
|
||||
push_patch(socket, to: ~p"/sessions/#{socket.assigns.session.id}")
|
||||
|
|
|
@ -182,11 +182,19 @@ defmodule LivebookWeb.SessionLive.PersistenceComponent do
|
|||
Session.save_sync(assigns.session.pid)
|
||||
|
||||
# We can't do push_patch from update/2, so we ask the LV to do so
|
||||
send(self(), {:push_patch, ~p"/sessions/#{assigns.session.id}"})
|
||||
send(self(), {:push_patch, return_to(assigns)})
|
||||
|
||||
socket
|
||||
end
|
||||
|
||||
defp return_to(assigns) do
|
||||
if context = assigns.context do
|
||||
~p"/sessions/#{assigns.session.id}/#{context}"
|
||||
else
|
||||
~p"/sessions/#{assigns.session.id}"
|
||||
end
|
||||
end
|
||||
|
||||
defp parse_optional_integer(string) do
|
||||
case Integer.parse(string) do
|
||||
{number, _} -> number
|
||||
|
|
|
@ -72,13 +72,14 @@ defmodule LivebookWeb.SessionLive.Render do
|
|||
session={@session}
|
||||
file={@data_view.file}
|
||||
hub={@data_view.hub}
|
||||
context={@route_params["context"]}
|
||||
persist_outputs={@data_view.persist_outputs}
|
||||
autosave_interval_s={@data_view.autosave_interval_s}
|
||||
/>
|
||||
</.modal>
|
||||
|
||||
<.modal
|
||||
:if={@live_action in [:app_settings, :app_settings_and_launch]}
|
||||
:if={@live_action == :app_settings}
|
||||
id="app-settings-modal"
|
||||
show
|
||||
width={:medium}
|
||||
|
@ -89,7 +90,7 @@ defmodule LivebookWeb.SessionLive.Render do
|
|||
id="app-settings"
|
||||
session={@session}
|
||||
settings={@data_view.app_settings}
|
||||
live_action={@live_action}
|
||||
context={@route_params["context"]}
|
||||
deployed_app_slug={@data_view.deployed_app_slug}
|
||||
/>
|
||||
</.modal>
|
||||
|
|
|
@ -108,7 +108,6 @@ defmodule LivebookWeb.Router do
|
|||
live "/sessions/:id/settings/runtime", SessionLive, :runtime_settings
|
||||
live "/sessions/:id/settings/file", SessionLive, :file_settings
|
||||
live "/sessions/:id/settings/app", SessionLive, :app_settings
|
||||
live "/sessions/:id/settings/launch-app", SessionLive, :app_settings_and_launch
|
||||
live "/sessions/:id/app-docker", SessionLive, :app_docker
|
||||
live "/sessions/:id/add-file/:tab", SessionLive, :add_file_entry
|
||||
live "/sessions/:id/rename-file/:name", SessionLive, :rename_file_entry
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue