chore(mix): take into account different release/package/edition types

This commit is contained in:
Thales Macedo Garitezi 2021-12-27 09:57:56 -03:00
parent cc652c3343
commit a4fd777d77
No known key found for this signature in database
GPG Key ID: DD279F8152A9B6DD
1 changed files with 117 additions and 28 deletions

145
mix.exs
View File

@ -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,
&copy_files/1,
&copy_files(&1, release_type, package_type, edition_type),
&copy_escript(&1, "nodetool"),
&copy_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}],