diff options
Diffstat (limited to 'deckit')
| -rw-r--r-- | deckit/modules/sbbuilder.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/deckit/modules/sbbuilder.py b/deckit/modules/sbbuilder.py new file mode 100644 index 0000000..3a48a1d --- /dev/null +++ b/deckit/modules/sbbuilder.py @@ -0,0 +1,36 @@ +"""sb-builder build progress, read-only over ssh. + +The build VM's `sbb-remote jobs` already returns JSON; this module runs it over +the configured ssh host alias and relays it. Nothing here writes to the VM. +""" + +import json +import subprocess + +from ..module import Module + + +def _run(cmd, timeout=5): + try: + return subprocess.run(cmd, capture_output=True, text=True, timeout=timeout).stdout + except (OSError, subprocess.TimeoutExpired): + return "" + + +def make(cfg: dict) -> Module: + host = cfg.get("sbbuilder", {}).get("host", "buildsystem") + run = cfg.get("run", _run) + + def state(): + try: + out = run(["ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=4", + host, "sbb-remote", "jobs"]) + except OSError: + return {"offline": True} + try: + data = json.loads(out) + except (ValueError, TypeError): + return {"offline": True} + return {"offline": False, "jobs": data.get("jobs", [])} + + return Module(name="sbbuilder", title="Builds", state=state) |
