diff --git a/.github/workflows/.zipignore2 b/.github/workflows/.zipignore2 new file mode 100644 index 000000000..f0d0058a7 --- /dev/null +++ b/.github/workflows/.zipignore2 @@ -0,0 +1 @@ +*/.github/* diff --git a/Makefile b/Makefile index ae92feced..6aaaf58d7 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,8 @@ CT_COVER_EXPORT_PREFIX ?= $(PROFILE) export REBAR_GIT_CLONE_OPTIONS += --depth=1 +ELIXIR_COMMON_DEPS := ensure-hex ensure-mix-rebar3 ensure-mix-rebar + .PHONY: default default: $(REBAR) $(PROFILE) @@ -58,8 +60,12 @@ ensure-mix-rebar3: $(REBAR) ensure-mix-rebar: $(REBAR) @mix local.rebar --if-missing --force + +.PHONY: elixir-common-deps +elixir-common-deps: $(ELIXIR_COMMON_DEPS) + .PHONY: mix-deps-get -mix-deps-get: $(ELIXIR_COMMON_DEPS) +mix-deps-get: elixir-common-deps @mix deps.get .PHONY: eunit diff --git a/apps/emqx/mix.exs b/apps/emqx/mix.exs index fd9aca57e..c9de2b118 100644 --- a/apps/emqx/mix.exs +++ b/apps/emqx/mix.exs @@ -36,6 +36,7 @@ defmodule EMQX.MixProject do def deps() do ## FIXME!!! go though emqx.app.src and add missing stuff... [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx_utils, in_umbrella: true}, {:emqx_ds_backends, in_umbrella: true}, diff --git a/apps/emqx_auth/mix.exs b/apps/emqx_auth/mix.exs index aacc0bda6..e3438c27b 100644 --- a/apps/emqx_auth/mix.exs +++ b/apps/emqx_auth/mix.exs @@ -28,6 +28,7 @@ defmodule EMQXAuth.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_utils, in_umbrella: true} ] diff --git a/apps/emqx_bridge/mix.exs b/apps/emqx_bridge/mix.exs index 8322b5606..dd6b91b94 100644 --- a/apps/emqx_bridge/mix.exs +++ b/apps/emqx_bridge/mix.exs @@ -28,6 +28,7 @@ defmodule EMQXBridge.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_resource, in_umbrella: true}, {:emqx_connector, in_umbrella: true}, diff --git a/apps/emqx_durable_storage/mix.exs b/apps/emqx_durable_storage/mix.exs index 4cb1a9b35..59626a679 100644 --- a/apps/emqx_durable_storage/mix.exs +++ b/apps/emqx_durable_storage/mix.exs @@ -33,6 +33,7 @@ defmodule EMQXDurableStorage.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx_utils, in_umbrella: true}, UMP.common_dep(:rocksdb), UMP.common_dep(:gproc), diff --git a/apps/emqx_exhook/mix.exs b/apps/emqx_exhook/mix.exs index 4e72cfa24..5baf6dac4 100644 --- a/apps/emqx_exhook/mix.exs +++ b/apps/emqx_exhook/mix.exs @@ -36,6 +36,7 @@ defmodule EMQXExhook.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_utils, in_umbrella: true}, UMP.common_dep(:grpc) diff --git a/apps/emqx_gateway/mix.exs b/apps/emqx_gateway/mix.exs index 7c4daeb46..fb1b48d40 100644 --- a/apps/emqx_gateway/mix.exs +++ b/apps/emqx_gateway/mix.exs @@ -26,6 +26,7 @@ defmodule EMQXGateway.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_utils, in_umbrella: true}, {:emqx_ctl, in_umbrella: true}, diff --git a/apps/emqx_gateway_exproto/mix.exs b/apps/emqx_gateway_exproto/mix.exs index e3564694d..558fe9ed7 100644 --- a/apps/emqx_gateway_exproto/mix.exs +++ b/apps/emqx_gateway_exproto/mix.exs @@ -34,6 +34,7 @@ defmodule EMQXGatewayExproto.MixProject do def deps() do test_deps = if UMP.test_env?(), do: [{:emqx_exhook, in_umbrella: true, runtime: false}], else: [] test_deps ++ [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_utils, in_umbrella: true}, {:emqx_gateway, in_umbrella: true}, diff --git a/apps/emqx_gcp_device/mix.exs b/apps/emqx_gcp_device/mix.exs index 94e1dc077..cafdf6a12 100644 --- a/apps/emqx_gcp_device/mix.exs +++ b/apps/emqx_gcp_device/mix.exs @@ -27,6 +27,7 @@ defmodule EMQXGCPDevice.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_auth, in_umbrella: true}, UMP.common_dep(:jose), diff --git a/apps/emqx_license/mix.exs b/apps/emqx_license/mix.exs index e0d2937de..a01256dad 100644 --- a/apps/emqx_license/mix.exs +++ b/apps/emqx_license/mix.exs @@ -26,6 +26,7 @@ defmodule EMQXLicense.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_utils, in_umbrella: true}, {:emqx_ctl, in_umbrella: true}, diff --git a/apps/emqx_exhook/lib/emqx/grpc/template/client.eex b/apps/emqx_mix_utils/lib/emqx/grpc/template/client.eex similarity index 100% rename from apps/emqx_exhook/lib/emqx/grpc/template/client.eex rename to apps/emqx_mix_utils/lib/emqx/grpc/template/client.eex diff --git a/apps/emqx_exhook/lib/emqx/grpc/template/service.eex b/apps/emqx_mix_utils/lib/emqx/grpc/template/service.eex similarity index 100% rename from apps/emqx_exhook/lib/emqx/grpc/template/service.eex rename to apps/emqx_mix_utils/lib/emqx/grpc/template/service.eex diff --git a/apps/emqx_durable_storage/lib/mix/tasks/compile.asn1.ex b/apps/emqx_mix_utils/lib/mix/tasks/compile.asn1.ex similarity index 100% rename from apps/emqx_durable_storage/lib/mix/tasks/compile.asn1.ex rename to apps/emqx_mix_utils/lib/mix/tasks/compile.asn1.ex diff --git a/apps/emqx/lib/mix/tasks/compile.copy_srcs.ex b/apps/emqx_mix_utils/lib/mix/tasks/compile.copy_srcs.ex similarity index 100% rename from apps/emqx/lib/mix/tasks/compile.copy_srcs.ex rename to apps/emqx_mix_utils/lib/mix/tasks/compile.copy_srcs.ex diff --git a/apps/emqx_exhook/lib/mix/tasks/compile.grpc.ex b/apps/emqx_mix_utils/lib/mix/tasks/compile.grpc.ex similarity index 100% rename from apps/emqx_exhook/lib/mix/tasks/compile.grpc.ex rename to apps/emqx_mix_utils/lib/mix/tasks/compile.grpc.ex diff --git a/lib/mix/tasks/emqx.ct.ex b/apps/emqx_mix_utils/lib/mix/tasks/emqx.ct.ex similarity index 100% rename from lib/mix/tasks/emqx.ct.ex rename to apps/emqx_mix_utils/lib/mix/tasks/emqx.ct.ex diff --git a/lib/mix/tasks/emqx.dialyzer.ex b/apps/emqx_mix_utils/lib/mix/tasks/emqx.dialyzer.ex similarity index 97% rename from lib/mix/tasks/emqx.dialyzer.ex rename to apps/emqx_mix_utils/lib/mix/tasks/emqx.dialyzer.ex index 9a2a5ad16..0b0e82bdd 100644 --- a/lib/mix/tasks/emqx.dialyzer.ex +++ b/apps/emqx_mix_utils/lib/mix/tasks/emqx.dialyzer.ex @@ -1,12 +1,6 @@ defmodule Mix.Tasks.Emqx.Dialyzer do use Mix.Task - alias EMQXUmbrella.MixProject, as: UMP - - if UMP.new_mix_build?() do - Code.require_file("emqx.ct.ex", __DIR__) - end - alias Mix.Tasks.Emqx.Ct, as: ECt @requirements ["compile", "loadpaths"] diff --git a/lib/mix/tasks/emqx.eunit.ex b/apps/emqx_mix_utils/lib/mix/tasks/emqx.eunit.ex similarity index 95% rename from lib/mix/tasks/emqx.eunit.ex rename to apps/emqx_mix_utils/lib/mix/tasks/emqx.eunit.ex index 2ec0e7abc..4b1d399f7 100644 --- a/lib/mix/tasks/emqx.eunit.ex +++ b/apps/emqx_mix_utils/lib/mix/tasks/emqx.eunit.ex @@ -1,12 +1,6 @@ defmodule Mix.Tasks.Emqx.Eunit do use Mix.Task - alias EMQXUmbrella.MixProject, as: UMP - - if UMP.new_mix_build?() do - Code.require_file("emqx.ct.ex", __DIR__) - end - alias Mix.Tasks.Emqx.Ct, as: ECt # todo: invoke the equivalent of `make merge-config` as a requirement... diff --git a/lib/mix/tasks/emqx.proper.ex b/apps/emqx_mix_utils/lib/mix/tasks/emqx.proper.ex similarity index 97% rename from lib/mix/tasks/emqx.proper.ex rename to apps/emqx_mix_utils/lib/mix/tasks/emqx.proper.ex index 55dbbe23c..1c9b6754e 100644 --- a/lib/mix/tasks/emqx.proper.ex +++ b/apps/emqx_mix_utils/lib/mix/tasks/emqx.proper.ex @@ -1,8 +1,6 @@ defmodule Mix.Tasks.Emqx.Proper do use Mix.Task - # Code.require_file("emqx.ct.ex", __DIR__) - alias Mix.Tasks.Emqx.Ct, as: ECt # todo: invoke the equivalent of `make merge-config` as a requirement... diff --git a/apps/emqx_mix_utils/mix.exs b/apps/emqx_mix_utils/mix.exs new file mode 100644 index 000000000..d239e28fe --- /dev/null +++ b/apps/emqx_mix_utils/mix.exs @@ -0,0 +1,26 @@ +defmodule EMQXMixUtils.MixProject do + use Mix.Project + alias EMQXUmbrella.MixProject, as: UMP + + def project do + [ + app: :emqx_mix_utils, + version: "0.1.0", + build_path: "../../_build", + deps_path: "../../deps", + lockfile: "../../mix.lock", + elixir: "~> 1.14", + start_permanent: Mix.env() == :prod, + deps: deps() + ] + end + + # Run "mix help compile.app" to learn about applications + def application do + [extra_applications: UMP.extra_applications()] + end + + def deps() do + [] + end +end diff --git a/apps/emqx_s3/mix.exs b/apps/emqx_s3/mix.exs index d5b145280..0f6d16f11 100644 --- a/apps/emqx_s3/mix.exs +++ b/apps/emqx_s3/mix.exs @@ -26,6 +26,7 @@ defmodule EMQXS3.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, UMP.common_dep(:gproc), UMP.common_dep(:ehttpc), diff --git a/apps/emqx_telemetry/mix.exs b/apps/emqx_telemetry/mix.exs index 224296d2f..c29306fff 100644 --- a/apps/emqx_telemetry/mix.exs +++ b/apps/emqx_telemetry/mix.exs @@ -26,6 +26,7 @@ defmodule EMQXTelemetry.MixProject do def deps() do [ + {:emqx_mix_utils, in_umbrella: true, runtime: false}, {:emqx, in_umbrella: true}, {:emqx_utils, in_umbrella: true}, {:emqx_conf, in_umbrella: true} diff --git a/mix.exs b/mix.exs index 24a9ec820..0741dae9e 100644 --- a/mix.exs +++ b/mix.exs @@ -40,8 +40,6 @@ defmodule EMQXUmbrella.MixProject do if new_mix_build?() do [ - # TODO: these lines will be uncommented when we switch to using mix as the manager - # for all umbrella apps. apps_path: "apps", apps: applications(profile_info.release_type, profile_info.edition_type) |> Keyword.keys(), @@ -315,6 +313,7 @@ defmodule EMQXUmbrella.MixProject do false end end) + |> Enum.reject(fn {app, _} -> app == :emqx_mix_utils end) |> Enum.reject(fn {app, _} -> app in excluded_apps end) end @@ -1316,26 +1315,22 @@ defmodule EMQXUmbrella.MixProject do ensure_test_mix_env!() set_test_env!(true) - Code.require_file("lib/mix/tasks/emqx.ct.ex") Mix.Task.run("emqx.ct", args) end defp do_eunit(args) do ensure_test_mix_env!() set_test_env!(true) - Code.require_file("lib/mix/tasks/emqx.eunit.ex") Mix.Task.run("emqx.eunit", args) end defp do_proper(args) do ensure_test_mix_env!() set_test_env!(true) - Code.require_file("lib/mix/tasks/emqx.proper.ex") Mix.Task.run("emqx.proper", args) end defp do_dialyzer(args) do - Code.require_file("lib/mix/tasks/emqx.dialyzer.ex") Mix.Task.run("emqx.dialyzer", args) end