Skip to main content

src/gleem@tasks.erl

-module(gleem@tasks).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleem/tasks.gleam").
-export([define/1, run/1]).
-export_type([answer/0, task/0]).

-type answer() :: yes | no.

-type task() :: {task, binary(), binary()}.

-file("src/gleem/tasks.gleam", 18).
-spec define(list(task())) -> list(task()).
define(Tasks) ->
    Tasks.

-file("src/gleem/tasks.gleam", 40).
-spec run_task(task()) -> nil.
run_task(Task) ->
    gleam_stdlib:println(
        <<(gleam_community@ansi:pink(<<"Initializing task: "/utf8>>))/binary,
            (gleam_community@ansi:magenta(erlang:element(2, Task)))/binary>>
    ),
    _ = gleem_ffi:cmd(<<"rm -rf tmp/"/utf8>>),
    _ = gleem_ffi:cmd(<<"mkdir -p tmp/"/utf8>>),
    _ = gleem_ffi:cmd(
        <<"cd tmp && gleam new "/utf8, (erlang:element(2, Task))/binary>>
    ),
    _ = gleem_ffi:cmd(<<"cp gleam.toml tmp/"/utf8>>),
    _ = gleem_ffi:cmd(<<"cp -r src/build/ tmp/src/"/utf8>>),
    _ = gleem_ffi:cmd(
        <<<<<<"sed -i 's/^name = .*/name = \""/utf8,
                    (erlang:element(2, Task))/binary>>/binary,
                "\"/' "/utf8>>/binary,
            "tmp/gleam.toml"/utf8>>
    ),
    _ = gleem_ffi:cmd(<<"cd tmp && gleam run"/utf8>>),
    nil.

-file("src/gleem/tasks.gleam", 22).
-spec run(list(task())) -> nil.
run(Tasks) ->
    case erlang:element(4, argv:load()) of
        [Task_name] ->
            case gleam@list:find(
                Tasks,
                fun(T) -> erlang:element(2, T) =:= Task_name end
            ) of
                {ok, Task} ->
                    run_task(Task);

                {error, _} ->
                    gleam_stdlib:println(
                        <<<<(gleam_community@ansi:red(<<"Error: "/utf8>>))/binary,
                                "Task not defined: "/utf8>>/binary,
                            (gleam_community@ansi:magenta(Task_name))/binary>>
                    )
            end;

        [] ->
            gleam_stdlib:println(
                <<(gleam_community@ansi:red(<<"Error: "/utf8>>))/binary,
                    "No task specified."/utf8>>
            );

        _ ->
            gleam_stdlib:println(
                <<(gleam_community@ansi:red(<<"Error: "/utf8>>))/binary,
                    "Too many arguments provided."/utf8>>
            )
    end.