mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-11-09 16:18:34 +01:00
196 lines
5.4 KiB
Nix
196 lines
5.4 KiB
Nix
{ lib, ... }:
|
|
rec {
|
|
# Borrowed from https://github.com/NixOS/nixpkgs/pull/355616
|
|
uniqueStrings = list: builtins.attrNames (builtins.groupBy lib.id list);
|
|
|
|
/*
|
|
Converts a `packagePlatformPath` into a `packagePlatformAttr`
|
|
|
|
Turns
|
|
"hello.aarch64-linux"
|
|
into
|
|
{
|
|
name = "hello";
|
|
packagePath = [ "hello" ];
|
|
platform = "aarch64-linux";
|
|
}
|
|
*/
|
|
convertToPackagePlatformAttr =
|
|
packagePlatformPath:
|
|
let
|
|
# python312Packages.numpy.aarch64-linux -> ["python312Packages" "numpy" "aarch64-linux"]
|
|
splittedPath = lib.splitString "." packagePlatformPath;
|
|
|
|
# ["python312Packages" "numpy" "aarch64-linux"] -> ["python312Packages" "numpy"]
|
|
packagePath = lib.init splittedPath;
|
|
|
|
# "python312Packages.numpy"
|
|
name = lib.concatStringsSep "." packagePath;
|
|
in
|
|
if name == "" then
|
|
null
|
|
else
|
|
{
|
|
# [ "python312Packages" "numpy" ]
|
|
inherit packagePath;
|
|
|
|
# python312Packages.numpy
|
|
inherit name;
|
|
|
|
# "aarch64-linux"
|
|
platform = lib.last splittedPath;
|
|
};
|
|
|
|
/*
|
|
Converts a list of `packagePlatformPath`s into a list of `packagePlatformAttr`s
|
|
|
|
Turns
|
|
[
|
|
"hello.aarch64-linux"
|
|
"hello.x86_64-linux"
|
|
"hello.aarch64-darwin"
|
|
"hello.x86_64-darwin"
|
|
"bye.x86_64-darwin"
|
|
"bye.aarch64-darwin"
|
|
"release-checks" <- Will be dropped
|
|
]
|
|
into
|
|
[
|
|
{ name = "hello"; platform = "aarch64-linux"; packagePath = [ "hello" ]; }
|
|
{ name = "hello"; platform = "x86_64-linux"; packagePath = [ "hello" ]; }
|
|
{ name = "hello"; platform = "aarch64-darwin"; packagePath = [ "hello" ]; }
|
|
{ name = "hello"; platform = "x86_64-darwin"; packagePath = [ "hello" ]; }
|
|
{ name = "bye"; platform = "aarch64-darwin"; packagePath = [ "hello" ]; }
|
|
{ name = "bye"; platform = "x86_64-darwin"; packagePath = [ "hello" ]; }
|
|
]
|
|
*/
|
|
convertToPackagePlatformAttrs =
|
|
packagePlatformPaths:
|
|
builtins.filter (x: x != null) (map convertToPackagePlatformAttr packagePlatformPaths);
|
|
|
|
/*
|
|
Converts a list of `packagePlatformPath`s directly to a list of (unique) package names
|
|
|
|
Turns
|
|
[
|
|
"hello.aarch64-linux"
|
|
"hello.x86_64-linux"
|
|
"hello.aarch64-darwin"
|
|
"hello.x86_64-darwin"
|
|
"bye.x86_64-darwin"
|
|
"bye.aarch64-darwin"
|
|
]
|
|
into
|
|
[
|
|
"hello"
|
|
"bye"
|
|
]
|
|
*/
|
|
extractPackageNames =
|
|
packagePlatformPaths:
|
|
let
|
|
packagePlatformAttrs = convertToPackagePlatformAttrs (uniqueStrings packagePlatformPaths);
|
|
in
|
|
uniqueStrings (map (p: p.name) packagePlatformAttrs);
|
|
|
|
/*
|
|
Group a list of `packagePlatformAttr`s by platforms
|
|
|
|
Turns
|
|
[
|
|
{ name = "hello"; platform = "aarch64-linux"; ... }
|
|
{ name = "hello"; platform = "x86_64-linux"; ... }
|
|
{ name = "hello"; platform = "aarch64-darwin"; ... }
|
|
{ name = "hello"; platform = "x86_64-darwin"; ... }
|
|
{ name = "bye"; platform = "aarch64-darwin"; ... }
|
|
{ name = "bye"; platform = "x86_64-darwin"; ... }
|
|
]
|
|
into
|
|
{
|
|
aarch64-linux = [ "hello" ];
|
|
x86_64-linux = [ "hello" ];
|
|
aarch64-darwin = [ "hello" "bye" ];
|
|
x86_64-darwin = [ "hello" "bye" ];
|
|
}
|
|
*/
|
|
groupByPlatform =
|
|
packagePlatformAttrs:
|
|
let
|
|
packagePlatformAttrsByPlatform = builtins.groupBy (p: p.platform) packagePlatformAttrs;
|
|
extractPackageNames = map (p: p.name);
|
|
in
|
|
lib.mapAttrs (_: extractPackageNames) packagePlatformAttrsByPlatform;
|
|
|
|
# Turns
|
|
# [
|
|
# { name = "hello"; platform = "aarch64-linux"; ... }
|
|
# { name = "hello"; platform = "x86_64-linux"; ... }
|
|
# { name = "hello"; platform = "aarch64-darwin"; ... }
|
|
# { name = "hello"; platform = "x86_64-darwin"; ... }
|
|
# { name = "bye"; platform = "aarch64-darwin"; ... }
|
|
# { name = "bye"; platform = "x86_64-darwin"; ... }
|
|
# ]
|
|
#
|
|
# into
|
|
#
|
|
# {
|
|
# linux = [ "hello" ];
|
|
# darwin = [ "hello" "bye" ];
|
|
# }
|
|
groupByKernel =
|
|
packagePlatformAttrs:
|
|
let
|
|
filterKernel =
|
|
kernel:
|
|
builtins.attrNames (
|
|
builtins.groupBy (p: p.name) (
|
|
builtins.filter (p: lib.hasSuffix kernel p.platform) packagePlatformAttrs
|
|
)
|
|
);
|
|
in
|
|
lib.genAttrs [ "linux" "darwin" ] filterKernel;
|
|
|
|
/*
|
|
Maps an attrs of `kernel - rebuild counts` mappings to an attrs of labels
|
|
|
|
Turns
|
|
{
|
|
linux = 56;
|
|
darwin = 1;
|
|
}
|
|
into
|
|
{
|
|
"10.rebuild-darwin: 1" = true;
|
|
"10.rebuild-darwin: 1-10" = true;
|
|
"10.rebuild-darwin: 11-100" = false;
|
|
# [...]
|
|
"10.rebuild-darwin: 1" = false;
|
|
"10.rebuild-darwin: 1-10" = false;
|
|
"10.rebuild-linux: 11-100" = true;
|
|
# [...]
|
|
}
|
|
*/
|
|
getLabels =
|
|
rebuildCountByKernel:
|
|
lib.mergeAttrsList (
|
|
lib.mapAttrsToList (
|
|
kernel: rebuildCount:
|
|
let
|
|
range = from: to: from <= rebuildCount && (to == null || rebuildCount <= to);
|
|
in
|
|
lib.mapAttrs' (number: lib.nameValuePair "10.rebuild-${kernel}: ${number}") {
|
|
"0" = range 0 0;
|
|
"1" = range 1 1;
|
|
"1-10" = range 1 10;
|
|
"11-100" = range 11 100;
|
|
"101-500" = range 101 500;
|
|
"501-1000" = range 501 1000;
|
|
"501+" = range 501 null;
|
|
"1001-2500" = range 1001 2500;
|
|
"2501-5000" = range 2501 5000;
|
|
"5001+" = range 5001 null;
|
|
}
|
|
) rebuildCountByKernel
|
|
);
|
|
}
|