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,
factory.addStep(steps.Git(logEnviron=False, repourl=E.RECETTES_GIT_URL,
submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
- factory.addStep(steps.ShellCommand(name="build website",
+ factory.addStep(NixShellCommand(name="build website",
logEnviron=False, haltOnFailure=True, workdir="source",
- env=path_env, command=["jekyll", "build", "--baseurl", "/recettes"]))
+ env=path_env, command="jekyll build --trace --baseurl /recettes"))
factory.addStep(steps.MasterShellCommand(command="rm -rf {}".format(E.RECETTES_RELEASE_PATH)))
factory.addStep(steps.DirectoryUpload(workersrc="../source/_site",
masterdest=E.RECETTES_RELEASE_PATH,