aboutsummaryrefslogtreecommitdiffstats
path: root/overview/index.md
blob: 66e1a5f02e7800456d479ab9dad9c66d1ef73467 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
---
layout: default
title: Relx Overview
---

Overview
========

Relx is a tool that, given a specification, assembles
releases. That is it makes an assessment of all of the Erlang/OTP Apps
available to it and the constraints that you supply as part of your
configuration and resolves a complete set of OTP Applications and
thier versions for use in the release. This may be a bit hard to
understand if you are not familiar with the way version resolutions
work in package management systems. So lets look at an example.

Lets say that you have the following OTP Applications

     app1-1.2
      with dependencies
        app2
        app5
        app6
    app1-1.3
     with dependencies
       app2
       app6
    app2-2.0
     with dependencies
       app6
    app2-2.1
     with dependencies
       app6
       app7
    app3-2.0
    app4-1.0.0
    app5-3.0
    app6-1.0
     with dependencies
       app3
    app7-2.0

This is the world of OTP Apps your Relx knows about (basically OTP
Apps in the Library Directories you have specified). You have set a
config that looks like the following:

     {release, {awesome_supercool, "1.0"},
        [{app1, "1.3", '>='},
         {app2, "2.0", '>'},
         app3]}

When the Relx process has run you will end up with a complete
release as follows

    {release, {awesome_supercool, "1.0"},
      [{app1, "1.3"},
       {app2, "2.1"},
       {app3, "2.0"},
       {app6, "1.0"},
       {app7, "2.0"}]}

As you can see that is a fully realied view of your direct and
transative dependencies based on the world that Relx knows about
and the constraints that you specified in your configuration.