aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Chvanikov <chvanikoff@pm.me>2020-07-21 14:39:25 +0300
committerRoman Chvanikov <chvanikoff@pm.me>2020-07-21 14:39:25 +0300
commitd00fe728503742aa771cb8b2f6b08c7ed2b9d5bc (patch)
tree5db0e5b6ae1bd97e87e6368f4b1e492c8851c289
parentec5dcb651ced6372f8eb3d3c16da10edb5b435f1 (diff)
downloadpleroma-d00fe728503742aa771cb8b2f6b08c7ed2b9d5bc.tar.gz
Fix tests
-rw-r--r--config/dev.exs6
-rw-r--r--config/test.exs2
-rw-r--r--lib/mix/tasks/pleroma/frontend.ex130
-rw-r--r--lib/mix/tasks/pleroma/instance.ex5
-rw-r--r--test/tasks/frontend_test.exs44
5 files changed, 88 insertions, 99 deletions
diff --git a/config/dev.exs b/config/dev.exs
index d73b6a0d9..128e91dca 100644
--- a/config/dev.exs
+++ b/config/dev.exs
@@ -55,9 +55,9 @@ config :pleroma, Pleroma.Repo,
config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: true
config :pleroma, :frontends,
- primary: %{"name" => "pleroma", "ref" => "develop"},
- mastodon: %{"name" => "mastodon", "ref" => "develop"},
- admin: %{"name" => "admin", "ref" => "develop"},
+ primary: %{"name" => "pleroma", "ref" => "5d49edc8"},
+ mastodon: %{"name" => "mastodon", "ref" => "b1e42686"},
+ admin: %{"name" => "admin", "ref" => "d7eaf61a"},
static: true
if File.exists?("./config/dev.secret.exs") do
diff --git a/config/test.exs b/config/test.exs
index e6ab3213e..dadea40f9 100644
--- a/config/test.exs
+++ b/config/test.exs
@@ -118,6 +118,8 @@ config :pleroma, Pleroma.Uploaders.S3,
streaming_enabled: true,
public_endpoint: nil
+config :pleroma, yarn: "true"
+
config :pleroma, :frontends,
primary: %{"name" => "pleroma", "ref" => "develop"},
mastodon: %{"name" => "mastodon", "ref" => "develop"},
diff --git a/lib/mix/tasks/pleroma/frontend.ex b/lib/mix/tasks/pleroma/frontend.ex
index 1750b5ffc..493dd9064 100644
--- a/lib/mix/tasks/pleroma/frontend.ex
+++ b/lib/mix/tasks/pleroma/frontend.ex
@@ -48,53 +48,70 @@ defmodule Mix.Tasks.Pleroma.Frontend do
strict: [
ref: :string,
path: :string,
- develop: :boolean
+ develop: :boolean,
+ static_dir: :string
]
)
- {:ok, ref} =
+ instance_static_dir =
+ with nil <- options[:static_dir] do
+ Pleroma.Config.get!([:instance, :static_dir])
+ end
+
+ ref =
case options[:path] do
nil ->
- web_install(frontend, options)
+ ref0 =
+ cond do
+ options[:ref] -> options[:ref]
+ options[:develop] -> @ref_develop
+ true -> @ref_stable
+ end
+
+ web_frontend_ref(frontend, ref0)
path ->
- local_install(frontend, path)
+ local_path_frontend_ref(path)
end
- Logger.configure(level: log_level)
- ref
- end
+ dest =
+ Path.join([
+ instance_static_dir,
+ "frontends",
+ frontend,
+ ref
+ ])
+
+ fe_label = "#{frontend} (#{ref})"
- defp web_install(frontend, options) do
- Pleroma.Utils.command_required!("yarn")
+ from =
+ with nil <- options[:path] do
+ Pleroma.Utils.command_required!("yarn")
- ref0 =
- cond do
- options[:ref] -> options[:ref]
- options[:develop] -> @ref_develop
- true -> @ref_stable
- end
+ url = archive_url(frontend, ref)
- %{"ref" => ref, "url" => url} = get_frontend_metadata(frontend, ref0)
- dest = dest_path(frontend, ref)
- tmp_dir = Path.join(dest, "tmp/src")
- fe_label = "#{frontend} (#{ref})"
+ tmp_dir = Path.join(dest, "tmp/src")
- shell_info("Downloading #{fe_label} to #{tmp_dir}")
- :ok = download_frontend(url, tmp_dir)
+ shell_info("Downloading #{fe_label} to #{tmp_dir}")
+ :ok = download_frontend(url, tmp_dir)
- shell_info("Building #{fe_label} (this will take some time)")
- :ok = build_frontend(frontend, tmp_dir)
+ shell_info("Building #{fe_label} (this will take some time)")
+ :ok = build_frontend(frontend, tmp_dir)
+ tmp_dir
+ end
shell_info("Installing #{fe_label} to #{dest}")
- :ok = install_frontend(frontend, tmp_dir, dest)
+
+ :ok = install_frontend(frontend, from, dest)
shell_info("Frontend #{fe_label} installed to #{dest}")
- {:ok, ref}
+ Logger.configure(level: log_level)
+ ref
end
defp download_frontend(url, dest) do
- with {:ok, %{status: 200, body: zip_body}} <- Tesla.get(http_client(), url),
+ with {:ok, %{status: 200, body: zip_body}} <-
+ Pleroma.HTTP.get(url, [], timeout: 120_000, recv_timeout: 120_000),
{:ok, unzipped} <- :zip.unzip(zip_body, [:memory]) do
File.rm_rf!(dest)
File.mkdir_p!(dest)
@@ -123,42 +140,45 @@ defmodule Mix.Tasks.Pleroma.Frontend do
end
defp build_frontend("admin", path) do
- {_out, 0} = System.cmd("yarn", [], cd: path)
- {_out, 0} = System.cmd("yarn", ["build:prod"], cd: path)
+ yarn = Pleroma.Config.get(:yarn, "yarn")
+ {_out, 0} = System.cmd(yarn, [], cd: path)
+ {_out, 0} = System.cmd(yarn, ["build:prod"], cd: path)
:ok
end
defp build_frontend(_frontend, path) do
- {_out, 0} = System.cmd("yarn", [], cd: path)
- {_out, 0} = System.cmd("yarn", ["build"], cd: path)
+ yarn = Pleroma.Config.get(:yarn, "yarn")
+ {_out, 0} = System.cmd(yarn, [], cd: path)
+ {_out, 0} = System.cmd(yarn, ["build"], cd: path)
:ok
end
- defp get_frontend_metadata(frontend, @ref_develop) do
+ defp web_frontend_ref(frontend, @ref_develop) do
url = project_url(frontend) <> "/repository/branches"
- %{status: 200, body: json} = Tesla.get!(http_client(), url)
+ {:ok, %{status: 200, body: body}} =
+ Pleroma.HTTP.get(url, [], timeout: 120_000, recv_timeout: 120_000)
+
+ json = Jason.decode!(body)
%{"commit" => %{"short_id" => last_commit_ref}} = Enum.find(json, & &1["default"])
- %{"ref" => last_commit_ref, "url" => archive_url(frontend, last_commit_ref)}
+ last_commit_ref
end
# fallback to develop version if compatible stable ref is not defined in
# mix.exs for the given frontend
- defp get_frontend_metadata(frontend, @ref_stable) do
+ defp web_frontend_ref(frontend, @ref_stable) do
case Map.get(Pleroma.Application.frontends(), frontend) do
nil ->
- get_frontend_metadata(frontend, @ref_develop)
+ web_frontend_ref(frontend, @ref_develop)
ref ->
- %{"ref" => ref, "url" => archive_url(frontend, ref)}
+ ref
end
end
- defp get_frontend_metadata(frontend, ref) do
- %{"ref" => ref, "url" => archive_url(frontend, ref)}
- end
+ defp web_frontend_ref(_frontend, ref), do: ref
defp project_url(frontend),
do:
@@ -169,27 +189,6 @@ defmodule Mix.Tasks.Pleroma.Frontend do
defp archive_url(frontend, ref),
do: "https://#{@pleroma_gitlab_host}/#{@frontends[frontend]["project"]}/-/archive/#{ref}.zip"
- defp local_install(frontend, path) do
- ref = local_path_frontend_ref(path)
-
- dest = dest_path(frontend, ref)
-
- shell_info("Installing frontend #{frontend} (#{ref}) from local path")
-
- :ok = install_frontend(frontend, path, dest)
- shell_info("Frontend #{frontend} (#{ref}) installed to #{dest}")
- {:ok, ref}
- end
-
- defp dest_path(frontend, ref) do
- Path.join([
- Pleroma.Config.get!([:instance, :static_dir]),
- "frontends",
- frontend,
- ref
- ])
- end
-
defp local_path_frontend_ref(path) do
path
|> Path.join("package.json")
@@ -240,15 +239,4 @@ defmodule Mix.Tasks.Pleroma.Frontend do
File.cp_r!(Path.join([source, from]), dest)
post_install(frontend, dest)
end
-
- defp http_client do
- middleware = [
- Tesla.Middleware.FollowRedirects,
- Tesla.Middleware.JSON
- ]
-
- adapter = {Tesla.Adapter.Gun, [timeout: 120_000]}
-
- Tesla.client(middleware, adapter)
- end
end
diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex
index 6319134b4..ba4ac8b6d 100644
--- a/lib/mix/tasks/pleroma/instance.ex
+++ b/lib/mix/tasks/pleroma/instance.ex
@@ -162,13 +162,10 @@ defmodule Mix.Tasks.Pleroma.Instance do
)
|> Path.expand()
- Config.put([:instance, :static_dir], static_dir) |> IO.inspect(label: "put #{static_dir}")
- Config.get!([:instance, :static_dir]) |> IO.inspect(label: :get_instance_static_dir)
-
install_fe =
case Mix.env() do
:test -> fn _ -> "42" end
- _ -> &Mix.Tasks.Pleroma.Frontend.run(["install", &1])
+ _ -> &Mix.Tasks.Pleroma.Frontend.run(["install", &1, "--static-dir", static_dir])
end
fe_primary =
diff --git a/test/tasks/frontend_test.exs b/test/tasks/frontend_test.exs
index 50aea2e75..ba6bf7c40 100644
--- a/test/tasks/frontend_test.exs
+++ b/test/tasks/frontend_test.exs
@@ -72,35 +72,37 @@ defmodule Mix.Tasks.Pleroma.FrontendTest do
end
describe "Installation from web source" do
- setup do
- Pleroma.Utils.command_required!("yarn")
- end
-
test "develop" do
- Mix.Tasks.Pleroma.Frontend.run([
- "install",
- "pleroma",
- "--develop"
- ])
-
- assert File.exists?(Path.join([@dir, "frontends/pleroma/d5457c32/index.html"]))
+ if Pleroma.Utils.command_available?("yarn") do
+ Mix.Tasks.Pleroma.Frontend.run([
+ "install",
+ "pleroma",
+ "--develop"
+ ])
+
+ assert File.exists?(Path.join([@dir, "frontends/pleroma/d5457c32/index.html"]))
+ end
end
test "stable" do
- Mix.Tasks.Pleroma.Frontend.run(["install", "pleroma"])
+ if Pleroma.Utils.command_available?("yarn") do
+ Mix.Tasks.Pleroma.Frontend.run(["install", "pleroma"])
- assert File.exists?(Path.join([@dir, "frontends/pleroma/5d49edc8/index.html"]))
+ assert File.exists?(Path.join([@dir, "frontends/pleroma/5d49edc8/index.html"]))
+ end
end
test "ref" do
- Mix.Tasks.Pleroma.Frontend.run([
- "install",
- "pleroma",
- "--ref",
- "1.2.3"
- ])
-
- assert File.exists?(Path.join([@dir, "frontends/pleroma/1.2.3/index.html"]))
+ if Pleroma.Utils.command_available?("yarn") do
+ Mix.Tasks.Pleroma.Frontend.run([
+ "install",
+ "pleroma",
+ "--ref",
+ "1.2.3"
+ ])
+
+ assert File.exists?(Path.join([@dir, "frontends/pleroma/1.2.3/index.html"]))
+ end
end
end
end