#!/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 ? import ../../ci/supportedSystems.nix, }: 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)