nixos-config/ci.nix

43 lines
1.1 KiB
Nix
Raw Normal View History

2023-06-16 02:30:19 +03:00
with builtins;
2023-06-14 03:54:55 +03:00
let
outputs = builtins.getFlake (toString ./.);
2023-06-16 02:30:19 +03:00
pkgs = outputs.inputs.nixpkgs;
isHost = n: pkgs.lib.strings.hasPrefix "host" n;
isDerivation = p: isAttrs p && p ? type && p.type == "derivation";
isBuildable = p: !(p.meta.broken or false);
isCacheable = p: !(p.preferLocalBuild or false);
shouldRecurseForDerivations = p:
isAttrs p && p.recurseForDerivations or false;
nameValuePair = n: v: {
name = n;
value = v;
};
concatMap = builtins.concatMap or (f: xs: concatLists (map f xs));
flattenPkgs = s:
let
f = p:
if shouldRecurseForDerivations p then
flattenPkgs p
else if isDerivation p then
[ p ]
else
[ ];
in concatMap f (attrValues s);
outputsOf = p: map (o: p.${o}) p.outputs;
hostAttrs = outputs.packages.x86_64-linux;
hostPkgs = flattenPkgs (listToAttrs (map (n: nameValuePair n hostAttrs.${n})
(filter (n: isHost n) (attrNames hostAttrs))));
in rec {
buildPkgs = filter isBuildable hostPkgs;
cachePkgs = filter isCacheable buildPkgs;
buildOutputs = concatMap outputsOf buildPkgs;
cacheOutputs = concatMap outputsOf cachePkgs;
}