mad.erl 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. -module(mad).
  2. -copyright('Maxim Sokhatsky').
  3. -include("mad.hrl").
  4. -compile(export_all).
  5. -export([main/1]).
  6. main([]) -> help();
  7. main(Params) ->
  8. { Invalid, Valid } = lists:foldr(
  9. fun (X,{C,R}) when is_atom(X) -> {[],[{X,C}|R]};
  10. (X,{C,R}) -> {[X|C],R} end,
  11. {[],[]}, lists:map(fun atomize/1, Params)),
  12. return(lists:any(fun({error,_}) -> true;
  13. (_) -> false end,
  14. lists:flatten(
  15. lists:foldl(
  16. fun ({Fun,Arg},[]) -> errors((profile()):Fun(Arg));
  17. ({_,_},Err) -> errors(Invalid), {return,Err} end, [], Valid)))).
  18. atomize("static") -> 'static';
  19. atomize("deploy") -> 'deploy';
  20. atomize("app"++_) -> 'app';
  21. atomize("dep") -> 'deps';
  22. atomize("deps") -> 'deps';
  23. atomize("cle"++_) -> 'clean';
  24. atomize("com"++_) -> 'compile';
  25. atomize("up") -> 'up';
  26. atomize("rel"++_) -> 'release';
  27. atomize("bun"++_) -> 'release';
  28. atomize("sta"++_) -> 'start';
  29. atomize("sto"++_) -> 'stop';
  30. atomize("att"++_) -> 'attach';
  31. atomize("sh") -> 'sh';
  32. atomize("rep"++_) -> 'sh';
  33. atomize("pla"++_) -> 'release';
  34. atomize(Else) -> Else.
  35. profile() -> application:get_env(mad,profile,mad_local).
  36. errors([]) -> [];
  37. errors(false) -> [];
  38. errors(true) -> {error,unknown};
  39. errors({error,L}) -> info("ERROR: ~tp~n",[L]), [{error,L}];
  40. errors({ok,_}) -> info("OK~n",[]), [];
  41. errors(X) -> info("RETURN: ~tp~n",[X]), [{error,X}].
  42. return(true) -> 1;
  43. return(false) -> 0;
  44. return(X) -> X.
  45. host() -> Host = try {ok,H} = inet:gethostname(), H catch _:_ -> <<>> end.
  46. info(Format) -> io:format(lists:concat([Format,"\r"])).
  47. info(Format,Args) -> io:format(lists:concat([Format,"\r"]),Args).
  48. help(Reason,D) -> help(io_lib:format("~s ~p", [Reason, D])).
  49. help(_Msg) -> help().
  50. help() -> info("MAD Container Tool version ~s~n",[?VERSION]),
  51. info("~n"),
  52. info(" invoke = mad params~n"),
  53. info(" params = [] | command [ options ] params ~n"),
  54. info(" command = app | deps | clean | compile | up~n"),
  55. info(" | release [ beam | ling | script | runc | depot ]~n"),
  56. info(" | deploy | start | stop | attach | sh ~n"),
  57. return(false).