55 lines
1.2 KiB
Elixir
55 lines
1.2 KiB
Elixir
![]() |
defmodule Mash.Helpers do
|
||
|
@moduledoc """
|
||
|
Helpers that provide a simple way to write Mash configs.
|
||
|
"""
|
||
|
|
||
|
def mix(task, args \\ []) do
|
||
|
preferred_mix_env = Mix.Task.preferred_cli_env(task) || Mix.env()
|
||
|
|
||
|
fn io_pid ->
|
||
|
cmd("mix", [task | args], io_pid, [{"MIX_ENV", Atom.to_string(preferred_mix_env)}])
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def shell(command, args \\ []) do
|
||
|
fn io_pid ->
|
||
|
cmd(command, args, io_pid)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def fun(fun) do
|
||
|
fn io_pid ->
|
||
|
Process.group_leader(self(), io_pid)
|
||
|
|
||
|
try do
|
||
|
case fun.() do
|
||
|
:ok ->
|
||
|
{[], 0}
|
||
|
|
||
|
{:ok, _any} ->
|
||
|
{[], 0}
|
||
|
|
||
|
other ->
|
||
|
IO.puts(IO.ANSI.red() <> "** (fun) failed: #{inspect(other)}" <> IO.ANSI.reset())
|
||
|
{[], 1}
|
||
|
end
|
||
|
rescue
|
||
|
e ->
|
||
|
IO.puts(IO.ANSI.red() <> "** (fun) failed: #{Exception.message(e)}" <> IO.ANSI.reset())
|
||
|
{[], 1}
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp cmd(command, args, io_pid, env \\ []) do
|
||
|
exec_string = "-c #{command} #{Enum.join(args, " ")}"
|
||
|
|
||
|
System.cmd("script", ["-eqf", exec_string, "/dev/null"],
|
||
|
into: IO.stream(io_pid, :line),
|
||
|
env: env,
|
||
|
parallelism: true,
|
||
|
stderr_to_stdout: true
|
||
|
)
|
||
|
end
|
||
|
end
|