base16-schemes: unstable-2024-06-21 -> unstable-2024-11-12 (#356361)
[NixPkgs.git] / pkgs / top-level / release-unfree-redistributable.nix
blob96384e9fb02071fd723848ac0236514e53b524d1
1 /*
2   Nixpkgs unfree+redistributable packages.
4   NOTE: This file is used by the sister nix-community project.
6   The official Hydra instance only builds and provides binary caches for free
7   packages (as in OSI-approved).
9   Some unfree packages such as MongoDB, ZeroTier, ... take a while to be
10   built. While their license is not free, they allow redistribution of
11   build artefacts.
13   The sister project nix-community will build and distribute those packages
14   for a subset of the channels to <https://nix-community.cachix.org>.
16   See also:
18   * <https://hydra.nix-community.org/jobset/nixpkgs/unfree-redistributable>
19   * <https://github.com/nix-community/infra/pull/1406>
21   Test for example like this:
23     $ hydra-eval-jobs pkgs/top-level/release-unfree-redistributable.nix -I .
27   # The platforms for which we build Nixpkgs.
28   supportedSystems ? [
29     "x86_64-linux"
30     "aarch64-linux"
31   ],
32   # Attributes passed to nixpkgs.
33   nixpkgsArgs ? {
34     config = {
35       allowAliases = false;
36       allowUnfree = true;
37       cudaSupport = true;
38       inHydra = true;
39     };
40   },
41   # We only build the full package set on infrequently releasing channels.
42   full ? false,
45 let
46   release-lib = import ./release-lib.nix {
47     inherit supportedSystems nixpkgsArgs;
48   };
50   inherit (release-lib)
51     lib
52     mapTestOn
53     pkgs
54     ;
56   # similar to release-lib.packagePlatforms, but also includes some condition for which package to pick
57   packagesWith =
58     prefix: cond:
59     lib.mapAttrs (
60       name: value:
61       let
62         attrPath = if prefix == "" then name else "${prefix}.${name}";
63         res = builtins.tryEval (
64           if lib.isDerivation value then
65             lib.optionals (cond attrPath value) (
66               # logic copied from release-lib packagePlatforms
67               value.meta.hydraPlatforms
68                 or (lib.subtractLists (value.meta.badPlatforms or [ ]) (value.meta.platforms or [ "x86_64-linux" ]))
69             )
70           else if
71             value.recurseForDerivations or false
72             || value.recurseForRelease or false
73             || value.__recurseIntoDerivationForReleaseJobs or false
74           then
75             # Recurse
76             packagesWith attrPath cond value
77           else
78             [ ]
79         );
80       in
81       lib.optionals res.success res.value
82     );
84   # Unfree is any license not OSI-approved.
85   isUnfree = pkg: lib.lists.any (l: !(l.free or true)) (lib.lists.toList (pkg.meta.license or [ ]));
87   # Whenever the license allows re-distribution of the binaries
88   isRedistributable =
89     pkg: lib.lists.any (l: l.redistributable or false) (lib.lists.toList (pkg.meta.license or [ ]));
91   isSource =
92     pkg: !lib.lists.any (x: !(x.isSource)) (lib.lists.toList (pkg.meta.sourceProvenance or [ ]));
94   isNotLinuxKernel =
95     attrPath: !(lib.hasPrefix "linuxKernel" attrPath || lib.hasPrefix "linuxPackages" attrPath);
97   # This is handled by release-cuda.nix
98   isNotCudaPackage = attrPath: !(lib.hasPrefix "cuda" attrPath);
100   canSubstituteSrc =
101     pkg:
102     # requireFile don't allow using substituters and are therefor skipped
103     pkg.src.allowSubstitutes or true;
105   cond =
106     attrPath: pkg:
107     (isUnfree pkg)
108     && (isRedistributable pkg)
109     && (isSource pkg)
110     && (canSubstituteSrc pkg)
111     && (
112       full
113       ||
114         # We only build these heavy packages on releases
115         ((isNotCudaPackage attrPath) && (isNotLinuxKernel attrPath))
116     );
118   packages = packagesWith "" cond pkgs;
120   jobs = mapTestOn packages;
122 jobs