diff --git a/mix.exs b/mix.exs index 29278cf40..7525df5a1 100644 --- a/mix.exs +++ b/mix.exs @@ -118,17 +118,89 @@ defmodule EMQXUmbrella.MixProject do :emqx_prometheus, :emqx_plugins ], - steps: [:assemble, ©_files/1] + steps: [ + :assemble, + &create_RELEASES/1, + ©_files/1, + ©_nodetool/1, + ] ] ] end def copy_files(release) do + overwrite? = Keyword.get(release.options, :overwrite, false) + + bin = Path.join(release.path, "bin") etc = Path.join(release.path, "etc") - # FIXME: Remove?? - File.mkdir_p!(etc) - File.cp!("apps/emqx_authz/etc/acl.conf", Path.join(etc, "acl.conf")) + Mix.Generator.create_directory(bin) + Mix.Generator.create_directory(etc) + + Mix.Generator.copy_file( + "apps/emqx_authz/etc/acl.conf", + Path.join(etc, "acl.conf"), + force: overwrite? + ) + + # FIXME: check if cloud/edge!! + Mix.Generator.copy_file( + "apps/emqx/etc/emqx_cloud/vm.args", + Path.join(etc, "vm.args"), + force: overwrite? + ) + Mix.Generator.copy_file( + "apps/emqx/etc/emqx_cloud/vm.args", + Path.join(release.version_path, "vm.args"), + force: overwrite? + ) + + + release + end + + # needed by nodetool and by release_handler + def create_RELEASES(release) do + apps = Enum.map(release.applications, fn {app_name, app_props} -> + app_vsn = Keyword.fetch!(app_props, :vsn) + app_path = + "./lib" + |> Path.join("#{app_name}-#{app_vsn}") + |> to_charlist() + {app_name, app_vsn, app_path} + end) + release_entry = + [{ + :release, + to_charlist(release.name), + to_charlist(release.version), + release.erts_version, + apps, + :permanent + }] + + release.path + |> Path.join("releases") + |> Path.join("RELEASES") + |> File.open!([:write, :utf8], fn handle -> + IO.puts(handle, "%% coding: utf-8") + :io.format(handle, '~tp.~n', [release_entry]) + end) + + release + end + + def copy_nodetool(release) do + [shebang, rest] = + "bin/nodetool" + |> File.read!() + |> String.split("\n", parts: 2) + + path = Path.join([release.path, "bin", "nodetool"]) + # the elixir version of escript + start.boot required the boot_var + # RELEASE_LIB to be defined. + boot_var = "%%!-boot_var RELEASE_LIB $RUNNER_ROOT_DIR/lib" + File.write!(path, [shebang, "\n", boot_var, "\n", rest]) release end