Skip to content

Commit d7bb087

Browse files
committed
Pass gh_token into script runner
1 parent b437754 commit d7bb087

File tree

2 files changed

+63
-3
lines changed

2 files changed

+63
-3
lines changed

lib/command_line.ex

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ defmodule ElixirScript.CommandLine do
1515
defstruct debug?: false, gh_token: nil, help?: false, script: nil
1616
end
1717

18-
def main(args, opts \\ []) do
18+
def main(args) do
1919
parsed_args = parse_args!(args)
2020
log_level = if parsed_args.debug?, do: :debug, else: :info
2121
Logger.configure(level: log_level)
2222

23-
runner = Keyword.get(opts, :runner, &ScriptRunner.run/1)
23+
runner = script_runner()
2424
Logger.debug("Running in debug mode, using runner: #{inspect(runner)}")
2525

2626
Logger.debug("Environment Variables: #{inf_inspect(System.get_env())}")
@@ -32,7 +32,7 @@ defmodule ElixirScript.CommandLine do
3232
System.halt(0)
3333
else
3434
Logger.debug("Script input: #{inf_inspect(parsed_args.script)}")
35-
result = runner.(parsed_args.script)
35+
result = runner.run(parsed_args.script, github_token: parsed_args.gh_token)
3636
Core.set_output(result, "result")
3737
Logger.debug("Result output: #{inspect(result, pretty: true)}")
3838
end
@@ -77,4 +77,7 @@ defmodule ElixirScript.CommandLine do
7777
def inf_inspect(exec) do
7878
inspect(exec, pretty: true, limit: :infinity, printable_limit: :infinity)
7979
end
80+
81+
defp script_runner,
82+
do: Application.get_env(:command_line, :script_runner, ScriptRunner)
8083
end

test/command_line_test.exs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,52 @@
11
defmodule ElixirScript.CommandLineTest do
22
use ExUnit.Case, async: false
3+
import ExUnit.CaptureIO
4+
import Mox
35

46
alias ElixirScript.CommandLine
57

8+
setup :verify_on_exit!
9+
10+
describe "main/1" do
11+
test "passes script and github_token to script runner" do
12+
expect(ElixirScript.ScriptRunnerMock, :run, fn "foo", [github_token: "token"] -> "bar" end)
13+
14+
capture_io(fn ->
15+
CommandLine.main(["--script", "foo", "--gh-token", "token"])
16+
end)
17+
end
18+
19+
test "outputs the result of script runner to GitHub command" do
20+
stub(ElixirScript.ScriptRunnerMock, :run, fn _, _ -> "bar" end)
21+
safe_delete_env("GITHUB_OUTPUT")
22+
23+
io =
24+
capture_io(fn ->
25+
CommandLine.main(["--script", "foo", "--gh-token", "token"])
26+
end)
27+
28+
assert io == "::set-output name=result::bar\n"
29+
end
30+
31+
test "outputs result to GitHub environment commands if available" do
32+
{:ok, file_path} = safe_temp_path()
33+
safe_put_env("GITHUB_OUTPUT", file_path)
34+
35+
stub(ElixirScript.ScriptRunnerMock, :run, fn _, _ -> "bar" end)
36+
37+
capture_io(fn ->
38+
CommandLine.main(["--script", "foo", "--gh-token", "token"])
39+
end)
40+
41+
regex =
42+
~r/result<<ghadelimiter_#Ref<(?:\d|\.)+>\n(?<result>.*)\nghadelimiter_#Ref<(?:\d|\.)+>\n/
43+
44+
output = File.read!(file_path)
45+
assert [_, result] = Regex.run(regex, output), "Regex failed on: " <> output
46+
assert result == "bar"
47+
end
48+
end
49+
650
describe "parse_args!/1" do
751
@script "IO.puts('Hello, world!')"
852

@@ -84,4 +128,17 @@ defmodule ElixirScript.CommandLineTest do
84128
else: System.delete_env(varname)
85129
end)
86130
end
131+
132+
def safe_delete_env(varname) do
133+
original_value = System.get_env(varname)
134+
System.delete_env(varname)
135+
136+
on_exit(fn -> if original_value, do: System.put_env(varname, original_value) end)
137+
end
138+
139+
def safe_temp_path do
140+
{:ok, file_path} = Temp.open("my-file", &IO.write(&1, ""))
141+
on_exit(fn -> File.rm(file_path) end)
142+
{:ok, file_path}
143+
end
87144
end

0 commit comments

Comments
 (0)