From 8a68f5dada06e9fdfb4715eee99380828a641b71 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Mon, 1 Jul 2024 13:24:15 -0300 Subject: [PATCH] ci: temporarily revert mix release back to old version This is so we may merge the huge PR as is and work on the fixes later with less conflicts. --- Makefile | 6 +- lib/mix/tasks/emqx.eunit.ex | 2 +- lib/mix/tasks/emqx.proper.ex | 2 +- mix.exs | 181 ++++++++++++++++++++++++++++++++++- 4 files changed, 181 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 69e821f5d..41d4bd5b6 100644 --- a/Makefile +++ b/Makefile @@ -63,10 +63,8 @@ mix-deps-get: $(ELIXIR_COMMON_DEPS) @mix deps.get .PHONY: eunit -eunit: $(REBAR) ${ELIXIR_COMMON_DEPS} merge-config - # @$(REBAR) eunit --name eunit@127.0.0.1 -c -v --cover_export_name $(CT_COVER_EXPORT_PREFIX)-eunit - # TODO: cover compile - mix eunit +eunit: $(REBAR) merge-config + @$(REBAR) eunit --name eunit@127.0.0.1 -c -v --cover_export_name $(CT_COVER_EXPORT_PREFIX)-eunit .PHONY: proper proper: $(REBAR) diff --git a/lib/mix/tasks/emqx.eunit.ex b/lib/mix/tasks/emqx.eunit.ex index 4ab46669c..a2c0dfe39 100644 --- a/lib/mix/tasks/emqx.eunit.ex +++ b/lib/mix/tasks/emqx.eunit.ex @@ -1,7 +1,7 @@ defmodule Mix.Tasks.Emqx.Eunit do use Mix.Task - Code.require_file("emqx.ct.ex", __DIR__) + # Code.require_file("emqx.ct.ex", __DIR__) alias Mix.Tasks.Emqx.Ct, as: ECt diff --git a/lib/mix/tasks/emqx.proper.ex b/lib/mix/tasks/emqx.proper.ex index ef8e5754b..55dbbe23c 100644 --- a/lib/mix/tasks/emqx.proper.ex +++ b/lib/mix/tasks/emqx.proper.ex @@ -1,7 +1,7 @@ defmodule Mix.Tasks.Emqx.Proper do use Mix.Task - Code.require_file("emqx.ct.ex", __DIR__) + # Code.require_file("emqx.ct.ex", __DIR__) alias Mix.Tasks.Emqx.Ct, as: ECt diff --git a/mix.exs b/mix.exs index 00665e3fd..ce2b9ab91 100644 --- a/mix.exs +++ b/mix.exs @@ -34,9 +34,12 @@ defmodule EMQXUmbrella.MixProject do version = pkg_vsn() [ - # app: :emqx_mix, - apps_path: "apps", - apps: applications(profile_info.release_type, profile_info.edition_type) |> Keyword.keys(), + # 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(), + + app: :emqx_mix, erlc_options: erlc_options(profile_info, version), version: version, deps: deps(profile_info, version), @@ -48,6 +51,10 @@ defmodule EMQXUmbrella.MixProject do defp deps(profile_info, version) do # we need several overrides here because dependencies specify # other exact versions, and not ranges. + + ## TODO: this should be removed once we migrate the release build to mix + rebar3_umbrella_apps = emqx_apps(profile_info, version) ++ enterprise_deps(profile_info) + common_deps() ++ [ {:lc, github: "emqx/lc", tag: "0.3.2", override: true}, @@ -118,9 +125,175 @@ defmodule EMQXUmbrella.MixProject do {:quickrand, github: "okeuday/quickrand", tag: "v2.0.6", override: true}, {:ra, "2.7.3", override: true}, {:mimerl, "1.2.0", override: true} - ] ++ jq_dep() ++ quicer_dep() + ] ++ + jq_dep() ++ + quicer_dep() ++ rebar3_umbrella_apps end + ############################################################################################### + # BEGIN DEPRECATED FOR MIX BLOCK + # These should be removed once we fully migrate to mix + ############################################################################################### + + defp emqx_apps(profile_info, version) do + apps = umbrella_apps(profile_info) ++ enterprise_apps(profile_info) + set_emqx_app_system_env(apps, profile_info, version) + end + + defp umbrella_apps(profile_info = %{release_type: release_type}) do + enterprise_apps = enterprise_umbrella_apps(release_type) + excluded_apps = excluded_apps(release_type) + + "apps/*" + |> Path.wildcard() + |> Enum.map(fn path -> + app = + path + |> Path.basename() + |> String.to_atom() + + {app, path: path, manager: :rebar3, override: true} + end) + |> Enum.reject(fn dep_spec -> + dep_spec + |> elem(0) + |> then(&MapSet.member?(enterprise_apps, &1)) + end) + |> Enum.reject(fn {app, _} -> + case profile_info do + %{edition_type: :enterprise} -> + app == :emqx_telemetry + + _ -> + false + end + end) + |> Enum.reject(fn {app, _} -> app in excluded_apps end) + end + + defp enterprise_apps(_profile_info = %{release_type: release_type, edition_type: :enterprise}) do + Enum.map(enterprise_umbrella_apps(release_type), fn app_name -> + path = "apps/#{app_name}" + {app_name, path: path, manager: :rebar3, override: true} + end) + end + + defp enterprise_apps(_profile_info) do + [] + end + + # need to remove those when listing `/apps/`... + defp enterprise_umbrella_apps(_release_type) do + MapSet.new([ + :emqx_connector_aggregator, + :emqx_bridge_kafka, + :emqx_bridge_confluent, + :emqx_bridge_gcp_pubsub, + :emqx_bridge_cassandra, + :emqx_bridge_opents, + :emqx_bridge_dynamo, + :emqx_bridge_greptimedb, + :emqx_bridge_hstreamdb, + :emqx_bridge_influxdb, + :emqx_bridge_iotdb, + :emqx_bridge_es, + :emqx_bridge_matrix, + :emqx_bridge_mongodb, + :emqx_bridge_mysql, + :emqx_bridge_pgsql, + :emqx_bridge_redis, + :emqx_bridge_rocketmq, + :emqx_bridge_tdengine, + :emqx_bridge_timescale, + :emqx_bridge_sqlserver, + :emqx_bridge_pulsar, + :emqx_oracle, + :emqx_bridge_oracle, + :emqx_bridge_rabbitmq, + :emqx_bridge_clickhouse, + :emqx_ft, + :emqx_license, + :emqx_s3, + :emqx_bridge_s3, + :emqx_bridge_azure_blob_storage, + :emqx_schema_registry, + :emqx_schema_validation, + :emqx_message_transformation, + :emqx_enterprise, + :emqx_bridge_kinesis, + :emqx_bridge_azure_event_hub, + :emqx_gcp_device, + :emqx_dashboard_rbac, + :emqx_dashboard_sso, + :emqx_audit, + :emqx_gateway_gbt32960, + :emqx_gateway_ocpp, + :emqx_gateway_jt808, + :emqx_bridge_syskeeper, + :emqx_ds_shared_sub, + :emqx_auth_ext, + :emqx_cluster_link, + :emqx_ds_builtin_raft + ]) + end + + defp enterprise_deps(_profile_info = %{edition_type: :enterprise}) do + [ + {:hstreamdb_erl, + github: "hstreamdb/hstreamdb_erl", tag: "0.5.18+v0.18.1+ezstd-v1.0.5-emqx1"}, + {:influxdb, github: "emqx/influxdb-client-erl", tag: "1.1.13", override: true}, + {:wolff, github: "kafka4beam/wolff", tag: "2.0.0"}, + {:kafka_protocol, github: "kafka4beam/kafka_protocol", tag: "4.1.5", override: true}, + {:brod_gssapi, github: "kafka4beam/brod_gssapi", tag: "v0.1.1"}, + {:brod, github: "kafka4beam/brod", tag: "3.18.0"}, + {:snappyer, "1.2.9", override: true}, + {:crc32cer, "0.1.8", override: true}, + {:opentsdb, github: "emqx/opentsdb-client-erl", tag: "v0.5.1", override: true}, + {:greptimedb, + github: "GreptimeTeam/greptimedb-ingester-erl", tag: "v0.1.8", override: true}, + # The following two are dependencies of rabbit_common. They are needed here to + # make mix not complain about conflicting versions + {:thoas, github: "emqx/thoas", tag: "v1.0.0", override: true}, + {:credentials_obfuscation, + github: "emqx/credentials-obfuscation", tag: "v3.2.0", override: true}, + {:rabbit_common, + github: "emqx/rabbitmq-server", + tag: "v3.11.13.2", + sparse: "deps/rabbit_common", + override: true}, + {:amqp_client, + github: "emqx/rabbitmq-server", + tag: "v3.11.13.2", + sparse: "deps/amqp_client", + override: true} + ] + end + + defp enterprise_deps(_profile_info) do + [] + end + + defp set_emqx_app_system_env(apps, profile_info, version) do + system_env = emqx_app_system_env(profile_info, version) ++ maybe_no_quic_env() + + Enum.map( + apps, + fn {app, opts} -> + {app, + Keyword.update( + opts, + :system_env, + system_env, + &Keyword.merge(&1, system_env) + )} + end + ) + end + + ############################################################################################### + # END DEPRECATED FOR MIX BLOCK + ############################################################################################### + def emqx_app_system_env(profile_info, version) do erlc_options(profile_info, version) |> dump_as_erl()