Build each node individually

Now nodes that take a long time to build won't bottleneck the
deployment of other nodes in the same chunk.

Fixes #47.
This commit is contained in:
Zhaofeng Li 2021-12-07 23:13:31 -08:00
parent ea09e60e36
commit eebded1786
10 changed files with 143 additions and 204 deletions

View file

@ -460,19 +460,11 @@ let
deploymentConfigJsonSelected = names: toJSON
(listToAttrs (map (name: { inherit name; value = nodes.${name}.config.deployment; }) names));
buildAll = buildSelected nodeNames;
buildSelected = names: let
# Change in the order of the names should not cause a derivation to be created
selected = lib.attrsets.filterAttrs (name: _: elem name names) toplevel;
in derivation rec {
name = "colmena-${hive.meta.name}";
system = currentSystem;
json = toJSON (lib.attrsets.mapAttrs (k: v: toString v) selected);
builder = pkgs.writeScript "${name}.sh" ''
#!/bin/sh
echo "$json" > $out
'';
};
evalAll = evalSelected nodeNames;
evalSelected = names: let
selected = lib.filterAttrs (name: _: elem name names) toplevel;
drvs = lib.mapAttrs (k: v: v.drvPath) selected;
in drvs;
introspect = function: function {
inherit pkgs lib nodes;
@ -481,7 +473,7 @@ in {
inherit
nodes toplevel
deploymentConfigJson deploymentConfigJsonSelected
buildAll buildSelected introspect;
evalAll evalSelected introspect;
meta = hive.meta;