nixos-config/lib/fudo/distributed-builds.nix

49 lines
1.4 KiB
Nix
Raw Normal View History

2021-09-29 17:55:13 -07:00
{ config, lib, pkgs, ... }:
with lib;
let
2021-09-30 08:40:47 -07:00
hostname = config.instance.hostname;
2021-09-29 17:55:13 -07:00
2021-10-01 16:05:56 -07:00
site-cfg = config.fudo.sites.${config.instance.local-site};
2021-09-29 17:55:13 -07:00
has-build-servers = (length (attrNames site-cfg.build-servers)) > 0;
build-keypair = config.fudo.secrets.host-secrets.${hostname}.build-keypair;
enable-distributed-builds =
site-cfg.enable-distributed-builds && has-build-servers && build-keypair != null;
2021-09-30 08:40:47 -07:00
local-build-cfg = if (hasAttr hostname site-cfg.build-servers) then
site-cfg.build-servers.${hostname}
else null;
2021-09-29 17:55:13 -07:00
in {
config = {
nix = mkIf enable-distributed-builds {
buildMachines = mapAttrsToList (hostname: buildOpts: {
hostName = "${hostname}.${domain-name}";
maxJobs = buildOpts.max-jobs;
speedFactor = buildOpts.speed-factor;
supportedFeatures = buildOpts.supportedFeatures;
sshKey = build-keypair.private-key;
sshUser = buildOpts.user;
}) site-cfg.build-servers;
distributedBuilds = true;
trustedUsers = mkIf (local-build-cfg != null) [
local-build-host.build-user
];
};
users.users = mkIf (local-build-cfg != null) {
${local-build-cfg.build-user} = {
isSystemUser = true;
openssh.authorizedKeys.keyFiles =
2021-09-30 08:40:47 -07:00
concatLists
2021-10-01 16:05:56 -07:00
(mapAttrsToList (host: hostOpts: hostOpts.build-pubkeys)
config.instance.local-hosts);
2021-09-29 17:55:13 -07:00
};
};
};
}