pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / build-support / testers / lychee.nix
blobba22ba856973218dd42b3f4caa243e91b58fb6c6
1 deps@{ formats, lib, lychee, stdenv, writeShellApplication }:
2 let
3   inherit (lib) mapAttrsToList throwIf;
4   inherit (lib.strings) hasInfix hasPrefix escapeNixString;
6   toURL = v:
7     let s = "${v}";
8     in if hasPrefix builtins.storeDir s
9     then # lychee requires that paths on the file system are prefixed with file://
10       "file://${s}"
11     else s;
13   withCheckedName = name:
14     throwIf (hasInfix " " name) ''
15       lycheeLinkCheck: remap patterns must not contain spaces.
16       A space marks the end of the regex in lychee.toml.
18       Please change attribute name 'remap.${escapeNixString name}'
19     '';
21   # See https://nixos.org/manual/nixpkgs/unstable/#tester-lycheeLinkCheck
22   # or doc/build-helpers/testers.chapter.md
23   lycheeLinkCheck = {
24     site,
25     remap ? { },
26     lychee ? deps.lychee,
27     extraConfig ? { },
28   }:
29     stdenv.mkDerivation (finalAttrs: {
30       name = "lychee-link-check";
31       inherit site;
32       nativeBuildInputs = [ finalAttrs.passthru.lychee ];
33       configFile = (formats.toml {}).generate "lychee.toml" finalAttrs.passthru.config;
35       # These can be overriden with overrideAttrs if needed.
36       passthru = {
37         inherit lychee remap;
38         config = {
39           include_fragments = true;
40         } // lib.optionalAttrs (finalAttrs.passthru.remap != { }) {
41           remap =
42             mapAttrsToList
43               (name: value: withCheckedName name "${name} ${toURL value}")
44               finalAttrs.passthru.remap;
45         } // extraConfig;
46         online = writeShellApplication {
47           name = "run-lychee-online";
48           runtimeInputs = [ finalAttrs.passthru.lychee ];
49           # Comment out to run shellcheck:
50           checkPhase = "";
51           text = ''
52             site=${finalAttrs.site}
53             configFile=${finalAttrs.configFile}
54             echo Checking links on $site
55             exec lychee --config $configFile $site "$@"
56           '';
57         };
58       };
59       buildCommand = ''
60         echo Checking internal links on $site
61         lychee --offline --config $configFile $site
62         touch $out
63       '';
64     });
68   inherit lycheeLinkCheck;