From 4b51aa9b9084b21414e4ce062f16065f8f13a005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Ro=C5=BCnawski?= Date: Wed, 10 Jan 2024 12:11:31 +0100 Subject: [PATCH 1/3] Split local and docker --- lib/mix/tasks/test_with_docker.ex | 55 ++++++++++++++++++++++++++++ mix.exs | 60 ++----------------------------- 2 files changed, 58 insertions(+), 57 deletions(-) create mode 100644 lib/mix/tasks/test_with_docker.ex diff --git a/lib/mix/tasks/test_with_docker.ex b/lib/mix/tasks/test_with_docker.ex new file mode 100644 index 0000000..164254a --- /dev/null +++ b/lib/mix/tasks/test_with_docker.ex @@ -0,0 +1,55 @@ +defmodule Mix.Tasks.TestWithDocker do + @moduledoc """ + Test the SDK with Jellyfish running in Docker + """ + + use Mix.Task + + @impl Mix.Task + def run(args) do + if System.find_executable("docker") do + IO.puts("Running tests using Docker. To run tests without Docker call \"mix test.local\"") + + docker_compose_prefix = ["docker", "compose", "-f", "docker-compose-test.yaml"] + + stream_command(docker_compose_prefix ++ ["pull"]) + + stream_command( + docker_compose_prefix ++ ["up", "--remove-orphans", "test", "--exit-code-from", "test"] + ) + + stream_command(docker_compose_prefix ++ ["down"]) + else + IO.puts("Running tests inside docker container ...") + + Mix.Task.run("test", args) + end + end + + defp stream_command(cmd) do + port = + Port.open({:spawn, Enum.join(cmd, " ")}, [ + {:line, 1024}, + :use_stdio, + :stderr_to_stdout, + :exit_status + ]) + + receive_and_print(port) + end + + defp receive_and_print(port) do + receive do + {^port, {:data, {:eol, line}}} -> + IO.puts(line) + receive_and_print(port) + + {^port, {:data, data}} -> + IO.puts(data) + receive_and_print(port) + + {^port, {:exit_status, exit_status}} -> + IO.puts("Docker command exited with status code: #{exit_status}") + end + end +end diff --git a/mix.exs b/mix.exs index 4b04e73..4fddd75 100644 --- a/mix.exs +++ b/mix.exs @@ -34,7 +34,7 @@ defmodule Membrane.Template.Mixfile do "coveralls.post": :test, "coveralls.html": :test, "coveralls.json": :test, - "test.local": :test + "test.docker": :test ] ] end @@ -115,62 +115,8 @@ defmodule Membrane.Template.Mixfile do def aliases do [ - test: &test_in_docker/1, - "test.local": ["cmd MIX_ENV=test_local mix test --without_docker"] + "test.local": ["cmd MIX_ENV=test_local mix test"], + "test.docker": "test_with_docker" ] end - - defp test_in_docker(opts) do - cond do - List.last(opts) == "--without_docker" -> - IO.puts("Running tests locally (it requires setting up jellyfish without docker) ...") - - Mix.Task.run("test", ["--exclude", "file_component_sources"]) - - System.find_executable("docker") -> - IO.puts("Running tests using Docker. To run tests without Docker call \"mix test.local\"") - - docker_compose_prefix = ["docker", "compose", "-f", "docker-compose-test.yaml"] - - stream_command(docker_compose_prefix ++ ["pull"]) - - stream_command( - docker_compose_prefix ++ ["up", "--remove-orphans", "test", "--exit-code-from", "test"] - ) - - stream_command(docker_compose_prefix ++ ["down"]) - - true -> - IO.puts("Running tests inside docker container ...") - - Mix.Task.run("test") - end - end - - defp stream_command(cmd) do - port = - Port.open({:spawn, Enum.join(cmd, " ")}, [ - {:line, 1024}, - :use_stdio, - :stderr_to_stdout, - :exit_status - ]) - - receive_and_print(port) - end - - defp receive_and_print(port) do - receive do - {^port, {:data, {:eol, line}}} -> - IO.puts(line) - receive_and_print(port) - - {^port, {:data, data}} -> - IO.puts(data) - receive_and_print(port) - - {^port, {:exit_status, exit_status}} -> - IO.puts("Docker command exited with status code: #{exit_status}") - end - end end From e2bd920423f6fd2ff9d43ecb94c4d2aa40d90b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Ro=C5=BCnawski?= Date: Wed, 10 Jan 2024 12:22:03 +0100 Subject: [PATCH 2/3] Fix dialyzer --- mix.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 4fddd75..1d7e33a 100644 --- a/mix.exs +++ b/mix.exs @@ -74,7 +74,8 @@ defmodule Membrane.Template.Mixfile do defp dialyzer() do opts = [ - flags: [:error_handling] + flags: [:error_handling], + plt_add_apps: [:mix] ] if System.get_env("CI") == "true" do From 3a766b96ebffec34174319de5b37eeff2eb76f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Ro=C5=BCnawski?= Date: Wed, 10 Jan 2024 13:35:12 +0100 Subject: [PATCH 3/3] Fix test docker --- docker-compose-test.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docker-compose-test.yaml b/docker-compose-test.yaml index a49dfe1..85233b5 100644 --- a/docker-compose-test.yaml +++ b/docker-compose-test.yaml @@ -2,10 +2,12 @@ version: "3" services: test: - image: hexpm/elixir:1.14.4-erlang-25.3.2-alpine-3.16.5 - command: sh -c "cd app/ && apk add git && mix local.hex --force && mix local.rebar --force && mix deps.get && mix coveralls.json --warnings-as-errors" + image: membraneframeworklabs/docker_membrane:v2.2.0 + command: sh -c "cd app/ && mix deps.get && mix coveralls.json --warnings-as-errors" volumes: - .:/app + - /app/deps + - /app/_build ports: - "4000:4000" depends_on: