nur-packages/ci.nix

57 lines
1.6 KiB
Nix
Raw Permalink Normal View History

2020-10-15 17:05:30 +11:00
# This file provides all the buildable and cacheable packages and
# package outputs in you package set. These are what gets built by CI,
# so if you correctly mark packages as
#
# - broken (using `meta.broken`),
# - unfree (using `meta.license.free`), and
# - locally built (using `preferLocalBuild`)
#
# then your CI will be able to build and cache only those packages for
# which this is possible.
{ pkgs ? import ./flake-compat.nix { src = ./.; } }:
2020-10-15 17:05:30 +11:00
with builtins;
let
isReserved = n: n == "lib" || n == "overlays" || n == "modules";
isDerivation = p: isAttrs p && p ? type && p.type == "derivation";
isBuildable = p: !(p.meta.broken or false) && p.meta.license.free or true;
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
2022-10-26 10:50:59 +11:00
else if isDerivation p then [ p ]
else [ ];
2020-10-15 17:05:30 +11:00
in
2022-10-26 10:50:59 +11:00
concatMap f (attrValues s);
2020-10-15 17:05:30 +11:00
outputsOf = p: map (o: p.${o}) p.outputs;
nurAttrs = import ./default.nix { inherit pkgs; };
nurPkgs =
flattenPkgs
2022-10-26 10:50:59 +11:00
(listToAttrs
(map (n: nameValuePair n nurAttrs.${n})
(filter (n: !isReserved n)
(attrNames nurAttrs))));
2020-10-15 17:05:30 +11:00
in
rec {
buildPkgs = filter isBuildable nurPkgs;
cachePkgs = filter isCacheable buildPkgs;
buildOutputs = concatMap outputsOf buildPkgs;
cacheOutputs = concatMap outputsOf cachePkgs;
}