Browse Source

Merge pull request #2155 from g-andrade/feature/profile-string-overlay-var

Support `profile_string` overlay var in releases
pull/2167/head
Fred Hebert 5 years ago
committed by GitHub
parent
commit
8cdf023455
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 39 additions and 14 deletions
  1. +1
    -0
      THANKS
  2. +26
    -10
      src/rebar_dir.erl
  3. +8
    -2
      src/rebar_relx.erl
  4. +4
    -2
      test/rebar_release_SUITE.erl

+ 1
- 0
THANKS View File

@ -143,3 +143,4 @@ Drew Varner
Niklas Johansson
Bryan Paxton
Justin Wood
Guilherme Andrade

+ 26
- 10
src/rebar_dir.erl View File

@ -3,6 +3,7 @@
-export([base_dir/1,
profile_dir/2,
profile_dir_name/1,
deps_dir/1,
deps_dir/2,
root_dir/1,
@ -39,18 +40,33 @@ base_dir(State) ->
%% @doc returns the directory root for build artifacts for a given set
%% of profiles.
-spec profile_dir(rebar_dict(), [atom()]) -> file:filename_all().
-spec profile_dir(rebar_dict(), [atom(), ...]) -> file:filename_all().
profile_dir(Opts, Profiles) ->
{BaseDir, ProfilesStrings} = case [rebar_utils:to_list(P) || P <- Profiles] of
["global" | _] -> {?MODULE:global_cache_dir(Opts), [""]};
["bootstrap", "default"] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), ["default"]};
["default"] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), ["default"]};
%% drop `default` from the profile dir if it's implicit and reverse order
BasePath =
case Profiles of
[global | _] -> ?MODULE:global_cache_dir(Opts);
[_|_] -> rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR)
end,
DirName = profile_dir_name_(Profiles),
filename:join(BasePath, DirName).
%% @doc returns the directory name for build artifacts for a given set
%% of profiles.
-spec profile_dir_name(rebar_state:t()) -> file:filename_all().
profile_dir_name(State) ->
profile_dir_name_(rebar_state:current_profiles(State)).
-spec profile_dir_name_([atom(), ...]) -> file:filename_all().
profile_dir_name_(Profiles)
when is_list(Profiles) ->
case [rebar_utils:to_list(P) || P <- Profiles] of
["global" | _] -> "";
["bootstrap", "default"] -> "default";
["default"] -> "default";
%% drop `default' from the profile dir if it's implicit and reverse order
%% of profiles to match order passed to `as`
["default"|Rest] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), Rest}
end,
ProfilesDir = rebar_string:join(ProfilesStrings, "+"),
filename:join(BaseDir, ProfilesDir).
["default"|NonDefaultNames] -> rebar_string:join(NonDefaultNames, "+")
end.
%% @doc returns the directory where dependencies should be placed
%% given the current profile.

+ 8
- 2
src/rebar_relx.erl View File

@ -27,10 +27,12 @@ do(Module, Command, Provider, State) ->
LibDirs = rebar_utils:filtermap(fun ec_file:exists/1,
[rebar_dir:checkouts_dir(State), DepsDir | ProjectAppDirs]),
OutputDir = filename:join(rebar_dir:base_dir(State), ?DEFAULT_RELEASE_DIR),
ProfileString = rebar_dir:profile_dir_name(State),
AllOptions = rebar_string:join([Command | Options], " "),
Cwd = rebar_state:dir(State),
Providers = rebar_state:providers(State),
RebarOpts = rebar_state:opts(State),
ExtraOverlays = [{profile_string, ProfileString}],
ErlOpts = rebar_opts:erl_opts(RebarOpts),
rebar_hooks:run_project_and_app_hooks(Cwd, pre, Provider, Providers, State),
try
@ -38,14 +40,18 @@ do(Module, Command, Provider, State) ->
[] ->
relx:main([{lib_dirs, LibDirs}
,{caller, api}
,{log_level, LogLevel} | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions);
,{log_level, LogLevel}
,{api_caller_overlays, ExtraOverlays}
| output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions);
Config ->
Config1 = [{overlay_vars, [{base_dir, rebar_dir:base_dir(State)}]}
| merge_overlays(Config)],
relx:main([{lib_dirs, LibDirs}
,{config, Config1}
,{caller, api}
,{log_level, LogLevel} | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions)
,{log_level, LogLevel}
,{api_caller_overlays, ExtraOverlays}
| output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions)
end,
rebar_hooks:run_project_and_app_hooks(Cwd, post, Provider, Providers, State),
{ok, State}

+ 4
- 2
test/rebar_release_SUITE.erl View File

@ -301,7 +301,8 @@ overlay_vars(Config) ->
{var_bin_string, {{{var_bin_string}}}},
{var_tuple, {{{var_tuple}}}},
{var_list, {{{var_list}}}},
{var_bin, {{{var_bin}}}}]],
{var_bin, {{{var_bin}}}},
{var_profile_string, {{profile_string}}}]], % this comes from `rebar3'
rebar_test_utils:create_config(AppDir,
filename:join([AppDir, "config", "app.config"]),
AppConfig),
@ -318,6 +319,7 @@ overlay_vars(Config) ->
{var_bin_string, <<"test">>},
{var_tuple, {t, ['atom']}},
{var_list, [a, b, c, 'd']},
{var_bin, <<23, 24, 25>>}],
{var_bin, <<23, 24, 25>>},
{var_profile_string, 'default'}],
{ok, [ExpectedSysconfig]} = file:consult(filename:join([AppDir, "_build/default/rel",
Name, "releases", Vsn, "sys.config"])).

Loading…
Cancel
Save