aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.cirrus.yml2
-rw-r--r--src/rlx_config.erl56
-rw-r--r--test/rlx_archive_SUITE.erl2
-rw-r--r--test/rlx_command_SUITE.erl2
-rw-r--r--test/rlx_discover_SUITE.erl2
-rw-r--r--test/rlx_eunit_SUITE.erl2
-rw-r--r--test/rlx_extended_bin_SUITE.erl2
-rw-r--r--test/rlx_release_SUITE.erl39
8 files changed, 79 insertions, 28 deletions
diff --git a/.cirrus.yml b/.cirrus.yml
index 8e693dd..4ca365a 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -1,5 +1,5 @@
test_task:
- use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true'
+ use_compute_credits: true
container:
matrix:
- image: erlang:22
diff --git a/src/rlx_config.erl b/src/rlx_config.erl
index 90cfe7c..9eafb7d 100644
--- a/src/rlx_config.erl
+++ b/src/rlx_config.erl
@@ -191,31 +191,20 @@ load_terms({upfrom, UpFrom}, {ok, State0}) ->
{ok, rlx_state:upfrom(State0, UpFrom)};
load_terms({include_src, IncludeSrc}, {ok, State0}) ->
{ok, rlx_state:include_src(State0, IncludeSrc)};
+load_terms({release, {RelName, Vsn, {extend, {RelName2, Vsn2}}}, Applications}, {ok, State0}) ->
+ NewVsn = parse_vsn(Vsn),
+ NewVsn2 = parse_vsn(Vsn2),
+ add_extended_release(RelName, NewVsn, RelName2, NewVsn2, Applications, State0);
load_terms({release, {RelName, Vsn, {extend, RelName2}}, Applications}, {ok, State0}) ->
NewVsn = parse_vsn(Vsn),
- Release0 = rlx_release:new(RelName, NewVsn),
- ExtendRelease = rlx_state:get_configured_release(State0, RelName2, NewVsn),
- Applications1 = rlx_release:goals(ExtendRelease),
- case rlx_release:goals(Release0,
- rlx_release:merge_application_goals(Applications, Applications1)) of
- E={error, _} ->
- E;
- {ok, Release1} ->
- {ok, rlx_state:add_configured_release(State0, Release1)}
- end;
+ add_extended_release(RelName, NewVsn, RelName2, NewVsn, Applications, State0);
+load_terms({release, {RelName, Vsn, {extend, {RelName2, Vsn2}}}, Applications, Config}, {ok, State0}) ->
+ NewVsn = parse_vsn(Vsn),
+ NewVsn2 = parse_vsn(Vsn2),
+ add_extended_release(RelName, NewVsn, RelName2, NewVsn2, Applications, Config, State0);
load_terms({release, {RelName, Vsn, {extend, RelName2}}, Applications, Config}, {ok, State0}) ->
NewVsn = parse_vsn(Vsn),
- Release0 = rlx_release:new(RelName, NewVsn),
- ExtendRelease = rlx_state:get_configured_release(State0, RelName2, NewVsn),
- Applications1 = rlx_release:goals(ExtendRelease),
- case rlx_release:goals(Release0,
- rlx_release:merge_application_goals(Applications, Applications1)) of
- E={error, _} ->
- E;
- {ok, Release1} ->
- Release2 = rlx_release:config(Release1, Config),
- {ok, rlx_state:add_configured_release(State0, Release2)}
- end;
+ add_extended_release(RelName, NewVsn, RelName2, NewVsn, Applications, Config, State0);
load_terms({release, {RelName, Vsn}, {erts, ErtsVsn}, Applications}, {ok, State}) ->
NewVsn = parse_vsn(Vsn),
Release0 = rlx_release:erts(rlx_release:new(RelName, NewVsn), ErtsVsn),
@@ -414,3 +403,28 @@ git_ref(Arg) ->
{plain, "0"}
end
end.
+
+add_extended_release(RelName, NewVsn, RelName2, NewVsn2, Applications, State0) ->
+ Release0 = rlx_release:new(RelName, NewVsn),
+ ExtendRelease = rlx_state:get_configured_release(State0, RelName2, NewVsn2),
+ Applications1 = rlx_release:goals(ExtendRelease),
+ case rlx_release:goals(Release0,
+ rlx_release:merge_application_goals(Applications, Applications1)) of
+ E={error, _} ->
+ E;
+ {ok, Release1} ->
+ {ok, rlx_state:add_configured_release(State0, Release1)}
+ end.
+
+add_extended_release(RelName, NewVsn, RelName2, NewVsn2, Applications, Config, State0) ->
+ Release0 = rlx_release:new(RelName, NewVsn),
+ ExtendRelease = rlx_state:get_configured_release(State0, RelName2, NewVsn2),
+ Applications1 = rlx_release:goals(ExtendRelease),
+ case rlx_release:goals(Release0,
+ rlx_release:merge_application_goals(Applications, Applications1)) of
+ E={error, _} ->
+ E;
+ {ok, Release1} ->
+ Release2 = rlx_release:config(Release1, Config),
+ {ok, rlx_state:add_configured_release(State0, Release2)}
+ end.
diff --git a/test/rlx_archive_SUITE.erl b/test/rlx_archive_SUITE.erl
index 8d30915..705950f 100644
--- a/test/rlx_archive_SUITE.erl
+++ b/test/rlx_archive_SUITE.erl
@@ -18,7 +18,7 @@
-include_lib("kernel/include/file.hrl").
suite() ->
- [{timetrap, {seconds, 120}}].
+ [].
init_per_suite(Config) ->
Config.
diff --git a/test/rlx_command_SUITE.erl b/test/rlx_command_SUITE.erl
index 8dd2da8..916bdf7 100644
--- a/test/rlx_command_SUITE.erl
+++ b/test/rlx_command_SUITE.erl
@@ -34,7 +34,7 @@
-include_lib("eunit/include/eunit.hrl").
suite() ->
- [{timetrap,{seconds,120}}].
+ [].
init_per_suite(Config) ->
Config.
diff --git a/test/rlx_discover_SUITE.erl b/test/rlx_discover_SUITE.erl
index 9385229..fc81bc2 100644
--- a/test/rlx_discover_SUITE.erl
+++ b/test/rlx_discover_SUITE.erl
@@ -34,7 +34,7 @@
-include_lib("eunit/include/eunit.hrl").
suite() ->
- [{timetrap,{seconds,120}}].
+ [].
init_per_suite(Config) ->
Config.
diff --git a/test/rlx_eunit_SUITE.erl b/test/rlx_eunit_SUITE.erl
index c7c0751..780e409 100644
--- a/test/rlx_eunit_SUITE.erl
+++ b/test/rlx_eunit_SUITE.erl
@@ -30,7 +30,7 @@
-include_lib("eunit/include/eunit.hrl").
suite() ->
- [{timetrap,{seconds,120}}].
+ [].
init_per_suite(Config) ->
Config.
diff --git a/test/rlx_extended_bin_SUITE.erl b/test/rlx_extended_bin_SUITE.erl
index 710d2c4..95680e6 100644
--- a/test/rlx_extended_bin_SUITE.erl
+++ b/test/rlx_extended_bin_SUITE.erl
@@ -66,7 +66,7 @@
-define(SLEEP_TIME, 2500).
suite() ->
- [{timetrap,{seconds,300}}].
+ [].
init_per_suite(Config) ->
Config.
diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl
index a582526..752ce18 100644
--- a/test/rlx_release_SUITE.erl
+++ b/test/rlx_release_SUITE.erl
@@ -31,6 +31,7 @@
make_release/1,
make_config_release/1,
make_extend_release/1,
+ make_extend_release_versioned/1,
make_extend_config_release/1,
make_scriptless_release/1,
make_overridden_release/1,
@@ -67,7 +68,7 @@
-include_lib("kernel/include/file.hrl").
suite() ->
- [{timetrap,{seconds,120}}].
+ [].
init_per_suite(Config) ->
Config.
@@ -87,6 +88,7 @@ init_per_testcase(_, Config) ->
all() ->
[providers, providers_via_api_options, add_providers, add_providers_via_api_options,
make_release, make_config_release, make_extend_release, make_extend_config_release,
+ make_extend_release_versioned,
make_scriptless_release, make_overridden_release, make_auto_skip_empty_app_release,
make_skip_app_release, make_exclude_app_release, make_app_type_none_release,
make_implicit_config_release, make_rerun_overridden_release, overlay_release,
@@ -380,6 +382,41 @@ make_extend_release(Config) ->
?assert(lists:member({goal_app_2, "0.0.1"}, AppSpecs)),
?assert(lists:member({lib_dep_1, "0.0.1", load}, AppSpecs)).
+make_extend_release_versioned(Config) ->
+ LibDir1 = proplists:get_value(lib1, Config),
+
+ rlx_test_utils:create_app(LibDir1, "goal_app_1", "0.0.1", [stdlib,kernel,non_goal_1], []),
+ rlx_test_utils:create_app(LibDir1, "lib_dep_1", "0.0.1", [stdlib,kernel], []),
+ rlx_test_utils:create_app(LibDir1, "goal_app_2", "0.0.1", [stdlib,kernel,goal_app_1,non_goal_2], []),
+ rlx_test_utils:create_app(LibDir1, "non_goal_1", "0.0.1", [stdlib,kernel], [lib_dep_1]),
+ rlx_test_utils:create_app(LibDir1, "non_goal_2", "0.0.1", [stdlib,kernel], []),
+
+ ConfigFile = filename:join([LibDir1, "relx.config"]),
+ rlx_test_utils:write_config(ConfigFile,
+ [{release, {foo, "0.0.2"},
+ [goal_app_1,
+ goal_app_2]},
+ {release, {foo_test, "0.0.3", {extend, {foo, "0.0.2"}}},
+ [goal_app_2]},
+ {lib_dirs, [filename:join(LibDir1, "*")]}]),
+ OutputDir = filename:join([proplists:get_value(priv_dir, Config),
+ rlx_test_utils:create_random_name("relx-output")]),
+
+ ?assertMatch({error, {rlx_prv_release, {multiple_release_names,foo,foo_test}}},
+ catch relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile)),
+
+ {ok, State} = relx:do(foo_test, undefined, [], [LibDir1], 3,
+ OutputDir, ConfigFile),
+ [{{foo_test, "0.0.3"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)),
+ AppSpecs = rlx_release:applications(Release),
+ ?assert(lists:keymember(stdlib, 1, AppSpecs)),
+ ?assert(lists:keymember(kernel, 1, AppSpecs)),
+ ?assert(lists:member({non_goal_1, "0.0.1"}, AppSpecs)),
+ ?assert(lists:member({non_goal_2, "0.0.1"}, AppSpecs)),
+ ?assert(lists:member({goal_app_1, "0.0.1"}, AppSpecs)),
+ ?assert(lists:member({goal_app_2, "0.0.1"}, AppSpecs)),
+ ?assert(lists:member({lib_dep_1, "0.0.1", load}, AppSpecs)).
+
make_extend_config_release(Config) ->
LibDir1 = proplists:get_value(lib1, Config),