Current section
Files
Jump to
Current section
Files
lib/conform_exrm.ex
defmodule ReleaseManager.Plugin.Conform do
@name "conform"
@shortdoc "Generates a .conf for your release"
@moduledoc """
Generates a .conf for your release
This plugin ensures that your application has a .schema.exs
and .conf file for setting up configuration via the `conform`
library. This .conf file then offers a simplified interface
for sysadmins and other deployment staff for easily configuring
your release in production.
"""
use ReleaseManager.Plugin
alias ReleaseManager.Config
alias ReleaseManager.Utils
def before_release(%Config{name: app, version: version}) do
relx_conf_path = Utils.rel_file_dest_path("relx.config")
conf_src = Path.join([File.cwd!, "config", "#{app}.conf"])
debug "Conform: Loading schema..."
schema_src = Conform.Schema.schema_path(app)
if File.exists?(schema_src) do
# Define overlays for relx.config
overlays = [{:copy, '#{schema_src}', 'releases/#{version}/#{app}.schema.exs'}]
# generate archive
result = Mix.Task.run("conform.archive", ["#{schema_src}"])
# add archive to the overlays
overlays = case result do
{_, _, []} ->
{:ok, cwd} = File.cwd
arch = "#{cwd}/rel/releases/#{version}/#{app}.schema.ez"
case File.exists?(arch) do
true -> File.rm(arch)
false -> :ok
end
overlays
{_, zip_path, _} ->
[{:copy, '#{zip_path}', 'releases/#{version}/#{app}.schema.ez'}|overlays]
end
overlays = case File.exists?(conf_src) do
true ->
[{:copy, '#{conf_src}', 'releases/#{version}/#{app}.conf'}|overlays]
false ->
overlays
end
# Generate escript for release
debug "Conform: Generating escript.."
escript_path = Mix.Task.run("conform.release")
overlays = [{:copy, '#{escript_path}', 'releases/#{version}/conform'}|overlays]
# Add .conf, .schema.exs, and escript to relx.config as overlays
debug "Conform: Adding overlays to relx.config..."
relx_config = relx_conf_path |> Utils.read_terms
updated = Utils.merge(relx_config, [overlay: overlays])
# Persist relx.config
Utils.write_terms(relx_conf_path, updated)
debug "Conform: Done!"
end
end
def after_release(_), do: nil
def after_package(_), do: nil
def after_cleanup(_), do: nil
end