I couldn't find it in the docs (or, more probably, I missed it), so I presume these are the steps:
Copy existing Erlang application (or create a new one with rebar3 new app
) into <umbrella_root>/apps/
(or <umbrella_root>/libs/
Add the new app to the relx
section in <umbrella_root>/rebar.config
:
{ relx
, [ {release
, { your_big_project_name, "0.1.0" }
, [ your_big_project_name_or_smth_else
, the_newly_copied_app
% , sasl
]
}
, {sys_config, "./config/sys.config"}
, {vm_args, "./config/vm.args"}
, {dev_mode, true}
, {include_erts, false}
, {extended_start_script, true}
]
}.
Add the new app's required configuration environment variables to <umbrella_root>/config/sys.config
.
If the new app uses a plugin, configure it in <umbrella_root>/apps/<new_app>/rebar.config
.
Am I close? If yes, does that mean that umbrella applications can be nested? (This should probably be a separate question).
Yes, that should be it all you need to include an app file in a release.
Regarding nested umbrella applications, please have a look at the following thread in rebar3's site
EDIT:
The linked thread talks about having umbrella apps as dependencies, which is not supported by rebar3. Quote:
Umbrella applications of that form are just not supported as dependencies. Handling versioning and locking for a single dependencies that contains multiple apps is not a thing we ever figured out, so it's just not doable.
That does not mean that you cannot use some tricks, like using git submodules and multiple project_app_dirs configured in the root. For rebar3 those apps will be local apps, you'll need to handle them from 'outside' rebar3, though (not really 'nested' umbrella applications).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With