diff --git a/lib/ex_loader.ex b/lib/ex_loader.ex index 87aa62a..2a645f2 100644 --- a/lib/ex_loader.ex +++ b/lib/ex_loader.ex @@ -51,10 +51,8 @@ defmodule ExLoader do def load_apps(tarball, apps), do: load_apps(tarball, apps, node()) def load_apps(tarball, apps, remote_node) do - with {:ok, dst} <- ExLoader.File.copy(remote_node, tarball), - :ok <- ExLoader.File.uncompress(remote_node, dst) do - ExLoader.Release.load(remote_node, Path.dirname(dst), apps) - else + case ExLoader.File.uncompress(remote_node, tarball) do + {:ok, dst} -> ExLoader.Release.load(remote_node, Path.dirname(dst), apps) err -> err end end diff --git a/lib/file.ex b/lib/file.ex index ae95d63..af91ac5 100644 --- a/lib/file.ex +++ b/lib/file.ex @@ -31,27 +31,43 @@ defmodule ExLoader.File do end def uncompress(remote_node, tarball) do - parent = Path.dirname(tarball) + {:ok, dst} = mkdir_p(remote_node, tarball) - {_, status} = - :rpc.call(remote_node, System, :cmd, [ - "tar", - ["zxvf", tarball], - [cd: parent, stderr_to_stdout: true] - ]) + # uncompress in local with erlang stdlib + file = + case read(tarball) do + {:ok, file} -> file + err -> throw(err) + end + + case :erl_tar.extract({:binary, file}, [:memory, :compressed]) do + {:ok, files} -> + Enum.each(files, fn {filename, raw} -> + file_path = Path.join([Path.dirname(dst), filename]) - case status do - 0 -> - :ok + with :ok <- :rpc.call(remote_node, :filelib, :ensure_dir, [to_charlist(file_path)]), + {:ok, _} <- write(remote_node, file_path, raw) do + :ok + else + err -> throw(err) + end + end) - _ -> + {:ok, dst} + + {:error, _} -> {:error, %{msg: "failed to uncompress the release tarball: #{tarball}", reason: :badfile}} end + catch + err -> err end defp mkdir_p(remote_node, src) do dst = "/tmp/#{@prefix}.#{Nanoid.generate()}/#{Path.basename(src)}" - result = :rpc.call(remote_node, File, :mkdir_p, [Path.dirname(dst)]) + + # erlang filelib:ensure_dir, must end with "/" + target_dir_path = to_charlist("#{Path.dirname(dst)}/") + result = :rpc.call(remote_node, :filelib, :ensure_dir, [target_dir_path]) case result do :ok -> @@ -69,7 +85,7 @@ defmodule ExLoader.File do end defp write(remote_node, dst, bin) do - result = :rpc.call(remote_node, File, :write, [dst, bin]) + result = :rpc.call(remote_node, :file, :write_file, [to_charlist(dst), bin]) case result do :ok -> diff --git a/lib/release.ex b/lib/release.ex index a1f3363..8113385 100644 --- a/lib/release.ex +++ b/lib/release.ex @@ -17,7 +17,7 @@ defmodule ExLoader.Release do defp get_rel_file(remote_node, base) do rel_file = remote_node - |> :rpc.call(Path, :wildcard, ["#{base}/releases/*.rel"]) + |> :rpc.call(:filelib, :wildcard, [to_charlist("#{base}/releases/**/*.rel")]) |> List.first() case rel_file do @@ -30,7 +30,7 @@ defmodule ExLoader.Release do {:release, {_, ver}, _, apps} = read_config(remote_node, rel_file) started_apps = - Enum.map(:rpc.call(remote_node, Application, :started_applications, []), fn {app, _, _} -> + Enum.map(:rpc.call(remote_node, :application, :loaded_applications, []), fn {app, _, _} -> app end) @@ -39,7 +39,7 @@ defmodule ExLoader.Release do defp add_paths(remote_node, base, apps) do paths = - Enum.map(get_paths(base, apps), fn p -> + Enum.map(get_paths(base, apps, remote_node), fn p -> :rpc.call(remote_node, :code, :add_path, [to_charlist(p)]) p end) @@ -54,7 +54,7 @@ defmodule ExLoader.Release do |> read_config(sys_config) |> Enum.each(fn {app, data} -> Enum.each(data, fn {k, v} -> - :rpc.call(remote_node, Application, :put_env, [app, k, v, [persistent: true]]) + :rpc.call(remote_node, :application, :set_env, [app, k, v, [persistent: true]]) end) end) @@ -63,25 +63,27 @@ defmodule ExLoader.Release do defp load_apps(remote_node, apps) do Enum.each(apps, fn app -> - :rpc.call(remote_node, Application, :ensure_all_started, [app]) + :rpc.call(remote_node, :application, :ensure_all_started, [app]) end) end - defp get_paths(base, apps) do + defp get_paths(base, apps, remote_node) do apps |> Enum.map(fn app -> parent = Path.join(base, "lib/#{elem(app, 0)}-#{elem(app, 1)}") - parent - |> File.ls!() - |> Enum.map(&Path.join(parent, &1)) - |> Enum.filter(fn p -> File.dir?(p) and Path.basename(p) != "priv" end) + {:ok, filenames} = :rpc.call(remote_node, :file, :list_dir, [to_charlist(parent)]) + + Enum.map(filenames, &Path.join(parent, &1)) + |> Enum.filter(fn p -> + :rpc.call(remote_node, :filelib, :is_dir, [to_charlist(p)]) and Path.basename(p) != "priv" + end) end) |> List.flatten() end defp read_config(remote_node, file) do - content = :rpc.call(remote_node, File, :read!, [file]) + {:ok, content} = :rpc.call(remote_node, :file, :read_file, [file]) {:ok, tokens, _} = :erl_scan.string(to_charlist(content)) {:ok, [form]} = :erl_parse.parse_exprs(tokens) {:value, v, _} = :erl_eval.expr(form, []) diff --git a/mix.lock b/mix.lock index 8e385f4..964ab6e 100644 --- a/mix.lock +++ b/mix.lock @@ -1,22 +1,22 @@ %{ - "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"}, - "certifi": {:hex, :certifi, "2.0.0", "a0c0e475107135f76b8c1d5bc7efb33cd3815cb3cf3dea7aefdd174dabead064", [:rebar3], [], "hexpm"}, - "cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm"}, - "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], [], "hexpm"}, - "credo": {:hex, :credo, "0.8.10", "261862bb7363247762e1063713bb85df2bbd84af8d8610d1272cd9c1943bba63", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm"}, - "earmark": {:hex, :earmark, "1.2.4", "99b637c62a4d65a20a9fb674b8cffb8baa771c04605a80c911c4418c69b75439", [:mix], [], "hexpm"}, - "ex_doc": {:hex, :ex_doc, "0.18.2", "993e0a95e9fbb790ac54ea58e700b45b299bd48bc44b4ae0404f28161f37a83e", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm"}, - "fake_server": {:hex, :fake_server, "1.4.0", "d29af7f02b49c60b5cd96f1c66560579c055036dc33d8e6ed8ed59f30c1ecda4", [:mix], [{:cowboy, "~> 1.1", [hex: :cowboy, repo: "hexpm", optional: false]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"}, - "hackney": {:hex, :hackney, "1.11.0", "4951ee019df102492dabba66a09e305f61919a8a183a7860236c0fde586134b6", [:rebar3], [{:certifi, "2.0.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, - "httpoison": {:hex, :httpoison, "1.0.0", "1f02f827148d945d40b24f0b0a89afe40bfe037171a6cf70f2486976d86921cd", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, - "idna": {:hex, :idna, "5.1.0", "d72b4effeb324ad5da3cab1767cb16b17939004e789d8c0ad5b70f3cea20c89a", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, - "jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"}, - "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, - "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"}, - "nanoid": {:hex, :nanoid, "1.0.1", "4f9bcecfbc0046795e1084e85b3d25da3721b36b949a672736492c5dfe901062", [:mix], [], "hexpm"}, - "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}, - "pre_commit_hook": {:hex, :pre_commit_hook, "1.2.0", "cdd3448dfe05df5ceac3427c9784af2cb2bbff05876e0e3a6e002c5163eb5f7a", [:mix], [], "hexpm"}, - "ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"}, + "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, + "certifi": {:hex, :certifi, "2.0.0", "a0c0e475107135f76b8c1d5bc7efb33cd3815cb3cf3dea7aefdd174dabead064", [:rebar3], [], "hexpm", "fdc6066ceeccb3aa14049ab6edf0b9af3b64ae1b0db2a92d5c52146f373bbb1c"}, + "cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "f4763bbe08233eceed6f24bc4fcc8d71c17cfeafa6439157c57349aa1bb4f17c"}, + "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], [], "hexpm", "db622da03aa039e6366ab953e31186cc8190d32905e33788a1acb22744e6abd2"}, + "credo": {:hex, :credo, "0.8.10", "261862bb7363247762e1063713bb85df2bbd84af8d8610d1272cd9c1943bba63", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm", "f3fe29f8de6be431c7736a933a3897fe9aa45533b1d1358b3691ac8ec4371e8f"}, + "earmark": {:hex, :earmark, "1.2.4", "99b637c62a4d65a20a9fb674b8cffb8baa771c04605a80c911c4418c69b75439", [:mix], [], "hexpm", "1b34655872366414f69dd987cb121c049f76984b6ac69f52fff6d8fd64d29cfd"}, + "ex_doc": {:hex, :ex_doc, "0.18.2", "993e0a95e9fbb790ac54ea58e700b45b299bd48bc44b4ae0404f28161f37a83e", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm", "eacdfd22d5c7e5f3fda086214c69a8b6ca4298ad90d99f399d591f14eead6a61"}, + "fake_server": {:hex, :fake_server, "1.4.0", "d29af7f02b49c60b5cd96f1c66560579c055036dc33d8e6ed8ed59f30c1ecda4", [:mix], [{:cowboy, "~> 1.1", [hex: :cowboy, repo: "hexpm", optional: false]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm", "426ff3d221c273ad09af44fb6893dd6973cde119e7af1382c4f011ac24e0d538"}, + "hackney": {:hex, :hackney, "1.11.0", "4951ee019df102492dabba66a09e305f61919a8a183a7860236c0fde586134b6", [:rebar3], [{:certifi, "2.0.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "bb3cc62ecc10145f8f0965c05083a5278eae7ef1853d340cc9a7a3e27609b9bd"}, + "httpoison": {:hex, :httpoison, "1.0.0", "1f02f827148d945d40b24f0b0a89afe40bfe037171a6cf70f2486976d86921cd", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "07967c56199f716ce9adb27415ccea1bd76c44f777dd0a6d4166c3d932f37fdf"}, + "idna": {:hex, :idna, "5.1.0", "d72b4effeb324ad5da3cab1767cb16b17939004e789d8c0ad5b70f3cea20c89a", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fc1a2f7340c422650504b1662f28fdf381f34cbd30664e8491744e52c9511d40"}, + "jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b96c400e04b7b765c0854c05a4966323e90c0d11fee0483b1567cda079abb205"}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, + "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm", "7a4c8e1115a2732a67d7624e28cf6c9f30c66711a9e92928e745c255887ba465"}, + "nanoid": {:hex, :nanoid, "1.0.1", "4f9bcecfbc0046795e1084e85b3d25da3721b36b949a672736492c5dfe901062", [:mix], [], "hexpm", "0809ff7e0f87d63d23e4f8608a014a2bf734232d7b289ff7809c14453c51cd71"}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, + "pre_commit_hook": {:hex, :pre_commit_hook, "1.2.0", "cdd3448dfe05df5ceac3427c9784af2cb2bbff05876e0e3a6e002c5163eb5f7a", [:mix], [], "hexpm", "257017c59a2c5da127c668d84ccc5efe070297d6892e6f547d76b353c78ac000"}, + "ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm", "6e56493a862433fccc3aca3025c946d6720d8eedf6e3e6fb911952a7071c357f"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm", "4f8805eb5c8a939cf2359367cb651a3180b27dfb48444846be2613d79355d65e"}, + "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm", "da1d9bef8a092cc7e1e51f1298037a5ddfb0f657fe862dfe7ba4c5807b551c29"}, } diff --git a/priv/fixture/apps/example_app/Makefile b/priv/fixture/apps/example_app/Makefile index 3c7eaa5..8831dd8 100644 --- a/priv/fixture/apps/example_app/Makefile +++ b/priv/fixture/apps/example_app/Makefile @@ -1,8 +1,8 @@ -RELEASE_FILE=_build/prod/rel/example_app/releases/0.1.0/example_app.tar.gz +RELEASE_FILE=_build/prod/example_app-0.1.0.tar.gz TARGET_DIR=../tarball FILE_NAME=$(shell basename $(RELEASE_FILE)) build: @mix deps.get @MIX_ENV=prod mix compile - @MIX_ENV=prod mix release --env=prod + @MIX_ENV=prod mix release --overwrite @cp $(RELEASE_FILE) $(TARGET_DIR)/$(FILE_NAME) diff --git a/priv/fixture/apps/example_app/mix.exs b/priv/fixture/apps/example_app/mix.exs index 61731dc..afb8eae 100644 --- a/priv/fixture/apps/example_app/mix.exs +++ b/priv/fixture/apps/example_app/mix.exs @@ -7,7 +7,12 @@ defmodule ExampleApp.MixProject do version: "0.1.0", elixir: "~> 1.6", start_permanent: Mix.env() == :prod, - deps: deps() + deps: deps(), + releases: [ + example_app: [ + steps: [:assemble, :tar] + ] + ] ] end diff --git a/priv/fixture/apps/example_app/mix.lock b/priv/fixture/apps/example_app/mix.lock index 04a6fe9..369fe83 100644 --- a/priv/fixture/apps/example_app/mix.lock +++ b/priv/fixture/apps/example_app/mix.lock @@ -1,3 +1,3 @@ %{ - "distillery": {:hex, :distillery, "1.5.2", "eec18b2d37b55b0bcb670cf2bcf64228ed38ce8b046bb30a9b636a6f5a4c0080", [:mix], [], "hexpm"}, + "distillery": {:hex, :distillery, "1.5.2", "eec18b2d37b55b0bcb670cf2bcf64228ed38ce8b046bb30a9b636a6f5a4c0080", [:mix], [], "hexpm", "cf01ab32ac53d131ce6efafa20b62ff859ff8ca474b5a4a8b45d835a1b76a851"}, } diff --git a/priv/fixture/apps/example_complex_app/Makefile b/priv/fixture/apps/example_complex_app/Makefile index 5095c53..7ab0e74 100644 --- a/priv/fixture/apps/example_complex_app/Makefile +++ b/priv/fixture/apps/example_complex_app/Makefile @@ -1,8 +1,8 @@ -RELEASE_FILE=_build/prod/rel/example_complex_app/releases/0.1.0/example_complex_app.tar.gz +RELEASE_FILE=_build/prod/example_complex_app-0.1.0.tar.gz TARGET_DIR=../tarball FILE_NAME=$(shell basename $(RELEASE_FILE)) build: @mix deps.get @MIX_ENV=prod mix compile - @MIX_ENV=prod mix release --env=prod + @MIX_ENV=prod mix release --overwrite @cp $(RELEASE_FILE) $(TARGET_DIR)/$(FILE_NAME) diff --git a/priv/fixture/apps/example_complex_app/mix.exs b/priv/fixture/apps/example_complex_app/mix.exs index 409d6c3..1af2e2c 100644 --- a/priv/fixture/apps/example_complex_app/mix.exs +++ b/priv/fixture/apps/example_complex_app/mix.exs @@ -4,8 +4,15 @@ defmodule ExampleComplexApp.MixProject do def project do [ apps_path: "apps", + version: "0.1.0", start_permanent: Mix.env() == :prod, - deps: deps() + deps: deps(), + releases: [ + example_complex_app: [ + applications: [app1: :permanent, app2: :permanent], + steps: [:assemble, :tar] + ] + ] ] end diff --git a/priv/fixture/apps/example_complex_app/mix.lock b/priv/fixture/apps/example_complex_app/mix.lock index 6424d86..6556a5b 100644 --- a/priv/fixture/apps/example_complex_app/mix.lock +++ b/priv/fixture/apps/example_complex_app/mix.lock @@ -1,30 +1,30 @@ %{ - "benchee": {:hex, :benchee, "0.9.0", "433d946b0e4755e186fe564568ead4f593b0d15337fcffa95ed7d5b8a6612670", [:mix], [{:deep_merge, "~> 0.1", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm"}, - "certifi": {:hex, :certifi, "2.0.0", "a0c0e475107135f76b8c1d5bc7efb33cd3815cb3cf3dea7aefdd174dabead064", [:rebar3], [], "hexpm"}, - "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm"}, - "cowboy": {:hex, :cowboy, "2.2.2", "6cde634da1da8b1d17dd2b20f5f6f91ab8ac7fa1b5106d13dad63c905ab76004", [:rebar3], [{:cowlib, "~> 2.1.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.4.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm"}, - "cowlib": {:hex, :cowlib, "2.1.0", "f73658b93dd043af40400c3e4fd997068ebd0c617f8c8f4cd003a1a78ebf94f5", [:rebar3], [], "hexpm"}, - "deep_merge": {:hex, :deep_merge, "0.1.1", "c27866a7524a337b6a039eeb8dd4f17d458fd40fbbcb8c54661b71a22fffe846", [:mix], [], "hexpm"}, - "distillery": {:hex, :distillery, "1.5.2", "eec18b2d37b55b0bcb670cf2bcf64228ed38ce8b046bb30a9b636a6f5a4c0080", [:mix], [], "hexpm"}, - "ex_statsd": {:hex, :ex_statsd, "0.5.3", "e86dd97e25dbc80786e7d22b3c5537f2052a7e12daaaa7e6f2b9c34d03dbbd44", [:mix], [], "hexpm"}, - "flow": {:hex, :flow, "0.13.0", "7188ef047c6831ffb2f25ec0cef9bef02e7ae520632a64debdb65ae96bdc223e", [:mix], [{:gen_stage, "~> 0.13.0", [hex: :gen_stage, repo: "hexpm", optional: false]}], "hexpm"}, - "gen_stage": {:hex, :gen_stage, "0.13.1", "edff5bca9cab22c5d03a834062515e6a1aeeb7665fb44eddae086252e39c4378", [:mix], [], "hexpm"}, - "gen_state_machine": {:hex, :gen_state_machine, "2.0.1", "85efd5a0376929c3a4246dd943e17564a2908c7ddd7acd242d84594e785d83f8", [:mix], [], "hexpm"}, - "gettext": {:hex, :gettext, "0.14.0", "1a019a2e51d5ad3d126efe166dcdf6563768e5d06c32a99ad2281a1fa94b4c72", [:mix], [], "hexpm"}, - "hackney": {:hex, :hackney, "1.11.0", "4951ee019df102492dabba66a09e305f61919a8a183a7860236c0fde586134b6", [:rebar3], [{:certifi, "2.0.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, - "idna": {:hex, :idna, "5.1.0", "d72b4effeb324ad5da3cab1767cb16b17939004e789d8c0ad5b70f3cea20c89a", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, - "jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"}, - "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, - "mime": {:hex, :mime, "1.2.0", "78adaa84832b3680de06f88f0997e3ead3b451a440d183d688085be2d709b534", [:mix], [], "hexpm"}, - "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"}, - "observer_cli": {:hex, :observer_cli, "1.2.1", "611e0532fedd4524fa9d502da5f73b9acbae849c9009ec287dd99ed09c215a41", [:rebar3], [{:recon, "2.3.4", [hex: :recon, repo: "hexpm", optional: false]}], "hexpm"}, - "plug": {:hex, :plug, "1.5.0-rc.1", "7f723e258666cd2df66b2c82ed5c61c6249cb9a9cd42f7892fd3ca39be26b3b4", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.1", [hex: :cowboy, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}], "hexpm"}, - "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}, - "ranch": {:hex, :ranch, "1.4.0", "10272f95da79340fa7e8774ba7930b901713d272905d0012b06ca6d994f8826b", [:rebar3], [], "hexpm"}, - "recon": {:hex, :recon, "2.3.4", "b406c2fccdeaa0d94e23b5e30ae3d635a2d461e363a5c9c6316897037cf050d2", [:rebar3], [], "hexpm"}, - "recon_ex": {:hex, :recon_ex, "0.9.1", "51558b6eb347753dcf9c884ba68d49dbbec607fc4296815b72a0c8995d5d3203", [:mix], [{:recon, "~> 2.3.1", [hex: :recon, repo: "hexpm", optional: false]}], "hexpm"}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"}, - "timex": {:hex, :timex, "3.1.25", "6002dae5432f749d1c93e2cd103eb73cecb53e50d2c885349e8e4146fc96bd44", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm"}, - "tzdata": {:hex, :tzdata, "0.5.16", "13424d3afc76c68ff607f2df966c0ab4f3258859bbe3c979c9ed1606135e7352", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"}, + "benchee": {:hex, :benchee, "0.9.0", "433d946b0e4755e186fe564568ead4f593b0d15337fcffa95ed7d5b8a6612670", [:mix], [{:deep_merge, "~> 0.1", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "bd0732ca4af9dcbd92bb21f6fa28880ff1bca9cd4d074bc2e400c691a8d15576"}, + "certifi": {:hex, :certifi, "2.0.0", "a0c0e475107135f76b8c1d5bc7efb33cd3815cb3cf3dea7aefdd174dabead064", [:rebar3], [], "hexpm", "fdc6066ceeccb3aa14049ab6edf0b9af3b64ae1b0db2a92d5c52146f373bbb1c"}, + "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, + "cowboy": {:hex, :cowboy, "2.2.2", "6cde634da1da8b1d17dd2b20f5f6f91ab8ac7fa1b5106d13dad63c905ab76004", [:rebar3], [{:cowlib, "~> 2.1.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.4.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "bb4b00f37054c3afaf74c0f8bffd4b73655fc69eae3bacf8015920e62f6b0956"}, + "cowlib": {:hex, :cowlib, "2.1.0", "f73658b93dd043af40400c3e4fd997068ebd0c617f8c8f4cd003a1a78ebf94f5", [:rebar3], [], "hexpm", "a00f85d3f8bc7d21eea8a03a2c4b4b18238f4d2959562dc2db666d000684ce32"}, + "deep_merge": {:hex, :deep_merge, "0.1.1", "c27866a7524a337b6a039eeb8dd4f17d458fd40fbbcb8c54661b71a22fffe846", [:mix], [], "hexpm", "7dd57812332d76067deb9611b93cc98ac74cbb3b09480eef80c7e3c5a0813ecf"}, + "distillery": {:hex, :distillery, "1.5.2", "eec18b2d37b55b0bcb670cf2bcf64228ed38ce8b046bb30a9b636a6f5a4c0080", [:mix], [], "hexpm", "cf01ab32ac53d131ce6efafa20b62ff859ff8ca474b5a4a8b45d835a1b76a851"}, + "ex_statsd": {:hex, :ex_statsd, "0.5.3", "e86dd97e25dbc80786e7d22b3c5537f2052a7e12daaaa7e6f2b9c34d03dbbd44", [:mix], [], "hexpm", "357c616a327a40133e49a54db1d46b0d7c9ab2de186f7bfecdc0efca6394adf6"}, + "flow": {:hex, :flow, "0.13.0", "7188ef047c6831ffb2f25ec0cef9bef02e7ae520632a64debdb65ae96bdc223e", [:mix], [{:gen_stage, "~> 0.13.0", [hex: :gen_stage, repo: "hexpm", optional: false]}], "hexpm", "e99178487e164ecb4849f4319164de596b09277b4699a9c2ddb8c573862ffed7"}, + "gen_stage": {:hex, :gen_stage, "0.13.1", "edff5bca9cab22c5d03a834062515e6a1aeeb7665fb44eddae086252e39c4378", [:mix], [], "hexpm", "307544601361efdc80620f8762c8e9afc7e65187640ed260b17a035d58db865c"}, + "gen_state_machine": {:hex, :gen_state_machine, "2.0.1", "85efd5a0376929c3a4246dd943e17564a2908c7ddd7acd242d84594e785d83f8", [:mix], [], "hexpm", "b673deca834dbdf1f082697fb9b9725badefbaf283ba0cd5b4864f18a74a9fe0"}, + "gettext": {:hex, :gettext, "0.14.0", "1a019a2e51d5ad3d126efe166dcdf6563768e5d06c32a99ad2281a1fa94b4c72", [:mix], [], "hexpm", "2b230b81062178856bcb09c41343df596bdfe3efcafe94e364b72e2df97ad7b1"}, + "hackney": {:hex, :hackney, "1.11.0", "4951ee019df102492dabba66a09e305f61919a8a183a7860236c0fde586134b6", [:rebar3], [{:certifi, "2.0.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "bb3cc62ecc10145f8f0965c05083a5278eae7ef1853d340cc9a7a3e27609b9bd"}, + "idna": {:hex, :idna, "5.1.0", "d72b4effeb324ad5da3cab1767cb16b17939004e789d8c0ad5b70f3cea20c89a", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fc1a2f7340c422650504b1662f28fdf381f34cbd30664e8491744e52c9511d40"}, + "jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b96c400e04b7b765c0854c05a4966323e90c0d11fee0483b1567cda079abb205"}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, + "mime": {:hex, :mime, "1.2.0", "78adaa84832b3680de06f88f0997e3ead3b451a440d183d688085be2d709b534", [:mix], [], "hexpm", "b24d1d704209b760aeac161255c8031c5160de1a5cb7dd28bb84ef5bda2ba29e"}, + "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm", "7a4c8e1115a2732a67d7624e28cf6c9f30c66711a9e92928e745c255887ba465"}, + "observer_cli": {:hex, :observer_cli, "1.2.1", "611e0532fedd4524fa9d502da5f73b9acbae849c9009ec287dd99ed09c215a41", [:rebar3], [{:recon, "2.3.4", [hex: :recon, repo: "hexpm", optional: false]}], "hexpm", "820dacb8d9e9fdd3cea48433ef7f31b2f6fbf9e93fff28dc238a05bec34c3957"}, + "plug": {:hex, :plug, "1.5.0-rc.1", "7f723e258666cd2df66b2c82ed5c61c6249cb9a9cd42f7892fd3ca39be26b3b4", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.1", [hex: :cowboy, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}], "hexpm", "af41f496fd5e0633a5c45c313d1fddb4471c70c3e1e23cc065d3aef739b940d3"}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, + "ranch": {:hex, :ranch, "1.4.0", "10272f95da79340fa7e8774ba7930b901713d272905d0012b06ca6d994f8826b", [:rebar3], [], "hexpm", "53ad9c80918ea2b6d11e0c225d4396473c288d02c44c9ca5eb0aa2e1c85fecba"}, + "recon": {:hex, :recon, "2.3.4", "b406c2fccdeaa0d94e23b5e30ae3d635a2d461e363a5c9c6316897037cf050d2", [:rebar3], [], "hexpm", "51de7fd4a019f7966b33133eadb7c5ba919e5d829fb9a9054f012be13e8f9d01"}, + "recon_ex": {:hex, :recon_ex, "0.9.1", "51558b6eb347753dcf9c884ba68d49dbbec607fc4296815b72a0c8995d5d3203", [:mix], [{:recon, "~> 2.3.1", [hex: :recon, repo: "hexpm", optional: false]}], "hexpm", "ca124759162c082adbb29078eadb9ab102425493c94387221d1e11acd0e050f7"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm", "4f8805eb5c8a939cf2359367cb651a3180b27dfb48444846be2613d79355d65e"}, + "timex": {:hex, :timex, "3.1.25", "6002dae5432f749d1c93e2cd103eb73cecb53e50d2c885349e8e4146fc96bd44", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "218b5ac7fd7e6a6ced68d91e9d57de3ab79c5e57b0c677ed3f024ccbb0021391"}, + "tzdata": {:hex, :tzdata, "0.5.16", "13424d3afc76c68ff607f2df966c0ab4f3258859bbe3c979c9ed1606135e7352", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "fe63d21f1cf5d85303617a0585f8176bcb1b68cec46f0623b8a9dedff778579b"}, + "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm", "da1d9bef8a092cc7e1e51f1298037a5ddfb0f657fe862dfe7ba4c5807b551c29"}, } diff --git a/test/ex_loader_test.exs b/test/ex_loader_test.exs index 1951987..3ce3d06 100644 --- a/test/ex_loader_test.exs +++ b/test/ex_loader_test.exs @@ -56,7 +56,7 @@ defmodule ExLoaderTest do end test "load a tarball which contains applications to be loaded" do - tarball = ExLoaderTest.Utils.get_path("apps/tarball/example_app.tar.gz") + tarball = ExLoaderTest.Utils.get_path("apps/tarball/example_app-0.1.0.tar.gz") slave_node = Utils.get_node_name(@slave_node_name) # app is not started in local @@ -69,7 +69,7 @@ defmodule ExLoaderTest do describe "load a tarball from http url which contains apps with dependencies" do test_with_server "server return the file" do - tarball = ExLoaderTest.Utils.get_path("apps/tarball/example_complex_app.tar.gz") + tarball = ExLoaderTest.Utils.get_path("apps/tarball/example_complex_app-0.1.0.tar.gz") url = "http://#{FakeServer.address()}/example.tar.gz" route(