diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d0659c34acd826dc173cb96a3e8c344bfc32f7ec..f4e7af8fe0305e854917f156ceb69aa2c4bf39cd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -37,7 +37,7 @@ aws_publish: - /^\d+[.]\d+[.]\d+$/ # Only publish HEAD tagged with semantic version script: - rebar3 edoc - - aws s3 cp doc s3://s3.erlang.ninja/gurka/$CI_BUILD_REF_NAME/ --recursive + - aws s3 cp doc s3://s3.erlang.ninja/tsuru/$CI_BUILD_REF_NAME/ --recursive - rebar3 as production do tar - - aws s3 cp _build/production/rel/gurka/gurka-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/gurka/ - - aws s3 cp s3://s3.erlang.ninja/gurka/gurka-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/gurka/gurka-latest.tar.gz + - aws s3 cp _build/production/rel/tsuru/tsuru-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/tsuru/ + - aws s3 cp s3://s3.erlang.ninja/tsuru/tsuru-$CI_BUILD_REF_NAME.tar.gz s3://s3.erlang.ninja/tsuru/tsuru-latest.tar.gz diff --git a/Makefile b/Makefile index 843e42fd0797895486db4b12a4c8035c968d1032..ecced7c1a5c72599e28fbbdf5f9193688e9617bd 100644 --- a/Makefile +++ b/Makefile @@ -28,3 +28,6 @@ clean: distclean: @rm -rf _build rebar.lock $(REBAR) + +shell: + @$(REBAR) shell diff --git a/src/tsuru_application.erl b/src/tsuru_application.erl new file mode 100644 index 0000000000000000000000000000000000000000..743b8ebe8f7abb78f351d95b3bdb735827d8c66f --- /dev/null +++ b/src/tsuru_application.erl @@ -0,0 +1,31 @@ +-module(tsuru_application). +-author("erikh"). + +%% API +-export([get_os_env/1]). + +get_os_env(Application) -> + Pattern = string:to_upper(atom_to_list(Application)) ++ "_(.+)=(.+)", + get_os_env(Pattern, os:getenv(), erl_eval:new_bindings()). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +get_os_env(_Pattern, [], Bindings) -> + erl_eval:bindings(Bindings); + +get_os_env(Pattern, [Var | Vars], Bindings) -> + case re:run(Var, Pattern) of + {match, [{0, _}, {S1, L1}, {S2, L2}]} -> + Name = list_to_atom(string:to_lower(string:substr(Var, S1 + 1, L1))), + try + {ok, ErlTokens, _} = erl_scan:string(string:substr(Var, S2 + 1, L2) ++ "."), + {ok, ErlAbsForm} = erl_parse:parse_exprs(ErlTokens), + {value, Value, _} = erl_eval:exprs(ErlAbsForm, Bindings), + get_os_env(Pattern, Vars, erl_eval:add_binding(Name, Value, Bindings)) + catch + _:_ -> get_os_env(Pattern, Vars, erl_eval:add_binding(Name, string:substr(Var, S2 + 1, L2), Bindings)) + end; + nomatch -> + get_os_env(Pattern, Vars, Bindings) + end. diff --git a/src/tsuru_string.erl b/src/tsuru_string.erl new file mode 100644 index 0000000000000000000000000000000000000000..1b2b941c33c9326a70a486fcbe9975a55e5e58ff --- /dev/null +++ b/src/tsuru_string.erl @@ -0,0 +1,20 @@ +-module(tsuru_string). +-author("erikh"). + +%% API +-export([prefix_matches/2, strip_prefix/2]). + +prefix_matches([H | Prefix], [H | String]) -> + prefix_matches(Prefix, String); + +prefix_matches([], _String) -> + true; + +prefix_matches(_Prefix, _String) -> + false. + +strip_prefix([H | Prefix], [H | String]) -> + strip_prefix(Prefix, String); + +strip_prefix(_Prefix, String) -> + String. diff --git a/test/tsuru_application_test.erl b/test/tsuru_application_test.erl new file mode 100644 index 0000000000000000000000000000000000000000..0af7f87d6df485bd5e50d98b5cb5ca96490d8b47 --- /dev/null +++ b/test/tsuru_application_test.erl @@ -0,0 +1,16 @@ +-module(tsuru_application_test). +-author("erikh"). + +-include_lib("eunit/include/eunit.hrl"). + +get_os_env_test() -> + os:putenv("TEST_NUMBER", "123"), + os:putenv("TEST_NON_EVAL", "/1/2/3"), + os:putenv("TEST_STRING", "\"/1/2/3\""), + os:putenv("TEST_ATOM", "'/1/2/3'"), + ?assertEqual(tsuru_application:get_os_env(test), [ + {atom, '/1/2/3'}, + {non_eval, "/1/2/3"}, + {number, 123}, + {string, "/1/2/3"} + ]). diff --git a/test/tsuru_string_test.erl b/test/tsuru_string_test.erl new file mode 100644 index 0000000000000000000000000000000000000000..1209a66c75518802c1853623bc2128589a03d8e2 --- /dev/null +++ b/test/tsuru_string_test.erl @@ -0,0 +1,11 @@ +-module(tsuru_string_test). +-author("erikh"). + +-include_lib("eunit/include/eunit.hrl"). + +prefix_matches_test() -> + ?assert(tsuru_string:prefix_matches("HELLO", "HELLO_WORLD")), + ?assertNot(tsuru_string:prefix_matches("HELLOW", "HELLO_WORLD")). + +strip_prefix_test() -> + ?assertEqual(tsuru_string:strip_prefix("HELLO_", "HELLO_WORLD"), "WORLD").