mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-09-04 12:04:20 +08:00
Use deployment group id instead of name for deploy via CLI (#3037)
This commit is contained in:
parent
a9c360ee9d
commit
8c6089fccb
5 changed files with 62 additions and 46 deletions
|
@ -264,10 +264,14 @@ defmodule Livebook.Teams do
|
|||
@doc """
|
||||
Deploys the given app deployment to given deployment group using a deploy key.
|
||||
"""
|
||||
@spec deploy_app_from_cli(Team.t(), Teams.AppDeployment.t(), String.t()) ::
|
||||
@spec deploy_app_from_cli(Team.t(), Teams.AppDeployment.t(), integer()) ::
|
||||
{:ok, String.t()} | {:error, map()} | {:transport_error, String.t()}
|
||||
def deploy_app_from_cli(%Team{} = team, %Teams.AppDeployment{} = app_deployment, name) do
|
||||
case Requests.deploy_app_from_cli(team, app_deployment, name) do
|
||||
def deploy_app_from_cli(
|
||||
%Team{} = team,
|
||||
%Teams.AppDeployment{} = app_deployment,
|
||||
deployment_group_id
|
||||
) do
|
||||
case Requests.deploy_app_from_cli(team, app_deployment, deployment_group_id) do
|
||||
{:ok, %{"url" => url}} -> {:ok, url}
|
||||
{:error, %{"errors" => errors}} -> {:error, errors}
|
||||
any -> any
|
||||
|
|
|
@ -239,8 +239,8 @@ defmodule Livebook.Teams.Requests do
|
|||
@doc """
|
||||
Send a request to Livebook Team API to deploy an app using a deploy key.
|
||||
"""
|
||||
@spec deploy_app_from_cli(Team.t(), Teams.AppDeployment.t(), String.t()) :: api_result()
|
||||
def deploy_app_from_cli(team, app_deployment, deployment_group_name) do
|
||||
@spec deploy_app_from_cli(Team.t(), Teams.AppDeployment.t(), integer()) :: api_result()
|
||||
def deploy_app_from_cli(team, app_deployment, deployment_group_id) do
|
||||
secret_key = Teams.derive_key(team.teams_key)
|
||||
|
||||
params = %{
|
||||
|
@ -248,7 +248,7 @@ defmodule Livebook.Teams.Requests do
|
|||
slug: app_deployment.slug,
|
||||
multi_session: app_deployment.multi_session,
|
||||
access_type: app_deployment.access_type,
|
||||
deployment_group_name: deployment_group_name,
|
||||
deployment_group_id: deployment_group_id,
|
||||
sha: app_deployment.sha
|
||||
}
|
||||
|
||||
|
|
|
@ -14,9 +14,9 @@ defmodule LivebookCLI.Deploy do
|
|||
|
||||
## Available options
|
||||
|
||||
--deploy-key Deploy key from your Livebook Teams organization
|
||||
--teams-key Teams key from your Teams workspace
|
||||
--deployment-group The deployment group name which you want to deploy to
|
||||
--deploy-key Deploy key from your Livebook Teams organization
|
||||
--teams-key Teams key from your Teams workspace
|
||||
--deployment-group-id The ID of the deployment group you want to deploy to
|
||||
|
||||
The --help option can be given to print this notice.
|
||||
|
||||
|
@ -24,18 +24,18 @@ defmodule LivebookCLI.Deploy do
|
|||
|
||||
Deploys a single notebook:
|
||||
|
||||
livebook deploy --deploy-key="lb_dk_..." --teams-key="lb_tk_..." --deployment-group="production" path/to/app1.livemd
|
||||
livebook deploy --deploy-key="lb_dk_..." --teams-key="lb_tk_..." --deployment-group-id=123 path/to/app1.livemd
|
||||
|
||||
Deploys multiple notebooks:
|
||||
|
||||
livebook deploy --deploy-key="lb_dk_..." --teams-key="lb_tk_..." --deployment-group="production" path/to/*.livemd\
|
||||
livebook deploy --deploy-key="lb_dk_..." --teams-key="lb_tk_..." --deployment-group-id=123 path/to/*.livemd\
|
||||
"""
|
||||
end
|
||||
|
||||
@switches [
|
||||
deploy_key: :string,
|
||||
teams_key: :string,
|
||||
deployment_group: :string
|
||||
deployment_group_id: :integer
|
||||
]
|
||||
|
||||
@impl true
|
||||
|
@ -56,7 +56,7 @@ defmodule LivebookCLI.Deploy do
|
|||
paths: paths,
|
||||
session_token: opts[:deploy_key],
|
||||
teams_key: opts[:teams_key],
|
||||
deployment_group: opts[:deployment_group]
|
||||
deployment_group_id: opts[:deployment_group_id]
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -139,10 +139,13 @@ defmodule LivebookCLI.Deploy do
|
|||
|
||||
with {:ok, content} <- File.read(path),
|
||||
{:ok, app_deployment} <- prepare_app_deployment(path, content, files_dir) do
|
||||
case Livebook.Teams.deploy_app_from_cli(team, app_deployment, config.deployment_group) do
|
||||
case Livebook.Teams.deploy_app_from_cli(
|
||||
team,
|
||||
app_deployment,
|
||||
config.deployment_group_id
|
||||
) do
|
||||
{:ok, url} ->
|
||||
log_info([:green, " * #{app_deployment.title} deployed successfully. (#{url})"])
|
||||
:ok
|
||||
|
||||
{:error, errors} ->
|
||||
log_error(" * #{app_deployment.title} failed to deploy.")
|
||||
|
@ -208,7 +211,8 @@ defmodule LivebookCLI.Deploy do
|
|||
defp normalize_key(key) when is_atom(key), do: to_string(key) |> normalize_key()
|
||||
defp normalize_key("session_token"), do: "Deploy Key"
|
||||
defp normalize_key("teams_key"), do: "Teams Key"
|
||||
defp normalize_key("deployment_group"), do: "Deployment Group"
|
||||
defp normalize_key("deployment_group_id"), do: "Deployment Group ID"
|
||||
|
||||
defp normalize_key("paths"), do: "File Paths"
|
||||
|
||||
defp format_errors(errors, prefix) do
|
||||
|
|
|
@ -43,7 +43,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
assert deploy(
|
||||
key,
|
||||
team.teams_key,
|
||||
deployment_group.name,
|
||||
deployment_group.id,
|
||||
app_path
|
||||
) == :ok
|
||||
end)
|
||||
|
@ -92,7 +92,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
assert deploy(
|
||||
key,
|
||||
team.teams_key,
|
||||
deployment_group.name,
|
||||
deployment_group.id,
|
||||
Path.join(tmp_dir, "*.livemd")
|
||||
) == :ok
|
||||
end)
|
||||
|
@ -127,7 +127,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
deploy(
|
||||
"invalid_key",
|
||||
team.teams_key,
|
||||
deployment_group.name,
|
||||
deployment_group.id,
|
||||
app_path
|
||||
)
|
||||
end
|
||||
|
@ -149,7 +149,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
deploy(
|
||||
key,
|
||||
"invalid-key",
|
||||
deployment_group.name,
|
||||
deployment_group.id,
|
||||
app_path
|
||||
)
|
||||
end
|
||||
|
@ -167,14 +167,16 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
# Test App
|
||||
""")
|
||||
|
||||
assert_raise LivebookCLI.Error, ~r/Deployment Group can't be blank/s, fn ->
|
||||
deploy(
|
||||
key,
|
||||
team.teams_key,
|
||||
"",
|
||||
app_path
|
||||
)
|
||||
end
|
||||
assert_raise OptionParser.ParseError,
|
||||
~r/--deployment-group-id : Expected type integer, got ""/s,
|
||||
fn ->
|
||||
deploy(
|
||||
key,
|
||||
team.teams_key,
|
||||
"",
|
||||
app_path
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
test "fails with invalid deployment group",
|
||||
|
@ -201,17 +203,17 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
|
||||
output =
|
||||
ExUnit.CaptureIO.capture_io(fn ->
|
||||
assert_raise LivebookCLI.Error, "Some app deployments failed.", fn ->
|
||||
assert_raise(LivebookCLI.Error, ~r/Some app deployments failed./s, fn ->
|
||||
deploy(
|
||||
key,
|
||||
team.teams_key,
|
||||
Utils.random_short_id(),
|
||||
999_999,
|
||||
app_path
|
||||
)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
assert output =~ ~r/Deployment Group does not exist/
|
||||
assert output =~ ~r/Deployment Group ID does not exist/
|
||||
|
||||
refute_receive {:app_deployment_started,
|
||||
%{
|
||||
|
@ -231,7 +233,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
deploy(
|
||||
key,
|
||||
team.teams_key,
|
||||
deployment_group.name,
|
||||
deployment_group.id,
|
||||
Path.join(tmp_dir, "app.livemd")
|
||||
)
|
||||
end
|
||||
|
@ -245,7 +247,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
deploy(
|
||||
key,
|
||||
team.teams_key,
|
||||
deployment_group.name,
|
||||
deployment_group.id,
|
||||
tmp_dir
|
||||
)
|
||||
end
|
||||
|
@ -293,7 +295,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
deploy(
|
||||
deploy_key,
|
||||
team.teams_key,
|
||||
deployment_group.name,
|
||||
deployment_group.id,
|
||||
[invalid_app_path, valid_app_path]
|
||||
)
|
||||
end)
|
||||
|
@ -322,7 +324,7 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
end
|
||||
end
|
||||
|
||||
defp deploy(deploy_key, teams_key, deployment_group_name, path) do
|
||||
defp deploy(deploy_key, teams_key, deployment_group_id, path) do
|
||||
paths =
|
||||
if is_list(path) do
|
||||
path
|
||||
|
@ -334,14 +336,20 @@ defmodule LivebookCLI.Integration.DeployTest do
|
|||
end
|
||||
end
|
||||
|
||||
deployment_group_id =
|
||||
cond do
|
||||
deployment_group_id == "" -> ""
|
||||
true -> Integer.to_string(deployment_group_id)
|
||||
end
|
||||
|
||||
LivebookCLI.Deploy.call(
|
||||
[
|
||||
"--deploy-key",
|
||||
deploy_key,
|
||||
"--teams-key",
|
||||
teams_key,
|
||||
"--deployment-group",
|
||||
deployment_group_name
|
||||
"--deployment-group-id",
|
||||
deployment_group_id
|
||||
] ++ paths
|
||||
)
|
||||
end
|
||||
|
|
|
@ -304,7 +304,7 @@ defmodule Livebook.TeamsTest do
|
|||
@tag :tmp_dir
|
||||
test "deploys app to Teams using a CLI session",
|
||||
%{team: team, node: node, tmp_dir: tmp_dir, org: org} do
|
||||
%{id: id, name: name} =
|
||||
%{id: id} =
|
||||
TeamsRPC.create_deployment_group(node,
|
||||
name: "angry-cat-#{Ecto.UUID.generate()}",
|
||||
url: "http://localhost:4123",
|
||||
|
@ -337,7 +337,7 @@ defmodule Livebook.TeamsTest do
|
|||
assert {:ok, team} = Teams.fetch_cli_session(config)
|
||||
|
||||
# deploy the app
|
||||
assert {:ok, _url} = Teams.deploy_app_from_cli(team, app_deployment, name)
|
||||
assert {:ok, _url} = Teams.deploy_app_from_cli(team, app_deployment, id)
|
||||
|
||||
sha = app_deployment.sha
|
||||
multi_session = app_settings.multi_session
|
||||
|
@ -354,19 +354,19 @@ defmodule Livebook.TeamsTest do
|
|||
deployment_group_id: ^id
|
||||
} = app_deployment2}
|
||||
|
||||
assert Teams.deploy_app_from_cli(team, app_deployment, "foo") ==
|
||||
{:error, %{"deployment_group" => ["does not exist"]}}
|
||||
assert Teams.deploy_app_from_cli(team, app_deployment, 999) ==
|
||||
{:error, %{"deployment_group_id" => ["does not exist"]}}
|
||||
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | slug: "@abc"}, name) ==
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | slug: "@abc"}, id) ==
|
||||
{:error, %{"slug" => ["should only contain alphanumeric characters and dashes"]}}
|
||||
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | multi_session: nil}, name) ==
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | multi_session: nil}, id) ==
|
||||
{:error, %{"multi_session" => ["can't be blank"]}}
|
||||
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | access_type: nil}, name) ==
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | access_type: nil}, id) ==
|
||||
{:error, %{"access_type" => ["can't be blank"]}}
|
||||
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | access_type: :abc}, name) ==
|
||||
assert Teams.deploy_app_from_cli(team, %{app_deployment | access_type: :abc}, id) ==
|
||||
{:error, %{"access_type" => ["is invalid"]}}
|
||||
|
||||
# force app deployment to be stopped
|
||||
|
|
Loading…
Add table
Reference in a new issue