|
|
@@ -84,10 +84,28 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
defp releases() do
|
|
|
[
|
|
|
emqx: fn ->
|
|
|
+ release_type = read_enum_env_var(
|
|
|
+ "EMQX_RELEASE_TYPE",
|
|
|
+ [:cloud, :edge],
|
|
|
+ :cloud
|
|
|
+ )
|
|
|
+
|
|
|
+ package_type = read_enum_env_var(
|
|
|
+ "EMQX_PACKAGE_TYPE",
|
|
|
+ [:bin, :pkg],
|
|
|
+ :bin
|
|
|
+ )
|
|
|
+
|
|
|
+ edition_type = read_enum_env_var(
|
|
|
+ "EMQX_EDITION_TYPE",
|
|
|
+ [:community, :enterprise],
|
|
|
+ :community
|
|
|
+ )
|
|
|
+
|
|
|
base_steps = [
|
|
|
:assemble,
|
|
|
&create_RELEASES/1,
|
|
|
- ©_files/1,
|
|
|
+ ©_files(&1, release_type, package_type, edition_type),
|
|
|
©_escript(&1, "nodetool"),
|
|
|
©_escript(&1, "install_upgrade.escript")
|
|
|
]
|
|
|
@@ -102,7 +120,6 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
[
|
|
|
applications: [
|
|
|
logger: :permanent,
|
|
|
- esasl: :load,
|
|
|
crypto: :permanent,
|
|
|
public_key: :permanent,
|
|
|
asn1: :permanent,
|
|
|
@@ -112,6 +129,7 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
inets: :permanent,
|
|
|
compiler: :permanent,
|
|
|
runtime_tools: :permanent,
|
|
|
+ hocon: :load,
|
|
|
emqx: :load,
|
|
|
emqx_conf: :load,
|
|
|
emqx_machine: :permanent,
|
|
|
@@ -119,6 +137,7 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
mnesia: :load,
|
|
|
ekka: :load,
|
|
|
emqx_plugin_libs: :load,
|
|
|
+ esasl: :load,
|
|
|
emqx_http_lib: :permanent,
|
|
|
emqx_resource: :permanent,
|
|
|
emqx_connector: :permanent,
|
|
|
@@ -160,7 +179,7 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
]
|
|
|
end
|
|
|
|
|
|
- def copy_files(release) do
|
|
|
+ defp copy_files(release, release_type, package_type, edition_type) do
|
|
|
overwrite? = Keyword.get(release.options, :overwrite, false)
|
|
|
|
|
|
bin = Path.join(release.path, "bin")
|
|
|
@@ -189,29 +208,7 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
force: overwrite?
|
|
|
)
|
|
|
|
|
|
- # FIXME: change variables by package type???
|
|
|
- assigns = [
|
|
|
- platform_bin_dir: "bin",
|
|
|
- platform_data_dir: "data",
|
|
|
- platform_etc_dir: "etc",
|
|
|
- platform_lib_dir: "lib",
|
|
|
- platform_log_dir: "log",
|
|
|
- platform_plugins_dir: "plugins",
|
|
|
- runner_root_dir: "$(cd $(dirname $(readlink $0 || echo $0))/..; pwd -P)",
|
|
|
- runner_bin_dir: "$RUNNER_ROOT_DIR/bin",
|
|
|
- runner_etc_dir: "$RUNNER_ROOT_DIR/etc",
|
|
|
- runner_lib_dir: "$RUNNER_ROOT_DIR/lib",
|
|
|
- runner_log_dir: "$RUNNER_ROOT_DIR/log",
|
|
|
- runner_data_dir: "$RUNNER_ROOT_DIR/data",
|
|
|
- runner_user: "",
|
|
|
- release_version: release.version,
|
|
|
- erts_vsn: release.erts_version,
|
|
|
- # FIXME: this is empty in `make emqx` ???
|
|
|
- erl_opts: "",
|
|
|
- # FIXME: varies with edge/community/enterprise
|
|
|
- emqx_description: "EMQ X Community Edition",
|
|
|
- is_elixir: "yes"
|
|
|
- ]
|
|
|
+ assigns = template_vars(release, release_type, package_type, edition_type)
|
|
|
|
|
|
# This is generated by `scripts/merge-config.escript` or `make
|
|
|
# conf-segs`. So, this should be run before the release.
|
|
|
@@ -236,9 +233,16 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
vars_rendered
|
|
|
)
|
|
|
|
|
|
- # FIXME: check if cloud/edge???
|
|
|
+ vm_args_template_path = case release_type do
|
|
|
+ :cloud ->
|
|
|
+ "apps/emqx/etc/emqx_cloud/vm.args"
|
|
|
+
|
|
|
+ :edge ->
|
|
|
+ "apps/emqx/etc/emqx_edge/vm.args"
|
|
|
+ end
|
|
|
+
|
|
|
vm_args_rendered =
|
|
|
- File.read!("apps/emqx/etc/emqx_cloud/vm.args")
|
|
|
+ File.read!(vm_args_template_path)
|
|
|
|> from_rebar_to_eex_template()
|
|
|
|> EEx.eval_string(assigns)
|
|
|
|
|
|
@@ -325,6 +329,91 @@ defmodule EMQXUmbrella.MixProject do
|
|
|
release
|
|
|
end
|
|
|
|
|
|
+ defp template_vars(release, release_type, :bin = _package_type, edition_type) do
|
|
|
+ [
|
|
|
+ platform_bin_dir: "bin",
|
|
|
+ platform_data_dir: "data",
|
|
|
+ platform_etc_dir: "etc",
|
|
|
+ platform_lib_dir: "lib",
|
|
|
+ platform_log_dir: "log",
|
|
|
+ platform_plugins_dir: "plugins",
|
|
|
+ runner_root_dir: "$(cd $(dirname $(readlink $0 || echo $0))/..; pwd -P)",
|
|
|
+ runner_bin_dir: "$RUNNER_ROOT_DIR/bin",
|
|
|
+ runner_etc_dir: "$RUNNER_ROOT_DIR/etc",
|
|
|
+ runner_lib_dir: "$RUNNER_ROOT_DIR/lib",
|
|
|
+ runner_log_dir: "$RUNNER_ROOT_DIR/log",
|
|
|
+ runner_data_dir: "$RUNNER_ROOT_DIR/data",
|
|
|
+ runner_user: "",
|
|
|
+ release_version: release.version,
|
|
|
+ erts_vsn: release.erts_version,
|
|
|
+ # FIXME: this is empty in `make emqx` ???
|
|
|
+ erl_opts: "",
|
|
|
+ emqx_description: emqx_description(release_type, edition_type),
|
|
|
+ is_elixir: "yes"
|
|
|
+ ]
|
|
|
+ end
|
|
|
+
|
|
|
+ defp template_vars(release, release_type, :pkg = _package_type, edition_type) do
|
|
|
+ [
|
|
|
+ platform_bin_dir: "",
|
|
|
+ platform_data_dir: "/var/lib/emqx",
|
|
|
+ platform_etc_dir: "/etc/emqx",
|
|
|
+ platform_lib_dir: "",
|
|
|
+ platform_log_dir: "/var/log/emqx",
|
|
|
+ platform_plugins_dir: "/var/lib/emqx/plugins",
|
|
|
+ runner_root_dir: "/usr/lib/emqx",
|
|
|
+ runner_bin_dir: "/usr/bin",
|
|
|
+ runner_etc_dir: "/etc/emqx",
|
|
|
+ runner_lib_dir: "$RUNNER_ROOT_DIR/lib",
|
|
|
+ runner_log_dir: "/var/log/emqx",
|
|
|
+ runner_data_dir: "/var/lib/emqx",
|
|
|
+ runner_user: "emqx",
|
|
|
+ release_version: release.version,
|
|
|
+ erts_vsn: release.erts_version,
|
|
|
+ # FIXME: this is empty in `make emqx` ???
|
|
|
+ erl_opts: "",
|
|
|
+ emqx_description: emqx_description(release_type, edition_type),
|
|
|
+ is_elixir: "yes"
|
|
|
+ ]
|
|
|
+ end
|
|
|
+
|
|
|
+ defp read_enum_env_var(env_var, allowed_values, default_value) do
|
|
|
+ case System.fetch_env(env_var) do
|
|
|
+ :error ->
|
|
|
+ default_value
|
|
|
+
|
|
|
+ {:ok, raw_value} ->
|
|
|
+ value =
|
|
|
+ raw_value
|
|
|
+ |> String.downcase()
|
|
|
+ |> String.to_atom()
|
|
|
+
|
|
|
+ if value not in allowed_values do
|
|
|
+ Mix.raise(
|
|
|
+ """
|
|
|
+ Invalid value #{raw_value} for variable #{env_var}.
|
|
|
+ Allowed values are: #{inspect(allowed_values)}
|
|
|
+ """
|
|
|
+ )
|
|
|
+ end
|
|
|
+
|
|
|
+ value
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ defp emqx_description(release_type, edition_type) do
|
|
|
+ case {release_type, edition_type} do
|
|
|
+ {:cloud, :enterprise} ->
|
|
|
+ "EMQ X Enterprise Edition"
|
|
|
+
|
|
|
+ {:cloud, :community} ->
|
|
|
+ "EMQ X Community Edition"
|
|
|
+
|
|
|
+ {:edge, :community} ->
|
|
|
+ "EMQ X Edge Edition"
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
defp bcrypt_dep() do
|
|
|
if enable_bcrypt?(),
|
|
|
do: [{:bcrypt, github: "emqx/erlang-bcrypt", tag: "0.6.0", override: true}],
|