From ee30827e208f4fccd195aad04f59a2c1124bdd47 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 5 Dec 2025 01:52:45 +0100 Subject: [PATCH] Check nix-manual redirect targets in linkcheck Augments the manual with a generated file before running the usual check. --- doc/manual/package.nix | 42 ++++++++++----- doc/manual/redirect-targets-html.nix | 81 ++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 14 deletions(-) create mode 100644 doc/manual/redirect-targets-html.nix diff --git a/doc/manual/package.nix b/doc/manual/package.nix index 020db3408..78c4aa825 100644 --- a/doc/manual/package.nix +++ b/doc/manual/package.nix @@ -1,6 +1,8 @@ { lib, + callPackage, mkMesonDerivation, + runCommand, meson, ninja, @@ -95,22 +97,34 @@ mkMesonDerivation (finalAttrs: { */ passthru.site = finalAttrs.finalPackage + "/share/doc/nix/manual"; - passthru.tests = { - # https://nixos.org/manual/nixpkgs/stable/index.html#tester-lycheeLinkCheck - linkcheck = testers.lycheeLinkCheck { - inherit (finalAttrs.finalPackage) site; - extraConfig = { - exclude = [ - # Exclude auto-generated JSON schema documentation which has - # auto-generated fragment IDs that don't match the link references - ".*/protocols/json/.*\\.html" - # Exclude undocumented builtins - ".*/language/builtins\\.html#builtins-addErrorContext" - ".*/language/builtins\\.html#builtins-appendContext" - ]; + passthru.tests = + let + redirect-targets = callPackage ./redirect-targets-html.nix { }; + in + { + # https://nixos.org/manual/nixpkgs/stable/index.html#tester-lycheeLinkCheck + linkcheck = testers.lycheeLinkCheck { + site = + let + plain = finalAttrs.finalPackage.site; + in + runCommand "nix-manual-with-redirect-targets" { } '' + cp -r ${plain} $out + chmod -R u+w $out + cp ${redirect-targets}/redirect-targets.html $out/redirect-targets.html + ''; + extraConfig = { + exclude = [ + # Exclude auto-generated JSON schema documentation which has + # auto-generated fragment IDs that don't match the link references + ".*/protocols/json/.*\\.html" + # Exclude undocumented builtins + ".*/language/builtins\\.html#builtins-addErrorContext" + ".*/language/builtins\\.html#builtins-appendContext" + ]; + }; }; }; - }; meta = { platforms = lib.platforms.all; diff --git a/doc/manual/redirect-targets-html.nix b/doc/manual/redirect-targets-html.nix new file mode 100644 index 000000000..ffceb7e19 --- /dev/null +++ b/doc/manual/redirect-targets-html.nix @@ -0,0 +1,81 @@ +# Generates redirect-targets.html containing all redirect targets for link checking. +# Used by: doc/manual/package.nix (passthru.tests.linkcheck) + +{ + stdenv, + lib, + jq, +}: + +stdenv.mkDerivation { + name = "redirect-targets-html"; + + src = lib.fileset.toSource { + root = ./.; + fileset = lib.fileset.unions [ + ./source/_redirects + ./redirects.json + ]; + }; + + nativeBuildInputs = [ jq ]; + + installPhase = '' + mkdir -p $out + + { + echo '' + echo 'Nix Manual Redirect Targets' + echo '

Redirect Targets to Check

' + echo '

This document contains all redirect targets from the Nix manual.

' + + echo '

Server-side redirects (from _redirects)

' + echo '' + + echo '

Client-side redirects (from redirects.json)

' + echo '' + echo '' + } > $out/redirect-targets.html + + echo "Generated redirect targets document with $(grep -c '
  • ' $out/redirect-targets.html) links" + ''; + + meta = { + description = "HTML document listing all Nix manual redirect targets for link checking"; + }; +}