mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
d412d72d69
We have packages that use `meta.platforms = []` as a sort of synonym for `broken = true`. Without this commit, the attrnames for those jobs will end up in the list of attrnames which are expected to build, even though they are not expected to build.
88 lines
2.7 KiB
Nix
88 lines
2.7 KiB
Nix
#!/usr/bin/env nix-shell
|
|
# When using as a callable script, passing `--argstr path some/path` overrides $PWD.
|
|
#!nix-shell -p nix -i "nix-env -qaP --no-name --out-path --arg checkMeta true -f pkgs/top-level/release-outpaths.nix"
|
|
|
|
# Vendored from:
|
|
# https://raw.githubusercontent.com/NixOS/ofborg/74f38efa7ef6f0e8e71ec3bfc675ae4fb57d7491/ofborg/src/outpaths.nix
|
|
{ checkMeta
|
|
, includeBroken ? true # set this to false to exclude meta.broken packages from the output
|
|
, path ? ./../..
|
|
|
|
# used by pkgs/top-level/release-attrnames-superset.nix
|
|
, attrNamesOnly ? false
|
|
|
|
# Set this to `null` to build for builtins.currentSystem only
|
|
, systems ? [
|
|
"aarch64-linux"
|
|
"aarch64-darwin"
|
|
#"i686-linux" # !!!
|
|
"x86_64-linux"
|
|
"x86_64-darwin"
|
|
]
|
|
}:
|
|
let
|
|
lib = import (path + "/lib");
|
|
hydraJobs = import (path + "/pkgs/top-level/release.nix")
|
|
# Compromise: accuracy vs. resources needed for evaluation.
|
|
{
|
|
inherit attrNamesOnly;
|
|
supportedSystems =
|
|
if systems == null
|
|
then [ builtins.currentSystem ]
|
|
else systems;
|
|
nixpkgsArgs = {
|
|
config = {
|
|
allowAliases = false;
|
|
allowBroken = includeBroken;
|
|
allowUnfree = false;
|
|
allowInsecurePredicate = x: true;
|
|
checkMeta = checkMeta;
|
|
|
|
handleEvalIssue = reason: errormsg:
|
|
let
|
|
fatalErrors = [
|
|
"unknown-meta"
|
|
"broken-outputs"
|
|
];
|
|
in
|
|
if builtins.elem reason fatalErrors
|
|
then abort errormsg
|
|
# hydra does not build unfree packages, so tons of them are broken yet not marked meta.broken.
|
|
else if !includeBroken && builtins.elem reason [ "broken" "unfree" ]
|
|
then throw "broken"
|
|
else if builtins.elem reason [ "unsupported" ]
|
|
then throw "unsupported"
|
|
else true;
|
|
|
|
inHydra = true;
|
|
};
|
|
};
|
|
};
|
|
recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
|
|
|
|
# hydraJobs leaves recurseForDerivations as empty attrmaps;
|
|
# that would break nix-env and we also need to recurse everywhere.
|
|
tweak = lib.mapAttrs
|
|
(name: val:
|
|
if name == "recurseForDerivations" then true
|
|
else if lib.isAttrs val && val.type or null != "derivation"
|
|
then recurseIntoAttrs (tweak val)
|
|
else val
|
|
);
|
|
|
|
# Some of these contain explicit references to platform(s) we want to avoid;
|
|
# some even (transitively) depend on ~/.nixpkgs/config.nix (!)
|
|
blacklist = [
|
|
"tarball"
|
|
"metrics"
|
|
"manual"
|
|
"darwin-tested"
|
|
"unstable"
|
|
"stdenvBootstrapTools"
|
|
"moduleSystem"
|
|
"lib-tests" # these just confuse the output
|
|
];
|
|
|
|
in
|
|
tweak (builtins.removeAttrs hydraJobs blacklist)
|