Skip to content

Umbrella projects

Umbrella projects are not much different than regular projects with Distillery, but there are a few small difference worth noting.

The release configuration generated by Distillery under an umbrella project will create a default release definition which includes all of the applications in the umbrella (which were present at the time you ran mix distillery.init). If you passed the --release-per-app flag, it will generate a separate release definition for each application.

This default behavior is not always desirable, instead you may want to construct two releases, with different sets of applications in the umbrella, say for a web frontend, and a processing backend. In this case, you need to modify rel/config.exs with a release definition for each release you want.

Extending the example I gave above, using apps named :web, :processing, and :metrics, you may want two releases, one called :frontend, and one called :backend, which contain the relevant application, as well as the standalone :metrics application for monitoring the performance of each node. This would look like the following in rel/config.exs:

1
2
3
4
5
6
7
8
9
release :frontend do
  set version: current_version(:web)
  set applications: [:web, :metrics]
end

release :backend do
  set version: current_version(:processing)
  set applications: [:processing, :metrics]
end

That’s all there is to it! You can define many different releases, with arbitrary combinations of applications as you see fit. To build a named release use mix distillery.release --name=<release_name>.