From 783a10c5a1d3f3fb85ecab30892c7c0903a1727b Mon Sep 17 00:00:00 2001 From: x1001100011 Date: Tue, 19 Oct 2021 23:52:25 -0700 Subject: [PATCH] refactor: reuse overlay dsl in application --- .../lib/emqx_release_helper/applications.ex | 26 ++--- .../emqx_release_helper/dsl/application.ex | 99 +++++-------------- .../lib/emqx_release_helper/dsl/overlay.ex | 20 ++-- .../lib/emqx_release_helper/overlay.ex | 5 - 4 files changed, 44 insertions(+), 106 deletions(-) diff --git a/apps/emqx_release_helper/lib/emqx_release_helper/applications.ex b/apps/emqx_release_helper/lib/emqx_release_helper/applications.ex index d17eb6df8..621f05aca 100644 --- a/apps/emqx_release_helper/lib/emqx_release_helper/applications.ex +++ b/apps/emqx_release_helper/lib/emqx_release_helper/applications.ex @@ -92,6 +92,10 @@ defmodule EmqxReleaseHelper.Applications do start_type :load end + application :emqx_limiter do + start_type :permanent + end + application :emqx_prometheus, %{release_type: :cloud} do start_type :load end @@ -120,25 +124,11 @@ defmodule EmqxReleaseHelper.Applications do start_type :load end + application :lc do + start_type :load + end + application :xmerl, %{release_type: :cloud} do start_type :permanent end - - def run(release, config) do - %{project_path: project_path, apps_paths: apps_paths} = config - - __all__() - |> Enum.filter(fn %{name: name} -> Map.has_key?(apps_paths, name) end) - |> Enum.filter(fn - %{enable?: fun} -> fun.(config) - _ -> true - end) - |> Enum.each(fn %{name: name, overlays: overlays} -> - app_path = Map.get(apps_paths, name) - config = Map.put(config, :app_source_path, Path.join(project_path, app_path)) - Enum.each(overlays, fn overlay -> overlay.(config) end) - end) - - release - end end diff --git a/apps/emqx_release_helper/lib/emqx_release_helper/dsl/application.ex b/apps/emqx_release_helper/lib/emqx_release_helper/dsl/application.ex index 77af841e7..6f5ef3d86 100644 --- a/apps/emqx_release_helper/lib/emqx_release_helper/dsl/application.ex +++ b/apps/emqx_release_helper/lib/emqx_release_helper/dsl/application.ex @@ -2,8 +2,15 @@ defmodule EmqxReleaseHelper.DSL.Application do defmacro __using__(_) do quote do import unquote(__MODULE__) + import EmqxReleaseHelper.DSL.Overlay, only: [ + overlay: 1, + overlay: 2, + copy: 2, + template: 2 + ] Module.register_attribute(__MODULE__, :applications, accumulate: true) @before_compile unquote(__MODULE__) + @overlay_source_path :app_source_path end end @@ -44,80 +51,6 @@ defmodule EmqxReleaseHelper.DSL.Application do end end - defmacro overlay(do: block) do - block = - Macro.escape( - quote do - fn unquote(Macro.var(:config, nil)) -> - unquote(block) - end - end - ) - - quote do - @overlays [unquote(block) | @overlays] - end - end - - defmacro overlay(literal_config, do: block) do - block = - Macro.escape( - quote do - fn unquote(literal_config) = unquote(Macro.var(:config, nil)) -> - unquote(block) - end - end - ) - - quote do - @overlays [unquote(block) | @overlays] - end - end - - defmacro copy(from_path, to_path) do - from_path = - quote do - unquote(Macro.var(:config, nil)) - |> Map.get(:app_source_path) - |> Path.join(unquote(from_path)) - end - - to_path = - quote do - unquote(Macro.var(:config, nil)) - |> Map.get(:release_path) - |> Path.join(unquote(to_path)) - end - - quote do - EmqxReleaseHelper.DSL.Overlay.run_copy(unquote(from_path), unquote(to_path)) - end - end - - defmacro template(from_path, to_path) do - from_path = - quote do - unquote(Macro.var(:config, nil)) - |> Map.get(:app_source_path) - |> Path.join(unquote(from_path)) - end - - to_path = - quote do - unquote(Macro.var(:config, nil)) - |> Map.get(:release_path) - |> Path.join(unquote(to_path)) - end - - quote do - EmqxReleaseHelper.DSL.Overlay.run_template( - unquote(from_path), - unquote(to_path), - unquote(Macro.var(:config, nil)) - ) - end - end - defmacro __before_compile__(%Macro.Env{module: module}) do block = module @@ -127,6 +60,24 @@ defmodule EmqxReleaseHelper.DSL.Application do quote do def __all__, do: unquote(block) + + def run(release, config) do + %{project_path: project_path, apps_paths: apps_paths} = config + + __all__() + |> Enum.filter(fn %{name: name} -> Map.has_key?(apps_paths, name) end) + |> Enum.filter(fn + %{enable?: fun} -> fun.(config) + _ -> true + end) + |> Enum.each(fn %{name: name, overlays: overlays} -> + app_path = Map.get(apps_paths, name) + config = Map.put(config, :app_source_path, Path.join(project_path, app_path)) + Enum.each(overlays, fn overlay -> overlay.(config) end) + end) + + release + end end end end diff --git a/apps/emqx_release_helper/lib/emqx_release_helper/dsl/overlay.ex b/apps/emqx_release_helper/lib/emqx_release_helper/dsl/overlay.ex index 31e724bb8..6017da223 100644 --- a/apps/emqx_release_helper/lib/emqx_release_helper/dsl/overlay.ex +++ b/apps/emqx_release_helper/lib/emqx_release_helper/dsl/overlay.ex @@ -2,8 +2,9 @@ defmodule EmqxReleaseHelper.DSL.Overlay do defmacro __using__(_) do quote do import unquote(__MODULE__) - Module.register_attribute(__MODULE__, :overlays, accumulate: true) @before_compile unquote(__MODULE__) + @overlays [] + @overlay_source_path :project_path end end @@ -18,7 +19,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do ) quote do - @overlays unquote(block) + @overlays [unquote(block) | @overlays] end end @@ -33,7 +34,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do ) quote do - @overlays unquote(block) + @overlays [unquote(block) | @overlays] end end @@ -54,7 +55,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do from_path = quote do unquote(Macro.var(:config, nil)) - |> Map.get(:project_path) + |> Map.get(@overlay_source_path) |> Path.join(unquote(from_path)) end @@ -66,7 +67,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do end quote do - run_copy(unquote(from_path), unquote(to_path)) + unquote(__MODULE__).run_copy(unquote(from_path), unquote(to_path)) end end @@ -74,7 +75,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do from_path = quote do unquote(Macro.var(:config, nil)) - |> Map.get(:project_path) + |> Map.get(@overlay_source_path) |> Path.join(unquote(from_path)) end @@ -86,7 +87,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do end quote do - run_template( + unquote(__MODULE__).run_template( unquote(from_path), unquote(to_path), unquote(Macro.var(:config, nil)) @@ -122,8 +123,9 @@ defmodule EmqxReleaseHelper.DSL.Overlay do |> Enum.reverse() quote do - def __overlays__ do - unquote(block) + def run(release, config) do + Enum.each(unquote(block), fn overlay -> overlay.(config) end) + release end end end diff --git a/apps/emqx_release_helper/lib/emqx_release_helper/overlay.ex b/apps/emqx_release_helper/lib/emqx_release_helper/overlay.ex index 28aff89b0..c9e4e8f3a 100644 --- a/apps/emqx_release_helper/lib/emqx_release_helper/overlay.ex +++ b/apps/emqx_release_helper/lib/emqx_release_helper/overlay.ex @@ -18,9 +18,4 @@ defmodule EmqxReleaseHelper.Overlay do template "data/emqx_vars", "releases/emqx_vars" template "data/BUILT_ON", "releases/#{release_version}/BUILT_ON" end - - def run(release, config) do - Enum.each(__overlays__(), fn overlay -> overlay.(config) end) - release - end end