]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - modules/private/buildbot/common/build_helpers.py
Add a NixShellCommand step to buildbot
[perso/Immae/Config/Nix.git] / modules / private / buildbot / common / build_helpers.py
index ed7ada368016b085e4aa8573cfae4ed1958a3d37..acea90591f5ca16b524e0e41b7d22087ef72cf7c 100644 (file)
@@ -1,10 +1,11 @@
 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"
@@ -30,6 +31,26 @@ def package_and_upload(package, package_dest, package_url):
                 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,