-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
Copy pathrun.exs
76 lines (65 loc) · 1.67 KB
/
run.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
defmodule DependencyHelper do
def main() do
IO.read(:stdio, :all)
|> Jason.decode!()
|> run()
|> case do
{output, 0} ->
if output =~ "No authenticated organization found" do
{:error, output}
else
{:ok, :erlang.binary_to_term(output)}
end
{error, 1} -> {:error, error}
end
|> handle_result()
end
defp handle_result({:ok, {:ok, result}}) do
encode_and_write(%{"result" => result})
end
defp handle_result({:ok, {:error, reason}}) do
encode_and_write(%{"error" => reason})
System.halt(1)
end
defp handle_result({:error, reason}) do
encode_and_write(%{"error" => reason})
System.halt(1)
end
defp encode_and_write(content) do
content
|> Jason.encode!()
|> IO.write()
end
defp run(%{"function" => "parse", "args" => [dir]}) do
run_script("parse_deps.exs", dir)
end
defp run(%{"function" => "get_latest_resolvable_version", "args" => [dir, dependency_name, credentials]}) do
run_script("check_update.exs", dir, [dependency_name] ++ credentials)
end
defp run(%{"function" => "get_updated_lockfile", "args" => [dir, dependency_name, credentials]}) do
run_script("do_update.exs", dir, [dependency_name] ++ credentials)
end
defp run_script(script, dir, args \\ []) do
args = [
"run",
"--no-deps-check",
"--no-start",
"--no-compile",
"--no-elixir-version-check",
script
] ++ args
System.cmd(
"mix",
args,
[
cd: dir,
env: %{
"MIX_EXS" => nil,
"MIX_LOCK" => nil,
"MIX_DEPS" => nil
}
]
)
end
end
DependencyHelper.main()