mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-29 09:04:17 +00:00
fbbe972898
Motivated by ofborg struggling [1] and its evaluations taking too long, inspired by Jörg's initial PR [2] and Adam's previous attempt to parallelise Nixpkgs evaluation [3], this PR contains initial work to relief ofborg from its evaluation duty by using GitHub Actions to evaluate Nixpkgs. For now this doesn't take care of all of what ofborg does, such as requesting appropriate reviewers or labeling mass rebuilds, but this can be follow-up work. [1]: https://discourse.nixos.org/t/infrastructure-announcement-the-future-of-ofborg-your-help-needed/56025?u=infinisil [2]: https://github.com/NixOS/nixpkgs/pull/352808 [3]: https://github.com/NixOS/nixpkgs/pull/269403 Co-Authored-By: Jörg Thalheim <joerg@thalheim.io> Co-Authored-By: Adam Joseph <adam@westernsemico.com>
82 lines
2.6 KiB
Nix
82 lines
2.6 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 ? 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)
|