emqx/apps/emqx_release_helper/lib/emqx_release_helper.ex

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