chore(mix): take into account different release/package/edition types
This commit is contained in:
parent
cc652c3343
commit
a4fd777d77
145
mix.exs
145
mix.exs
|
@ -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}],
|
||||
|
|
Loading…
Reference in New Issue