diff options
-rw-r--r-- | src/rebar3.erl | 11 | ||||
-rw-r--r-- | src/rebar_prv_release.erl | 7 | ||||
-rw-r--r-- | src/rebar_prv_tar.erl | 9 | ||||
-rw-r--r-- | test/rebar_release_SUITE.erl | 52 | ||||
-rw-r--r-- | test/rebar_test_utils.erl | 24 |
5 files changed, 94 insertions, 9 deletions
diff --git a/src/rebar3.erl b/src/rebar3.erl index e8a9983..bd52fee 100644 --- a/src/rebar3.erl +++ b/src/rebar3.erl @@ -76,7 +76,8 @@ main(Args) -> run(BaseState, Commands) -> _ = application:load(rebar), BaseState1 = rebar_state:set(BaseState, task, Commands), - run_aux(BaseState1, [], Commands). + BaseState2 = rebar_state:set(BaseState1, caller, api), + run_aux(BaseState2, [], Commands). %% ==================================================================== %% Internal functions @@ -84,7 +85,9 @@ run(BaseState, Commands) -> run(RawArgs) -> _ = application:load(rebar), - {GlobalPluginProviders, BaseConfig} = init_config(), + + {GlobalPluginProviders, BaseState} = init_config(), + BaseState1 = rebar_state:set(BaseState, caller, command_line), case erlang:system_info(version) of "6.1" -> @@ -94,8 +97,8 @@ run(RawArgs) -> ok end, - {BaseConfig1, _Args1} = set_options(BaseConfig, {[], []}), - run_aux(BaseConfig1, GlobalPluginProviders, RawArgs). + {BaseState2, _Args1} = set_options(BaseState1, {[], []}), + run_aux(BaseState2, GlobalPluginProviders, RawArgs). run_aux(State, GlobalPluginProviders, RawArgs) -> %% Make sure crypto is running diff --git a/src/rebar_prv_release.erl b/src/rebar_prv_release.erl index 29e1dc2..f2098fb 100644 --- a/src/rebar_prv_release.erl +++ b/src/rebar_prv_release.erl @@ -32,6 +32,7 @@ init(State) -> -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. do(State) -> + Caller = rebar_state:get(State, caller, api), Options = rebar_state:command_args(State), DepsDir = rebar_dir:deps_dir(State), LibDirs = rebar_utils:filtermap(fun ec_file:exists/1, @@ -42,11 +43,13 @@ do(State) -> case rebar_state:get(State, relx, []) of [] -> relx:main([{lib_dirs, LibDirs} - ,{output_dir, OutputDir}], AllOptions); + ,{output_dir, OutputDir} + ,{caller, Caller}], AllOptions); Config -> relx:main([{lib_dirs, LibDirs} ,{config, Config} - ,{output_dir, OutputDir}], AllOptions) + ,{output_dir, OutputDir} + ,{caller, Caller}], AllOptions) end, {ok, State} catch diff --git a/src/rebar_prv_tar.erl b/src/rebar_prv_tar.erl index 7efa544..87ee4df 100644 --- a/src/rebar_prv_tar.erl +++ b/src/rebar_prv_tar.erl @@ -32,6 +32,7 @@ init(State) -> -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. do(State) -> + Caller = rebar_state:get(State, caller, api), Options = rebar_state:command_args(State), DepsDir = rebar_dir:deps_dir(State), LibDirs = rebar_utils:filtermap(fun ec_file:exists/1, @@ -40,12 +41,14 @@ do(State) -> AllOptions = string:join(["release", "tar" | Options], " "), case rebar_state:get(State, relx, []) of [] -> - relx:main([{lib_dirs, LibDirs - ,{output_dir, OutputDir}}], AllOptions); + relx:main([{lib_dirs, LibDirs} + ,{output_dir, OutputDir} + ,{caller, Caller}], AllOptions); Config -> relx:main([{lib_dirs, LibDirs} ,{config, Config} - ,{output_dir, OutputDir}], AllOptions) + ,{output_dir, OutputDir} + ,{caller, Caller}], AllOptions) end, {ok, State}. diff --git a/test/rebar_release_SUITE.erl b/test/rebar_release_SUITE.erl new file mode 100644 index 0000000..92219a5 --- /dev/null +++ b/test/rebar_release_SUITE.erl @@ -0,0 +1,52 @@ +-module(rebar_release_SUITE). +-compile(export_all). +-include_lib("common_test/include/ct.hrl"). +-include_lib("eunit/include/eunit.hrl"). + +all() -> [release, tar]. + +init_per_testcase(Case, Config0) -> + Config = rebar_test_utils:init_rebar_state(Config0), + Name = rebar_test_utils:create_random_name(atom_to_list(Case)), + AppDir = ?config(apps, Config), + application:load(rebar), + + ok = ec_file:mkdir_p(AppDir), + State = rebar_state:new([{base_dir, filename:join([AppDir, "_build"])}]), + + rebar_test_utils:create_app(AppDir, Name, "1.0.0", [kernel, stdlib]), + [{name, Name}, {apps, AppDir}, {state, State} | Config]. + +end_per_testcase(_, Config) -> + meck:unload(), + Config. + +release(Config) -> + AppDir = ?config(apps, Config), + Name = ?config(name, Config), + Vsn = "1.0.0", + {ok, RebarConfig} = + file:consult(rebar_test_utils:create_config(AppDir, + [{relx, [{release, {list_to_atom(Name), Vsn}, + [list_to_atom(Name)]}, + {lib_dirs, [AppDir]}]}])), + rebar_test_utils:run_and_check( + Config, RebarConfig, + ["release"], + {ok, [{release, list_to_atom(Name), Vsn}]} + ). + +tar(Config) -> + AppDir = ?config(apps, Config), + Name = ?config(name, Config), + Vsn = "1.0.0", + {ok, RebarConfig} = + file:consult(rebar_test_utils:create_config(AppDir, + [{relx, [{release, {list_to_atom(Name), Vsn}, + [list_to_atom(Name)]}, + {lib_dirs, [AppDir]}]}])), + rebar_test_utils:run_and_check( + Config, RebarConfig, + ["tar"], + {ok, [{release, list_to_atom(Name), Vsn}, {tar, Name, Vsn}]} + ). diff --git a/test/rebar_test_utils.erl b/test/rebar_test_utils.erl index 96200a6..73b9903 100644 --- a/test/rebar_test_utils.erl +++ b/test/rebar_test_utils.erl @@ -115,6 +115,7 @@ check_results(AppDir, Expected) -> DepsNames = [{ec_cnv:to_list(rebar_app_info:name(App)), App} || App <- Deps], Checkouts = rebar_app_discover:find_apps([CheckoutsDir], all), CheckoutsNames = [{ec_cnv:to_list(rebar_app_info:name(App)), App} || App <- Checkouts], + lists:foreach( fun({app, Name}) -> ct:pal("Name: ~p", [Name]), @@ -167,6 +168,29 @@ check_results(AppDir, Expected) -> ?assertEqual(iolist_to_binary(Vsn), iolist_to_binary(LockVsn)) end + ; ({release, Name, Vsn}) -> + ct:pal("Release: ~p-~s", [Name, Vsn]), + {ok, Cwd} = file:get_cwd(), + try + file:set_cwd(AppDir), + ReleaseDir = filename:join([AppDir, "_build", "rel"]), + RelxState = rlx_state:new("", [], []), + RelxState1 = rlx_state:base_output_dir(RelxState, ReleaseDir), + {ok, RelxState2} = rlx_prv_app_discover:do(RelxState1), + {ok, RelxState3} = rlx_prv_rel_discover:do(RelxState2), + + %% throws not_found if it doesn't exist + rlx_state:get_realized_release(RelxState3, Name, Vsn) + catch + _ -> + ct:fail(release_not_found) + after + file:set_cwd(Cwd) + end + ; ({tar, Name, Vsn}) -> + ct:pal("Tarball: ~s-~s", [Name, Vsn]), + Tarball = filename:join([AppDir, "_build", "rel", Name, Name++"-"++Vsn++".tar.gz"]), + ?assertNotEqual([], filelib:is_file(Tarball)) end, Expected). write_src_file(Dir, Name) -> |