133 lines
3.6 KiB
Elixir
133 lines
3.6 KiB
Elixir
defmodule EmqxReleaseHelper do
|
|
def applications do
|
|
config = profile_vars()
|
|
|
|
EmqxReleaseHelper.Applications.__all__()
|
|
|> Enum.filter(fn
|
|
%{enable?: fun} -> fun.(config)
|
|
_ -> true
|
|
end)
|
|
|> Enum.map(fn %{name: name, start_type: start_type} -> {name, start_type} end)
|
|
end
|
|
|
|
def run(release) do
|
|
config = Map.merge(profile_vars(), release_vars(release))
|
|
|
|
release
|
|
|> EmqxReleaseHelper.Script.run(config)
|
|
|> EmqxReleaseHelper.Overlay.run(config)
|
|
|> EmqxReleaseHelper.Applications.run(config)
|
|
end
|
|
|
|
def profile_vars() do
|
|
"RELEASE_PROFILE"
|
|
|> System.get_env("emqx")
|
|
|> String.to_existing_atom()
|
|
|> case do
|
|
:emqx ->
|
|
%{
|
|
release_type: :cloud,
|
|
package_type: :bin
|
|
}
|
|
end
|
|
|> Map.merge(%{
|
|
erts_vsn: :version |> :erlang.system_info() |> to_string(),
|
|
project_path: EMQXUmbrella.MixProject.project_path(),
|
|
enable_bcrypt: EMQXUmbrella.MixProject.enable_bcrypt(),
|
|
enable_plugin_emqx_modules: false,
|
|
enable_plugin_emqx_retainer: true,
|
|
apps_paths: Mix.Project.apps_paths(),
|
|
built_on_arch: get_arch()
|
|
})
|
|
|> then(fn %{release_type: release_type} = config ->
|
|
Map.merge(config, profile_vars(:release_type, release_type))
|
|
end)
|
|
|> then(fn %{package_type: package_type} = config ->
|
|
Map.merge(config, profile_vars(:package_type, package_type))
|
|
end)
|
|
end
|
|
|
|
defp profile_vars(:release_type, :cloud) do
|
|
%{
|
|
emqx_description: "EMQ X Broker",
|
|
enable_plugin_emqx_rule_engine: true,
|
|
enable_plugin_emqx_bridge_mqtt: false
|
|
}
|
|
end
|
|
|
|
defp profile_vars(:release_type, :edge) do
|
|
%{
|
|
emqx_description: "EMQ X Edge",
|
|
enable_plugin_emqx_rule_engine: false,
|
|
enable_plugin_emqx_bridge_mqtt: true
|
|
}
|
|
end
|
|
|
|
defp profile_vars(:package_type, :bin) do
|
|
%{
|
|
platform_bin_dir: "bin",
|
|
platform_data_dir: "data",
|
|
platform_etc_dir: "etc",
|
|
platform_lib_dir: "lib",
|
|
platform_log_dir: "log",
|
|
platform_plugins_dir: "etc/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: ""
|
|
}
|
|
end
|
|
|
|
defp profile_vars(:package_type, :pkg) 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"
|
|
}
|
|
end
|
|
|
|
defp release_vars(release) do
|
|
%{
|
|
release_version: release.version,
|
|
release_path: release.path,
|
|
release_version_path: release.version_path
|
|
}
|
|
end
|
|
|
|
defp get_arch do
|
|
major_version = System.otp_release()
|
|
|
|
otp_release =
|
|
[:code.root_dir(), "releases", major_version, "OTP_VERSION"]
|
|
|> Path.join()
|
|
|> File.read()
|
|
|> case do
|
|
{:ok, version} -> String.trim(version)
|
|
{:error, _} -> major_version
|
|
end
|
|
|
|
wordsize =
|
|
try do
|
|
:erlang.system_info({:wordsize, :external}) * 8
|
|
rescue
|
|
_ ->
|
|
:erlang.system_info(:wordsize) * 8
|
|
end
|
|
|
|
Enum.join([otp_release, :erlang.system_info(:system_architecture), wordsize], "-")
|
|
end
|
|
end
|