Packages
exrm
0.10.1
1.0.8
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc8
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc4
1.0.0-rc3
0.19.9
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.8
0.18.7
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.17
0.14.16
0.14.15
0.14.14
0.14.13
0.14.12
0.14.11
0.14.10
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.3
0.14.2
0.14.1
0.14.0
0.12.12
0.12.11
0.12.10
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.1
0.10.0
0.9.2
0.9.1
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.7
Exrm, or Elixir Release Manager, provides mix tasks for building, upgrading, and controlling release packages for your application.
Current section
Files
Jump to
Current section
Files
lib/exrm/plugins/conform.ex
defmodule ReleaseManager.Plugin.Conform do
use ReleaseManager.Plugin
alias ReleaseManager.Config
alias ReleaseManager.Utils
def before_release(%Config{name: app, version: version}) do
{:ok, relx_config} = Utils.rel_dest_path("relx.config")
|> String.to_char_list
|> :file.consult
schema_path = Path.join([File.cwd!, "config", "#{app}.schema.exs"])
conf_path = Path.join([File.cwd!, "config", "#{app}.conf"])
# Ensure config directory exists
Path.join(File.cwd!, "config") |> File.mkdir_p!
debug "Conform: Checking for #{app}.schema.exs..."
# If schema is not found, generate one
unless File.exists?(schema_path) do
warn "Conform: No schema found, generating one at config/#{app}.schema.exs"
Mix.Task.run("conform.new")
end
debug "Conform: Checking for #{app}.conf..."
# If .conf is not found, generate default one
unless File.exists?(conf_path) do
warn "Conform: No .conf found, generating one at config/#{app}.conf"
Mix.Task.run("conform.configure")
end
# Generate escript for release
debug "Conform: Generating escript.."
escript_path = Mix.Task.run("conform.release")
# Add .conf, .schema.exs, and escript to relx.config as overlays
debug "Conform: Adding overlays to relx.config"
updated = Enum.reduce relx_config, [], fn
{:overlay, overlays}, config ->
schema_overlay = {:copy, schema_path |> String.to_char_list, 'releases/#{version}/#{app}.schema.exs'}
conf_overlay = {:copy, conf_path |> String.to_char_list, 'releases/#{version}/#{app}.conf'}
escript_overlay = {:copy, escript_path |> String.to_char_list, 'bin/conform'}
[{:overlay, overlays ++ [schema_overlay, conf_overlay, escript_overlay]} | config]
element, config ->
[element | config]
end
# Persist relx.config
format_str = String.duplicate("~p.\n\n", Enum.count(updated)) |> String.to_char_list
:file.write_file('#{Utils.rel_dest_path("relx.config")}', :io_lib.fwrite(format_str, updated |> Enum.reverse))
info "Conform: Done!"
end
def after_release(_), do: nil
def after_cleanup(_), do: nil
end