diff options
author | Roman Chvanikov <chvanikoff@pm.me> | 2020-07-21 14:39:25 +0300 |
---|---|---|
committer | Roman Chvanikov <chvanikoff@pm.me> | 2020-07-21 14:39:25 +0300 |
commit | d00fe728503742aa771cb8b2f6b08c7ed2b9d5bc (patch) | |
tree | 5db0e5b6ae1bd97e87e6368f4b1e492c8851c289 | |
parent | ec5dcb651ced6372f8eb3d3c16da10edb5b435f1 (diff) | |
download | pleroma-d00fe728503742aa771cb8b2f6b08c7ed2b9d5bc.tar.gz |
Fix tests
-rw-r--r-- | config/dev.exs | 6 | ||||
-rw-r--r-- | config/test.exs | 2 | ||||
-rw-r--r-- | lib/mix/tasks/pleroma/frontend.ex | 130 | ||||
-rw-r--r-- | lib/mix/tasks/pleroma/instance.ex | 5 | ||||
-rw-r--r-- | test/tasks/frontend_test.exs | 44 |
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 |