mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-09-06 21:14:26 +08:00
livebook server: Add --open flag (#417)
* livebook server: Add --open flag * Update lib/livebook_cli/server.ex Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com> * Add LivebookWeb.Endpoint.access_url/0 Co-authored-by: Jonatan Kłosko <jonatanklosko@gmail.com>
This commit is contained in:
parent
a756938d24
commit
6515629156
3 changed files with 33 additions and 15 deletions
|
@ -117,18 +117,7 @@ defmodule Livebook.Application do
|
||||||
|
|
||||||
defp display_startup_info() do
|
defp display_startup_info() do
|
||||||
if Phoenix.Endpoint.server?(:livebook, LivebookWeb.Endpoint) do
|
if Phoenix.Endpoint.server?(:livebook, LivebookWeb.Endpoint) do
|
||||||
IO.puts("[Livebook] Application running at #{access_url()}")
|
IO.puts("[Livebook] Application running at #{LivebookWeb.Endpoint.access_url()}")
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
defp access_url() do
|
|
||||||
root_url = LivebookWeb.Endpoint.url()
|
|
||||||
|
|
||||||
if Livebook.Config.auth_mode() == :token do
|
|
||||||
token = Application.fetch_env!(:livebook, :token)
|
|
||||||
root_url <> "/?token=" <> token
|
|
||||||
else
|
|
||||||
root_url
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,6 +32,7 @@ defmodule LivebookCLI.Server do
|
||||||
--name Set a name for the app distributed node
|
--name Set a name for the app distributed node
|
||||||
--no-token Disable token authentication, enabled by default
|
--no-token Disable token authentication, enabled by default
|
||||||
If LIVEBOOK_PASSWORD is set, it takes precedence over token auth
|
If LIVEBOOK_PASSWORD is set, it takes precedence over token auth
|
||||||
|
--open Open browser window pointing to the application
|
||||||
-p, --port The port to start the web application on, defaults to 8080
|
-p, --port The port to start the web application on, defaults to 8080
|
||||||
--root-path The root path to use for file selection
|
--root-path The root path to use for file selection
|
||||||
--sname Set a short name for the app distributed node
|
--sname Set a short name for the app distributed node
|
||||||
|
@ -47,11 +48,16 @@ defmodule LivebookCLI.Server do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def call(args) do
|
def call(args) do
|
||||||
config_entries = args_to_config(args)
|
opts = args_to_options(args)
|
||||||
|
config_entries = opts_to_config(opts, [])
|
||||||
put_config_entries(config_entries)
|
put_config_entries(config_entries)
|
||||||
|
|
||||||
case start_server() do
|
case start_server() do
|
||||||
:ok ->
|
:ok ->
|
||||||
|
if opts[:open] do
|
||||||
|
browser_open(LivebookWeb.Endpoint.access_url())
|
||||||
|
end
|
||||||
|
|
||||||
Process.sleep(:infinity)
|
Process.sleep(:infinity)
|
||||||
|
|
||||||
:error ->
|
:error ->
|
||||||
|
@ -85,6 +91,7 @@ defmodule LivebookCLI.Server do
|
||||||
default_runtime: :string,
|
default_runtime: :string,
|
||||||
ip: :string,
|
ip: :string,
|
||||||
name: :string,
|
name: :string,
|
||||||
|
open: :boolean,
|
||||||
port: :integer,
|
port: :integer,
|
||||||
root_path: :string,
|
root_path: :string,
|
||||||
sname: :string,
|
sname: :string,
|
||||||
|
@ -95,10 +102,10 @@ defmodule LivebookCLI.Server do
|
||||||
p: :port
|
p: :port
|
||||||
]
|
]
|
||||||
|
|
||||||
defp args_to_config(args) do
|
defp args_to_options(args) do
|
||||||
{opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases)
|
{opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases)
|
||||||
validate_options!(opts)
|
validate_options!(opts)
|
||||||
opts_to_config(opts, [])
|
opts
|
||||||
end
|
end
|
||||||
|
|
||||||
defp validate_options!(opts) do
|
defp validate_options!(opts) do
|
||||||
|
@ -152,4 +159,15 @@ defmodule LivebookCLI.Server do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp opts_to_config([_opt | opts], config), do: opts_to_config(opts, config)
|
defp opts_to_config([_opt | opts], config), do: opts_to_config(opts, config)
|
||||||
|
|
||||||
|
defp browser_open(url) do
|
||||||
|
{cmd, args} =
|
||||||
|
case :os.type() do
|
||||||
|
{:win32, _} -> {"cmd", ["/c", "start", url]}
|
||||||
|
{:unix, :darwin} -> {"open", [url]}
|
||||||
|
{:unix, _} -> {"xdg-open", [url]}
|
||||||
|
end
|
||||||
|
|
||||||
|
System.cmd(cmd, args)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -72,4 +72,15 @@ defmodule LivebookWeb.Endpoint do
|
||||||
plug Plug.Head
|
plug Plug.Head
|
||||||
plug Plug.Session, @session_options
|
plug Plug.Session, @session_options
|
||||||
plug LivebookWeb.Router
|
plug LivebookWeb.Router
|
||||||
|
|
||||||
|
def access_url() do
|
||||||
|
root_url = url()
|
||||||
|
|
||||||
|
if Livebook.Config.auth_mode() == :token do
|
||||||
|
token = Application.fetch_env!(:livebook, :token)
|
||||||
|
root_url <> "/?token=" <> token
|
||||||
|
else
|
||||||
|
root_url
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue