1
0
Fork 0
mirror of https://github.com/numtide/flake-utils.git synced 2024-12-14 11:47:31 +00:00

No special treatment for hydraJobs

This commit is contained in:
Hamish Mackenzie 2023-04-13 21:32:21 +12:00 committed by Jean-Baptiste Giraudeau
parent a1720a10a6
commit 9e0a97e026
No known key found for this signature in database
GPG key ID: 7CEF8C9CC2D9933B

40
lib.nix
View file

@ -26,52 +26,18 @@ let
# eachSystem using defaultSystems
eachDefaultSystem = eachSystem defaultSystems;
# Builds a map from <attr>=value to <attr>.<system>=value for each system,
# except for the `hydraJobs` attribute, where it maps the inner attributes,
# from hydraJobs.<attr>=value to hydraJobs.<attr>.<system>=value.
# Builds a map from <attr>=value to <attr>.<system>=value for each system
#
eachSystem = systems: f:
let
# Taken from <nixpkgs/lib/attrsets.nix>
isDerivation = x: builtins.isAttrs x && x ? type && x.type == "derivation";
# Used to match Hydra's convention of how to define jobs. Basically transforms
#
# hydraJobs = {
# hello = <derivation>;
# haskellPackages.aeson = <derivation>;
# }
#
# to
#
# hydraJobs = {
# hello.x86_64-linux = <derivation>;
# haskellPackages.aeson.x86_64-linux = <derivation>;
# }
#
# if the given flake does `eachSystem [ "x86_64-linux" ] { ... }`.
pushDownSystem = system: merged:
builtins.mapAttrs
(name: value:
if ! (builtins.isAttrs value) then value
else if isDerivation value then (merged.${name} or { }) // { ${system} = value; }
else pushDownSystem system (merged.${name} or { }) value);
# Merge together the outputs for all systems.
op = attrs: system:
let
ret = f system;
op = attrs: key:
let
appendSystem = key: system: ret:
if key == "hydraJobs"
then (pushDownSystem system (attrs.hydraJobs or { }) ret.hydraJobs)
else { ${system} = ret.${key}; };
in
attrs //
op = attrs: key: attrs //
{
${key} = (attrs.${key} or { })
// (appendSystem key system ret);
// { ${system} = ret.${key}; };
}
;
in