diff options
author | Badlop <badlop@process-one.net> | 2021-07-15 21:25:01 +0200 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2021-07-16 13:36:19 +0200 |
commit | 8ca12d4d23854596942035a7497a827800d02294 (patch) | |
tree | 7d50867c06b126d3b73a89689d2536859e25bd0f /mix.exs | |
parent | Get ejabberd version from vars.config (diff) |
Add support to build release with mix
Diffstat (limited to 'mix.exs')
-rw-r--r-- | mix.exs | 75 |
1 files changed, 75 insertions, 0 deletions
@@ -13,6 +13,7 @@ defmodule Ejabberd.Mixfile do erlc_paths: ["asn1", "src"], # Elixir tests are starting the part of ejabberd they need aliases: [test: "test --no-start"], + releases: releases(), package: package(), deps: deps()] end @@ -180,6 +181,80 @@ defmodule Ejabberd.Mixfile do end end + defp releases do + maybe_tar = case Mix.env() do + :prod -> [:tar] + _ -> [] + end + [ + ejabberd: [ + include_executables_for: [:unix], + # applications: [runtime_tools: :permanent] + steps: [©_extra_files/1, :assemble | maybe_tar] + ] + ] + end + + defp copy_extra_files(release) do + assigns = [ + version: version(), + rootdir: config(:rootdir), + installuser: config(:installuser), + libdir: config(:libdir), + sysconfdir: config(:sysconfdir), + localstatedir: config(:localstatedir), + docdir: config(:docdir), + erl: config(:erl), + epmd: config(:epmd), + bindir: Path.join([config(:release_dir), "releases", version()]), + release_dir: config(:release_dir), + erts_vsn: "erts-#{release.erts_version}" + ] + ro = "rel/overlays" + File.rm_rf(ro) + + System.shell("sed -e 's|{{\\(\[_a-z\]*\\)}}|<%= @\\1 %>|g' ejabberdctl.template > ejabberdctl.example1") + Mix.Generator.copy_template("ejabberdctl.example1", "ejabberdctl.example2", assigns) + System.shell("sed -e 's|{{\\(\[_a-z\]*\\)}}|<%= @\\1 %>|g' ejabberdctl.example2 > ejabberdctl.example3") + System.shell("sed -e 's|ERLANG_NODE=ejabberd@localhost|ERLANG_NODE=ejabberd|g' ejabberdctl.example3 > ejabberdctl.example4") + System.shell("sed -e 's|INSTALLUSER=|ERL_OPTIONS=\"-setcookie \\$\\(cat \"\\${SCRIPT_DIR%/*}/releases/COOKIE\")\"\\nINSTALLUSER=|g' ejabberdctl.example4 > ejabberdctl.example5") + Mix.Generator.copy_template("ejabberdctl.example5", "#{ro}/bin/ejabberdctl", assigns) + File.chmod("#{ro}/bin/ejabberdctl", 0o755) + + File.rm("ejabberdctl.example1") + File.rm("ejabberdctl.example2") + File.rm("ejabberdctl.example3") + File.rm("ejabberdctl.example4") + File.rm("ejabberdctl.example5") + + suffix = case Mix.env() do + :dev -> + Mix.Generator.copy_file("test/ejabberd_SUITE_data/ca.pem", "#{ro}/etc/ejabberd/ca.pem") + Mix.Generator.copy_file("test/ejabberd_SUITE_data/cert.pem", "#{ro}/etc/ejabberd/cert.pem") + ".example" + _ -> "" + end + + Mix.Generator.copy_file("ejabberd.yml.example", "#{ro}/etc/ejabberd/ejabberd.yml#{suffix}") + Mix.Generator.copy_file("ejabberdctl.cfg.example", "#{ro}/etc/ejabberd/ejabberdctl.cfg#{suffix}") + Mix.Generator.copy_file("inetrc", "#{ro}/etc/ejabberd/inetrc") + Mix.Generator.copy_template("rel/vm.args.mix", "#{ro}/etc/ejabberd/vm.args", assigns) + + Enum.each(File.ls!("sql"), + fn x -> + Mix.Generator.copy_file("sql/#{x}", "#{ro}/lib/ejabberd-#{release.version}/priv/sql/#{x}") + end) + + Mix.Generator.create_directory("#{ro}/var/lib/ejabberd") + + case Mix.env() do + :dev -> System.shell("REL_DIR_TEMP=$PWD/rel/overlays/ rel/setup-dev.sh") + _ -> :ok + end + + release + end + end defmodule Mix.Tasks.Compile.Asn1 do |