|
|
@@ -0,0 +1,62 @@
|
|
|
+#!/usr/bin/env elixir
|
|
|
+
|
|
|
+{parsed, _argv, _errors = []} =
|
|
|
+ OptionParser.parse(
|
|
|
+ System.argv(),
|
|
|
+ strict: [profile: :string]
|
|
|
+ )
|
|
|
+
|
|
|
+profile = Keyword.fetch!(parsed, :profile)
|
|
|
+
|
|
|
+:xref.start(:xref)
|
|
|
+:xref.set_default(:xref, warnings: false)
|
|
|
+rel_dir = '_build/#{profile}/lib/'
|
|
|
+:xref.add_release(:xref, rel_dir)
|
|
|
+
|
|
|
+{:ok, calls} = :xref.q(:xref, '(App) (XC || "mria":"create_table"/".*")')
|
|
|
+
|
|
|
+emqx_calls =
|
|
|
+ calls
|
|
|
+ |> Enum.map(&elem(&1, 0))
|
|
|
+ |> Enum.filter(&(to_string(&1) =~ "emqx_"))
|
|
|
+ |> MapSet.new()
|
|
|
+
|
|
|
+Path.wildcard(rel_dir ++ "*/ebin")
|
|
|
+|> Enum.each(fn dir ->
|
|
|
+ dir
|
|
|
+ |> to_charlist()
|
|
|
+ |> :code.add_pathz()
|
|
|
+end)
|
|
|
+
|
|
|
+Path.wildcard(rel_dir ++ "*")
|
|
|
+|> Enum.map(fn dir ->
|
|
|
+ dir
|
|
|
+ |> Path.basename()
|
|
|
+ |> String.to_atom()
|
|
|
+ |> Application.load()
|
|
|
+end)
|
|
|
+
|
|
|
+reboot_apps = :emqx_machine_boot.sorted_reboot_apps() |> MapSet.new()
|
|
|
+
|
|
|
+missing_reboot_apps = MapSet.difference(emqx_calls, reboot_apps)
|
|
|
+
|
|
|
+if MapSet.size(missing_reboot_apps) != 0 do
|
|
|
+ IO.puts(
|
|
|
+ :stderr,
|
|
|
+ IO.ANSI.format([
|
|
|
+ :red,
|
|
|
+ "Some applications are missing from `emqx_machine_boot:sorted_reboot_apps/0`!\n",
|
|
|
+ "Missing applications:\n",
|
|
|
+ Enum.map(missing_reboot_apps, fn app ->
|
|
|
+ " * #{app}\n"
|
|
|
+ end),
|
|
|
+ "\n",
|
|
|
+ :green,
|
|
|
+ "Hint: maybe add them to `emqx_machine_boot:basic_reboot_apps_edition/1`\n",
|
|
|
+ "\n",
|
|
|
+ :yellow,
|
|
|
+ "Applications that call `mria:create_table` need to be added to that list;\n",
|
|
|
+ " otherwise, when a node joins a cluster, it might lose tables.\n"
|
|
|
+ ])
|
|
|
+ )
|
|
|
+end
|