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
|
start_type :load
|
||||||
end
|
end
|
||||||
|
|
||||||
|
application :emqx_limiter do
|
||||||
|
start_type :permanent
|
||||||
|
end
|
||||||
|
|
||||||
application :emqx_prometheus, %{release_type: :cloud} do
|
application :emqx_prometheus, %{release_type: :cloud} do
|
||||||
start_type :load
|
start_type :load
|
||||||
end
|
end
|
||||||
|
@ -120,25 +124,11 @@ defmodule EmqxReleaseHelper.Applications do
|
||||||
start_type :load
|
start_type :load
|
||||||
end
|
end
|
||||||
|
|
||||||
|
application :lc do
|
||||||
|
start_type :load
|
||||||
|
end
|
||||||
|
|
||||||
application :xmerl, %{release_type: :cloud} do
|
application :xmerl, %{release_type: :cloud} do
|
||||||
start_type :permanent
|
start_type :permanent
|
||||||
end
|
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
|
end
|
||||||
|
|
|
@ -2,8 +2,15 @@ defmodule EmqxReleaseHelper.DSL.Application do
|
||||||
defmacro __using__(_) do
|
defmacro __using__(_) do
|
||||||
quote do
|
quote do
|
||||||
import unquote(__MODULE__)
|
import unquote(__MODULE__)
|
||||||
|
import EmqxReleaseHelper.DSL.Overlay, only: [
|
||||||
|
overlay: 1,
|
||||||
|
overlay: 2,
|
||||||
|
copy: 2,
|
||||||
|
template: 2
|
||||||
|
]
|
||||||
Module.register_attribute(__MODULE__, :applications, accumulate: true)
|
Module.register_attribute(__MODULE__, :applications, accumulate: true)
|
||||||
@before_compile unquote(__MODULE__)
|
@before_compile unquote(__MODULE__)
|
||||||
|
@overlay_source_path :app_source_path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -44,80 +51,6 @@ defmodule EmqxReleaseHelper.DSL.Application do
|
||||||
end
|
end
|
||||||
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
|
defmacro __before_compile__(%Macro.Env{module: module}) do
|
||||||
block =
|
block =
|
||||||
module
|
module
|
||||||
|
@ -127,6 +60,24 @@ defmodule EmqxReleaseHelper.DSL.Application do
|
||||||
|
|
||||||
quote do
|
quote do
|
||||||
def __all__, do: unquote(block)
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,8 +2,9 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
defmacro __using__(_) do
|
defmacro __using__(_) do
|
||||||
quote do
|
quote do
|
||||||
import unquote(__MODULE__)
|
import unquote(__MODULE__)
|
||||||
Module.register_attribute(__MODULE__, :overlays, accumulate: true)
|
|
||||||
@before_compile unquote(__MODULE__)
|
@before_compile unquote(__MODULE__)
|
||||||
|
@overlays []
|
||||||
|
@overlay_source_path :project_path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,7 +19,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
)
|
)
|
||||||
|
|
||||||
quote do
|
quote do
|
||||||
@overlays unquote(block)
|
@overlays [unquote(block) | @overlays]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -33,7 +34,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
)
|
)
|
||||||
|
|
||||||
quote do
|
quote do
|
||||||
@overlays unquote(block)
|
@overlays [unquote(block) | @overlays]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -54,7 +55,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
from_path =
|
from_path =
|
||||||
quote do
|
quote do
|
||||||
unquote(Macro.var(:config, nil))
|
unquote(Macro.var(:config, nil))
|
||||||
|> Map.get(:project_path)
|
|> Map.get(@overlay_source_path)
|
||||||
|> Path.join(unquote(from_path))
|
|> Path.join(unquote(from_path))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
end
|
end
|
||||||
|
|
||||||
quote do
|
quote do
|
||||||
run_copy(unquote(from_path), unquote(to_path))
|
unquote(__MODULE__).run_copy(unquote(from_path), unquote(to_path))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
from_path =
|
from_path =
|
||||||
quote do
|
quote do
|
||||||
unquote(Macro.var(:config, nil))
|
unquote(Macro.var(:config, nil))
|
||||||
|> Map.get(:project_path)
|
|> Map.get(@overlay_source_path)
|
||||||
|> Path.join(unquote(from_path))
|
|> Path.join(unquote(from_path))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
end
|
end
|
||||||
|
|
||||||
quote do
|
quote do
|
||||||
run_template(
|
unquote(__MODULE__).run_template(
|
||||||
unquote(from_path),
|
unquote(from_path),
|
||||||
unquote(to_path),
|
unquote(to_path),
|
||||||
unquote(Macro.var(:config, nil))
|
unquote(Macro.var(:config, nil))
|
||||||
|
@ -122,8 +123,9 @@ defmodule EmqxReleaseHelper.DSL.Overlay do
|
||||||
|> Enum.reverse()
|
|> Enum.reverse()
|
||||||
|
|
||||||
quote do
|
quote do
|
||||||
def __overlays__ do
|
def run(release, config) do
|
||||||
unquote(block)
|
Enum.each(unquote(block), fn overlay -> overlay.(config) end)
|
||||||
|
release
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,9 +18,4 @@ defmodule EmqxReleaseHelper.Overlay do
|
||||||
template "data/emqx_vars", "releases/emqx_vars"
|
template "data/emqx_vars", "releases/emqx_vars"
|
||||||
template "data/BUILT_ON", "releases/#{release_version}/BUILT_ON"
|
template "data/BUILT_ON", "releases/#{release_version}/BUILT_ON"
|
||||||
end
|
end
|
||||||
|
|
||||||
def run(release, config) do
|
|
||||||
Enum.each(__overlays__(), fn overlay -> overlay.(config) end)
|
|
||||||
release
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue