Files
nixpkgs/pkgs/top-level/release-unfree-redistributable.nix
Wolfgang Walther d0c0b875f7 treewide: remove __recurseIntoDerivationForReleaseJobs
This attribute was supposed to be set on derivations, to make the
release tools recurse into them. The remaining uses were all on regular
attrsets, though, so this is safe to remove.
2025-08-31 20:54:49 +02:00

121 lines
3.4 KiB
Nix

/*
Nixpkgs unfree+redistributable packages.
NOTE: This file is used by the sister nix-community project.
The official Hydra instance only builds and provides binary caches for free
packages (as in OSI-approved).
Some unfree packages such as MongoDB, ZeroTier, ... take a while to be
built. While their license is not free, they allow redistribution of
build artefacts.
The sister project nix-community will build and distribute those packages
for a subset of the channels to <https://nix-community.cachix.org>.
See also:
* <https://hydra.nix-community.org/jobset/nixpkgs/unfree-redistributable>
* <https://github.com/nix-community/infra/pull/1406>
Test for example like this:
$ hydra-eval-jobs pkgs/top-level/release-unfree-redistributable.nix -I .
*/
{
# The platforms for which we build Nixpkgs.
supportedSystems ? [
"x86_64-linux"
"aarch64-linux"
],
# Attributes passed to nixpkgs.
nixpkgsArgs ? {
config = {
allowAliases = false;
allowUnfree = true;
cudaSupport = true;
inHydra = true;
};
__allowFileset = false;
},
# We only build the full package set on infrequently releasing channels.
full ? false,
}:
let
release-lib = import ./release-lib.nix {
inherit supportedSystems nixpkgsArgs;
};
inherit (release-lib)
lib
mapTestOn
pkgs
;
# similar to release-lib.packagePlatforms, but also includes some condition for which package to pick
packagesWith =
prefix: cond:
lib.mapAttrs (
name: value:
let
attrPath = if prefix == "" then name else "${prefix}.${name}";
res = builtins.tryEval (
if lib.isDerivation value then
lib.optionals (cond attrPath value) (
# logic copied from release-lib packagePlatforms
value.meta.hydraPlatforms
or (lib.subtractLists (value.meta.badPlatforms or [ ]) (value.meta.platforms or [ "x86_64-linux" ]))
)
else if value.recurseForDerivations or false || value.recurseForRelease or false then
# Recurse
packagesWith attrPath cond value
else
[ ]
);
in
lib.optionals res.success res.value
);
# Unfree is any license not OSI-approved.
isUnfree = pkg: lib.lists.any (l: !(l.free or true)) (lib.lists.toList (pkg.meta.license or [ ]));
# Whenever the license allows re-distribution of the binaries
isRedistributable =
pkg: lib.lists.any (l: l.redistributable or false) (lib.lists.toList (pkg.meta.license or [ ]));
isSource =
pkg: !lib.lists.any (x: !(x.isSource)) (lib.lists.toList (pkg.meta.sourceProvenance or [ ]));
isNotLinuxKernel =
attrPath: !(lib.hasPrefix "linuxKernel" attrPath || lib.hasPrefix "linuxPackages" attrPath);
# This is handled by release-cuda.nix
isNotCudaPackage = attrPath: !(lib.hasPrefix "cuda" attrPath);
canSubstituteSrc =
pkg:
# requireFile don't allow using substituters and are therefor skipped
pkg.src.allowSubstitutes or true;
cond =
attrPath: pkg:
(isUnfree pkg)
&& (isRedistributable pkg)
&& (isSource pkg)
&& (canSubstituteSrc pkg)
&& (
full
||
# We only build these heavy packages on releases
((isNotCudaPackage attrPath) && (isNotLinuxKernel attrPath))
);
packages = packagesWith "" cond pkgs;
jobs = mapTestOn packages;
in
jobs