--- /dev/null
+{ pkgs, config, lib, ... }:
+{
+ imports = [
+ <nixpkgs/nixos/modules/profiles/qemu-guest.nix>
+ ./base_configuration.nix
+ ];
+ systemd.services.buildbot-worker.serviceConfig.ExecStartPre = let
+ cfg = config.services.buildbot-worker;
+ script = pkgs.writeScript "decode-dmi" ''
+ #!${pkgs.stdenv.shell}
+
+ mkdir -vp "${cfg.buildbotDir}"
+ varfile=${cfg.buildbotDir}/variables
+ rm $varfile || true
+ echo "[DEFAULT]" > $varfile
+ strings=$(${pkgs.dmidecode}/bin/dmidecode --oem-string count)
+ for i in $(seq 1 $strings); do
+ ${pkgs.dmidecode}/bin/dmidecode --oem-string $i >> $varfile
+ done
+ chown -R ${cfg.user}:${cfg.group} ${cfg.buildbotDir}
+ '';
+ in
+ lib.mkForce ["+${script}"];
+ systemd.services.buildbot-worker.serviceConfig.ExecStart = let
+ cfg = config.services.buildbot-worker;
+ tacFile = pkgs.writeText "buildbot-worker.tac" ''
+ import os
+ from io import open
+
+ from buildbot_worker.bot import Worker
+ from twisted.application import service
+
+ basedir = '${cfg.buildbotDir}'
+
+ # note: this line is matched against to check that this is a worker
+ # directory; do not edit it.
+ application = service.Application('buildbot-worker')
+
+ import configparser
+ config = config = configparser.ConfigParser()
+ config.read("${cfg.buildbotDir}/variables")
+ master_url_split = config["DEFAULT"]["buildbot_master_url"].split(':')
+ buildmaster_host = master_url_split[0]
+ port = int(master_url_split[1])
+ workername = config["DEFAULT"]["buildbot_worker_name"]
+
+ with open('${cfg.workerPassFile}', 'r', encoding='utf-8') as passwd_file:
+ passwd = passwd_file.read().strip('\r\n')
+ keepalive = ${toString cfg.keepalive}
+ umask = None
+ maxdelay = 300
+ numcpus = None
+ allow_shutdown = None
+
+ s = Worker(buildmaster_host, port, workername, passwd, basedir,
+ keepalive, umask=umask, maxdelay=maxdelay,
+ numcpus=numcpus, allow_shutdown=allow_shutdown)
+ s.setServiceParent(application)
+ '';
+ in
+ lib.mkForce "${cfg.package.pythonModule.pkgs.twisted}/bin/twistd --nodaemon --pidfile= --logfile - --python ${tacFile}";
+ services.buildbot-worker = {
+ enable = true;
+ workerPass = config.myEnv.buildbot.workerPassword;
+ packages = [ pkgs.git pkgs.gzip pkgs.openssh ];
+ };
+}