mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-09 19:13:26 +03:00

The vast majority of CI jobs to build the lib tests are caused by changes in the maintainer list. In this case, we currently run the full test-suite which takes 3-4 minutes. By moving the maintainers and teams tests out of the test-with-nix file, we save almost all of that. Building only those two tests on a change is almost instant. This only works, because we previously enabled cachix for the workflow. Note, that these tests are not actually run with both nix versions, even though they were listed in the "test with specific nix version" file. That's because we only differ in the nix version run *inside* the sandbox, but not doing the outer build. Since this file seems to be re-used by NixOS/nix' CI, this is technically a small loss in coverage for that repo, but nixpkgs CI considerations outweigh that. But because of this, I left the other non-nix-version-specific tests in that file.
76 lines
2.7 KiB
Nix
76 lines
2.7 KiB
Nix
# to run these tests (and the others)
|
|
# nix-build nixpkgs/lib/tests/release.nix
|
|
# These tests should stay in sync with the comment in maintainers/maintainer-list.nix
|
|
{
|
|
# The pkgs used for dependencies for the testing itself
|
|
pkgs ? import ../.. { },
|
|
lib ? pkgs.lib,
|
|
}:
|
|
|
|
let
|
|
checkMaintainer =
|
|
handle: uncheckedAttrs:
|
|
let
|
|
prefix = [
|
|
"lib"
|
|
"maintainers"
|
|
handle
|
|
];
|
|
checkedAttrs =
|
|
(lib.modules.evalModules {
|
|
inherit prefix;
|
|
modules = [
|
|
./maintainer-module.nix
|
|
{
|
|
_file = toString ../../maintainers/maintainer-list.nix;
|
|
config = uncheckedAttrs;
|
|
}
|
|
];
|
|
}).config;
|
|
|
|
checks =
|
|
lib.optional (checkedAttrs.github != null && checkedAttrs.githubId == null) ''
|
|
echo ${lib.escapeShellArg (lib.showOption prefix)}': If `github` is specified, `githubId` must be too.'
|
|
# Calling this too often would hit non-authenticated API limits, but this
|
|
# shouldn't happen since such errors will get fixed rather quickly
|
|
info=$(curl -sS https://api.github.com/users/${checkedAttrs.github})
|
|
id=$(jq -r '.id' <<< "$info")
|
|
echo "The GitHub ID for GitHub user ${checkedAttrs.github} is $id:"
|
|
echo -e " githubId = $id;\n"
|
|
''
|
|
++
|
|
lib.optional
|
|
(checkedAttrs.email == null && checkedAttrs.github == null && checkedAttrs.matrix == null)
|
|
''
|
|
echo ${lib.escapeShellArg (lib.showOption prefix)}': At least one of `email`, `github` or `matrix` must be specified, so that users know how to reach you.'
|
|
''
|
|
++
|
|
lib.optional (checkedAttrs.email != null && lib.hasSuffix "noreply.github.com" checkedAttrs.email)
|
|
''
|
|
echo ${lib.escapeShellArg (lib.showOption prefix)}': If an email address is given, it should allow people to reach you. If you do not want that, you can just provide `github` or `matrix` instead.'
|
|
'';
|
|
in
|
|
lib.deepSeq checkedAttrs checks;
|
|
|
|
missingGithubIds = lib.concatLists (lib.mapAttrsToList checkMaintainer lib.maintainers);
|
|
|
|
success = pkgs.runCommand "checked-maintainers-success" { } "mkdir $out";
|
|
|
|
failure =
|
|
pkgs.runCommand "checked-maintainers-failure"
|
|
{
|
|
nativeBuildInputs = [
|
|
pkgs.curl
|
|
pkgs.jq
|
|
];
|
|
outputHash = "sha256:${lib.fakeSha256}";
|
|
outputHAlgo = "sha256";
|
|
outputHashMode = "flat";
|
|
SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
|
|
}
|
|
''
|
|
${lib.concatStringsSep "\n" missingGithubIds}
|
|
exit 1
|
|
'';
|
|
in
|
|
if missingGithubIds == [ ] then success else failure
|