Skip to main content

src/erlang_migrate_cli.erl

%% @doc Minimal CLI for erlang_migrate. Build with: rebar3 escriptize
%% Output: _build/default/bin/erlang_migrate_cli
%%
%% Only `new' (file generation) is provided — applying migrations stays
%% in-app via erlang_migrate:up/1, preserving the zero-dependency design
%% (a full CLI would have to bundle every database driver).
-module(erlang_migrate_cli).
-export([main/1]).

-define(DEFAULT_DIR, "priv/migrations").

main(["new", Title]) ->
    main(["new", Title, ?DEFAULT_DIR]);
main(["new", Title, Dir]) ->
    io:setopts(standard_io, [{encoding, unicode}]),
    case erlang_migrate:create(Dir, Title) of
        {ok, Up, Down} ->
            io:format("created ~ts~ncreated ~ts~n", [Up, Down]);
        {error, Reason} ->
            io:format(standard_error, "error: ~p~n", [Reason]),
            erlang:halt(1)
    end;
main(_) ->
    io:format(standard_error,
              "usage: erlang_migrate_cli new <title> [dir]~n"
              "       creates {utc_timestamp}_<title>.up.sql and .down.sql"
              " (default dir: " ?DEFAULT_DIR ")~n", []),
    erlang:halt(2).