|
import argparse |
|
from sys import exit |
|
import subprocess |
|
from pathlib import Path |
|
import os |
|
import tempfile |
|
from src.generic_eval import main as gmain |
|
|
|
|
|
def eval_script(path: Path): |
|
status = None |
|
stdout = None |
|
stderr = None |
|
exit_code = None |
|
try: |
|
|
|
with tempfile.TemporaryDirectory() as temp_dir: |
|
|
|
env = os.environ.copy() |
|
env["GOCACHE"] = os.path.join(temp_dir, "go-build") |
|
env["GOPATH"] = os.path.join(temp_dir, "gopath") |
|
|
|
build = subprocess.run(["go", "test", path], |
|
env=env, |
|
timeout=30, |
|
stdout=subprocess.PIPE, |
|
stderr=subprocess.PIPE) |
|
|
|
stdout = build.stdout.decode("utf-8", errors="ignore") |
|
stderr = build.stderr.decode("utf-8", errors="ignore") |
|
exit_code = build.returncode |
|
|
|
|
|
if "[setup failed]" in stdout or "[build failed]" in stdout: |
|
status = "SyntaxError" |
|
elif "FAIL" in stdout: |
|
status = "Exception" |
|
else: |
|
status = "OK" |
|
except subprocess.TimeoutExpired: |
|
status = "Timeout" |
|
|
|
return { |
|
"status": status, |
|
"exit_code": exit_code, |
|
"stdout": stdout, |
|
"stderr": stderr, |
|
} |
|
|
|
|
|
if __name__ == "__main__": |
|
gmain(eval_script, 'Go', '.go') |
|
|