|
|
@@ -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()
|