GitNexus/eval/workflow_bench/gateway_supervisor.py

45 lines
1.3 KiB
Python

"""Private gateway owner. EOF on stdin means the harness no longer exists.
Executed by absolute script path so the isolated gateway environment needs no
PYTHONPATH. The gateway receives DEVNULL, never the owner-liveness descriptor.
"""
from __future__ import annotations
import os
import signal
import sys
import threading
from process_control import run_managed
def main() -> int:
cancelled = threading.Event()
def watch_owner() -> None:
try:
# A buffered stdin lock held by a daemon aborts CPython shutdown
# when the proxy exits while the owner is still alive.
os.read(sys.stdin.fileno(), 1)
finally:
cancelled.set()
threading.Thread(target=watch_owner, daemon=True).start()
for signum in (signal.SIGTERM, signal.SIGINT):
signal.signal(signum, lambda *_: cancelled.set())
result = run_managed(
sys.argv[1:],
timeout=7 * 24 * 60 * 60,
cancel_event=cancelled,
echo_stdout=True,
)
if result.stderr_tail:
print(result.stderr_tail, file=sys.stderr, flush=True)
if result.detail:
print(result.detail, file=sys.stderr, flush=True)
return 0 if result.ok or result.state == "cancelled" else 1
if __name__ == "__main__":
raise SystemExit(main())