refactor: reuse overlay dsl in application
This commit is contained in:
parent
6a4b437446
commit
783a10c5a1
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue