mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
70 lines
2.1 KiB
Nix
70 lines
2.1 KiB
Nix
deps@{ formats, lib, lychee, stdenv, writeShellApplication }:
|
|
let
|
|
inherit (lib) mapAttrsToList throwIf;
|
|
inherit (lib.strings) hasInfix hasPrefix escapeNixString;
|
|
|
|
toURL = v:
|
|
let s = "${v}";
|
|
in if hasPrefix builtins.storeDir s
|
|
then # lychee requires that paths on the file system are prefixed with file://
|
|
"file://${s}"
|
|
else s;
|
|
|
|
withCheckedName = name:
|
|
throwIf (hasInfix " " name) ''
|
|
lycheeLinkCheck: remap patterns must not contain spaces.
|
|
A space marks the end of the regex in lychee.toml.
|
|
|
|
Please change attribute name 'remap.${escapeNixString name}'
|
|
'';
|
|
|
|
# See https://nixos.org/manual/nixpkgs/unstable/#tester-lycheeLinkCheck
|
|
# or doc/build-helpers/testers.chapter.md
|
|
lycheeLinkCheck = {
|
|
site,
|
|
remap ? { },
|
|
lychee ? deps.lychee,
|
|
extraConfig ? { },
|
|
}:
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
name = "lychee-link-check";
|
|
inherit site;
|
|
nativeBuildInputs = [ finalAttrs.passthru.lychee ];
|
|
configFile = (formats.toml {}).generate "lychee.toml" finalAttrs.passthru.config;
|
|
|
|
# These can be overriden with overrideAttrs if needed.
|
|
passthru = {
|
|
inherit lychee remap;
|
|
config = {
|
|
include_fragments = true;
|
|
} // lib.optionalAttrs (finalAttrs.passthru.remap != { }) {
|
|
remap =
|
|
mapAttrsToList
|
|
(name: value: withCheckedName name "${name} ${toURL value}")
|
|
finalAttrs.passthru.remap;
|
|
} // extraConfig;
|
|
online = writeShellApplication {
|
|
name = "run-lychee-online";
|
|
runtimeInputs = [ finalAttrs.passthru.lychee ];
|
|
# Comment out to run shellcheck:
|
|
checkPhase = "";
|
|
text = ''
|
|
site=${finalAttrs.site}
|
|
configFile=${finalAttrs.configFile}
|
|
echo Checking links on $site
|
|
exec lychee --config $configFile $site "$@"
|
|
'';
|
|
};
|
|
};
|
|
buildCommand = ''
|
|
echo Checking internal links on $site
|
|
lychee --offline --config $configFile $site
|
|
touch $out
|
|
'';
|
|
});
|
|
|
|
in
|
|
{
|
|
inherit lycheeLinkCheck;
|
|
}
|