from buildbot.plugins import util, steps, schedulers
from buildbot_buildslist import BuildsList
+from shutil import which
__all__ = [
"force_scheduler", "deploy_scheduler", "hook_scheduler",
"clean_branch", "package_and_upload", "SlackStatusPush",
- "XMPPStatusPush"
+ "XMPPStatusPush", "NixShellCommand"
]
# Small helpers"
command=["rm", "-f", package]),
]
+# Steps
+class NixShellCommand(steps.ShellCommand):
+ def __init__(self, command=None, pure=True, nixfile=None, **kwargs):
+ assert(isinstance(command, str))
+ oldpath = kwargs.get("env", {}).get("PATH", None)
+ if which("nix-shell", path=oldpath) is None:
+ kwargs["env"] = kwargs.get("env", {})
+ if isinstance(oldpath, str):
+ kwargs["env"]["PATH"] = "/run/current-system/sw/bin:" + oldpath
+ elif isinstance(oldpath, list):
+ kwargs["env"]["PATH"] = ["/run/current-system/sw/bin"] + oldpath
+ nixcommand = ["nix-shell"]
+ if pure:
+ nixcommand.append("--pure")
+ nixcommand.append("--run")
+ nixcommand.append(command)
+ if nixfile is not None:
+ nixcommand.append(nixfile)
+ super().__init__(command=nixcommand, **kwargs)
+
# Schedulers
def force_scheduler(name, builders):
return schedulers.ForceScheduler(name=name,