Skip to content

Commit

Permalink
include vm.args or vm.args.src by default if they exist
Browse files Browse the repository at this point in the history
  • Loading branch information
tsloughter committed Dec 1, 2020
1 parent f07d4f8 commit b7fcfec
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 6 deletions.
35 changes: 30 additions & 5 deletions src/rlx_assemble.erl
Expand Up @@ -472,17 +472,42 @@ generate_start_erl_data_file(Release, ReleasesDir) ->
%% @doc copy vm.args or generate one to releases/VSN/vm.args
-spec copy_or_generate_vmargs_file(rlx_state:t(), rlx_release:t(), file:name()) -> ok.
copy_or_generate_vmargs_file(State, Release, RelDir) ->
RootDir = rlx_state:root_dir(State),

%% default paths to check for the args file
DefaultVmArgsSrcPath = filename:join([RootDir, "config", "vm.args.src"]),
DefaultVmArgsPath = filename:join([RootDir, "config", "vm.args"]),

%% paths to copy to in the release
RelVmargsPath = filename:join([RelDir, "vm.args"]),
RelVmargsSrcPath = filename:join([RelDir, "vm.args.src"]),
case rlx_state:vm_args_src(State) of

VmArgsSrc = rlx_state:vm_args_src(State),
VmArgs = rlx_state:vm_args(State),

case VmArgsSrc of
undefined ->
case rlx_state:vm_args(State) of
case VmArgs of
false ->
%% when vm_args_src is not set and vm_args is false, do nothing
ok;
undefined ->
RelName = erlang:atom_to_list(rlx_release:name(Release)),
unless_exists_write_default(RelVmargsPath, vm_args_file(RelName));
%% if neither is defined but the files exist at the default paths, include those
case filelib:is_regular(DefaultVmArgsSrcPath) of
false ->
case filelib:is_regular(DefaultVmArgsPath) of
false ->
%% if neither is defined and neither exists then create a default vm.args
RelName = erlang:atom_to_list(rlx_release:name(Release)),
unless_exists_write_default(RelVmargsPath, vm_args_file(RelName));
true ->
copy_or_symlink_config_file(State, DefaultVmArgsPath, RelVmargsPath)
end;
true ->
copy_or_symlink_config_file(State, DefaultVmArgsSrcPath, RelVmargsSrcPath)
end;
ArgsPath ->
%% include the vm_args file if it exists
case filelib:is_regular(ArgsPath) of
false ->
erlang:error(?RLX_ERROR({vmargs_does_not_exist, ArgsPath}));
Expand All @@ -492,7 +517,7 @@ copy_or_generate_vmargs_file(State, Release, RelDir) ->
end;
ArgsSrcPath ->
%% print a warning if vm_args is also set
case rlx_state:vm_args(State) of
case VmArgs of
undefined ->
ok;
_->
Expand Down
12 changes: 12 additions & 0 deletions src/rlx_config.erl
Expand Up @@ -86,14 +86,26 @@ load({release, {RelName, Vsn}, Applications, Config}, {ok, State0}) ->
{ok, rlx_state:add_configured_release(State0, Release2)};
load({vm_args, false}, {ok, State}) ->
{ok, rlx_state:vm_args(State, false)};
load({vm_args, undefined}, {ok, State}) ->
{ok, rlx_state:vm_args(State, undefined)};
load({vm_args, VmArgs}, {ok, State}) ->
{ok, rlx_state:vm_args(State, filename:absname(VmArgs))};
load({vm_args_src, false}, {ok, State}) ->
{ok, rlx_state:vm_args_src(State, false)};
load({vm_args_src, undefined}, {ok, State}) ->
{ok, rlx_state:vm_args_src(State, undefined)};
load({vm_args_src, VmArgs}, {ok, State}) ->
{ok, rlx_state:vm_args_src(State, filename:absname(VmArgs))};
load({sys_config, false}, {ok, State}) ->
{ok, rlx_state:sys_config(State, false)};
load({sys_config, undefined}, {ok, State}) ->
{ok, rlx_state:sys_config(State, undefined)};
load({sys_config, SysConfig}, {ok, State}) ->
{ok, rlx_state:sys_config(State, filename:absname(SysConfig))};
load({sys_config_src, false}, {ok, State}) ->
{ok, rlx_state:sys_config_src(State, false)};
load({sys_config_src, undefined}, {ok, State}) ->
{ok, rlx_state:sys_config_src(State, undefined)};
load({sys_config_src, SysConfigSrc}, {ok, State}) ->
{ok, rlx_state:sys_config_src(State, filename:absname(SysConfigSrc))};
load({root_dir, Root}, {ok, State}) ->
Expand Down
73 changes: 72 additions & 1 deletion test/rlx_release_SUITE.erl
Expand Up @@ -37,7 +37,8 @@ groups() ->
[make_release, make_config_release, make_release_semver, overlay_release,
make_extend_release, make_extend_release_versioned, make_extend_config_release,
make_scriptless_release, make_app_type_none_release, include_powershell,
include_unix_powershell_win32,
include_unix_powershell_win32, make_release_with_default_sys_config_vm_args_src,
make_release_with_default_sys_config_vm_args,
make_not_included_nodetool_release, make_src_release, make_excluded_src_release,
make_exclude_modules_release, make_release_with_sys_config_vm_args_src,
make_exclude_app_release, make_overridden_release, make_goalless_release,
Expand Down Expand Up @@ -983,6 +984,76 @@ make_release_with_sys_config_vm_args_src(Config) ->
"vm.args"])))
end.

make_release_with_default_sys_config_vm_args_src(Config) ->
LibDir1 = ?config(lib_dir, Config),
OutputDir = ?config(out_dir, Config),
RootDir = filename:join(LibDir1, "make_release_with_default_sys_config_vm_args_src"),

%% the .src versions should take precedence and the others are not copied
SysConfig = filename:join([RootDir, "config", "sys.config"]),
rlx_test_utils:write_config(SysConfig, [{this_is_a_test, "yup it is"}]),

SysConfigSrc = filename:join([RootDir, "config", "sys.config.src"]),
rlx_test_utils:write_config(SysConfigSrc, [{this_is_a_test, "yup it is"}]),

VmArgs = filename:join([RootDir, "config", "vm.args"]),
rlx_file_utils:write(VmArgs, ""),

VmArgsSrc = filename:join([RootDir, "config", "vm.args.src"]),
rlx_file_utils:write(VmArgsSrc, ""),

RelxConfig = [{dev_mode, false},
{release, {foo, "0.0.1"},
[goal_app_1,
goal_app_2]},
{check_for_undefined_functions, false}],

{ok, State} = relx:build_release(foo, [{root_dir, RootDir}, {lib_dirs, [LibDir1]},
{output_dir, OutputDir} | RelxConfig]),

[{{foo, "0.0.1"}, _Release}] = maps:to_list(rlx_state:realized_releases(State)),

?assert(filelib:is_file(filename:join([OutputDir, "foo", "releases", "0.0.1",
"sys.config.src"]))),
?assert(filelib:is_file(filename:join([OutputDir, "foo", "releases", "0.0.1",
"vm.args.src"]))),

%% check that sys.config and vm.args don't exist because .src was used instead
?assert(not filelib:is_file(filename:join([OutputDir, "foo", "releases", "0.0.1",
"sys.config"]))),
?assert(not filelib:is_file(filename:join([OutputDir, "foo", "releases", "0.0.1",
"vm.args"]))),
ok.

make_release_with_default_sys_config_vm_args(Config) ->
LibDir1 = ?config(lib_dir, Config),
OutputDir = ?config(out_dir, Config),
RootDir = filename:join(LibDir1, "make_release_with_default_sys_config_vm_args"),

%% no .src versions of the files means these get used
SysConfig = filename:join([RootDir, "config", "sys.config"]),
rlx_test_utils:write_config(SysConfig, [{this_is_a_test, "yup it is"}]),

VmArgs = filename:join([RootDir, "config", "vm.args"]),
rlx_file_utils:write(VmArgs, ""),

RelxConfig = [{mode, prod},
{release, {foo, "0.0.1"},
[goal_app_1,
goal_app_2]},
{check_for_undefined_functions, false}],

{ok, State} = relx:build_release(foo, [{root_dir, RootDir}, {lib_dirs, [LibDir1]},
{output_dir, OutputDir} | RelxConfig]),

[{{foo, "0.0.1"}, _Release}] = maps:to_list(rlx_state:realized_releases(State)),

?assert(filelib:is_file(filename:join([OutputDir, "foo", "releases", "0.0.1",
"sys.config"]))),
?assert(filelib:is_file(filename:join([OutputDir, "foo", "releases", "0.0.1",
"vm.args"]))),
ok.

make_prod_mode_release(Config) ->
LibDir1 = proplists:get_value(lib_dir, Config),
OutputDir = ?config(out_dir, Config),
Expand Down

0 comments on commit b7fcfec

Please sign in to comment.