feat: distributed builds module

This commit is contained in:
Kat Inskip 2023-01-30 11:46:50 -08:00
parent 26b3c66d22
commit 6256149a90
Signed by: kat
GPG key ID: 465E64DECEA8CF0F
5 changed files with 63 additions and 28 deletions

View file

@ -1,28 +0,0 @@
{ lib, config, inputs, ... }: let
inherit (lib.attrsets) mapAttrsToList;
inherit (lib.lists) optionals;
buildMachines = mapAttrsToList (name: config_: let
config = config_.config;
in {
hostName = "${config.networking.hostName}.inskip.me";
sshUser = "deploy";
systems = [ config.nixpkgs.system ] ++ optionals (config.nix.settings ? extra-platforms) config.nix.settings.extra-platforms;
maxJobs = 100;
speedFactor = 1; # TODO: provide adjustment factor
supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ];
} ) inputs.self.nixosConfigurations;
daiyousei = {
hostName = "daiyousei.inskip.me";
sshUser = "root";
system = "aarch64-linux";
maxJobs = 100;
speedFactor = 1;
supportedFeatures = ["benchmark" "big-parallel" "kvm"];
mandatoryFeatures = [];
};
in {
nix = {
inherit buildMachines;
distributedBuilds = true;
};
}

View file

@ -0,0 +1,55 @@
{ lib, config, inputs, ... }: let
# TODO: convert to nix-std
inherit (lib.attrsets) mapAttrsToList mapAttrs;
inherit (lib.lists) optionals;
inherit (lib.options) mkOption;
inherit (lib.types) int attrsOf submodule;
buildMachines = mapAttrsToList (name: extern_: let
extern = extern_.config;
in {
hostName = "${name}.inskip.me";
sshUser = "deploy";
systems = [ extern.nixpkgs.system ] ++ optionals (extern.nix.settings ? extra-platforms) extern.nix.settings.extra-platforms;
maxJobs = 100;
speedFactor = config.distributed.outputs.${name};
supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ];
} ) (inputs.self.nixosConfigurations // inputs.self.darwinConfigurations);
daiyousei = {
hostName = "daiyousei.inskip.me";
sshUser = "root";
system = "aarch64-linux";
maxJobs = 100;
speedFactor = 1;
supportedFeatures = ["benchmark" "big-parallel" "kvm"];
mandatoryFeatures = [];
};
in {
options.distributed = let
baseOptions = {
options.preference = mkOption {
type = int;
default = 1;
};
};
in baseOptions.options // {
systems = mkOption {
type = attrsOf (submodule baseOptions);
default = {};
};
outputs = mkOption {
type = attrsOf int;
default = {};
};
};
config = {
distributed.outputs = mapAttrs (name: extern: extern.config.distributed.preference +
(if config.distributed.systems ? ${name} && config.distributed.systems.${name} ? preference then
config.distributed.systems.${name}.preference
else 0)
) (inputs.self.nixosConfigurations // inputs.self.darwinConfigurations);
nix = {
inherit buildMachines;
distributedBuilds = true;
};
};
}

View file

@ -71,6 +71,7 @@
.${string.toLower config.type};
modules = with tree; [
tree.modules.${config.folder}
tree.modules.common
tree.${config.folder}.common
tree.kat.user.${config.folder}
common

View file

@ -7,6 +7,8 @@ _: let
security.pam.enableSudoTouchIdAuth = true;
distributed.systems.renko.preference = 5;
homebrew = {
brewPrefix = "/opt/homebrew/bin";
brews = [

View file

@ -35,6 +35,11 @@
"darwin/*".functor.enable = true;
"kat/*".functor.enable = true;
# Various modules
"modules/common" = {
functor = {
enable = true;
};
};
"modules/nixos" = {
functor = {
enable = true;