diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | .gitlab-ci.yml | 11 | ||||
-rwxr-xr-x | bin/check_links | 40 | ||||
-rwxr-xr-x | bin/make_redirects | 2 | ||||
-rw-r--r-- | spec/README.md | 50 |
5 files changed, 80 insertions, 26 deletions
@@ -14,3 +14,6 @@ # mdbook outputs /html + +# bin/check_links output +/html.link-check diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b82c3c..95a4783 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,6 +17,17 @@ build: paths: - cache +link-check: + image: rust:bookworm + script: + - cargo install mdbook + - apt-get update && apt-get install -y git python3 python3-yaml linklint + - ./bin/build_html + - ./bin/check_links + artifacts: + paths: + - html.link-check + include: project: tpo/tpa/ci-templates file: diff --git a/bin/check_links b/bin/check_links new file mode 100755 index 0000000..890ac30 --- /dev/null +++ b/bin/check_links @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Check rustdoc HTML links and anchors +# bin/build_html must have been run first. +# +# Adapted from +# https://gitlab.torproject.org/Diziet/rust-derive-adhoc/-/blob/main/maint/check-doc-links?ref_type=heads + +set -e +set -o pipefail + +# nailing-cargo --no-nail --- bin/build_html +# nailing-cargo --preclean=no --- bin/check_links + +chk_dir=html.link-check + +rm -rf html.link-check +cp -al html $chk_dir + +# Fix up https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=425632 + +find $chk_dir -name \*.html -print0 | +xargs -0r -- perl -i~ -pe ' + s{\bid=("[^"]+")[^<>]*\>}{$&<a name=$1>}g; +' + +linklint -out linklint.errors -error -root $chk_dir / + +cat linklint.errors + +set +e +grep ERROR linklint.errors +rc=$? +set -e + +case $rc in +0) echo >&2 '** found linkcheck errors **'; exit 1;; +1) ;; +*) echo >&2 "linkcheck failed $rc"; exit 1;; +esac diff --git a/bin/make_redirects b/bin/make_redirects index ea8ea3b..4cd4e05 100755 --- a/bin/make_redirects +++ b/bin/make_redirects @@ -43,7 +43,7 @@ def readme_redirects(rs): for kwd, info in rs.items(): target = info['target'] desc = info['description'] - lines.append(f'<dt><a href="/{kwd}"><code>/{kwd}</code></a></dt>\n') + lines.append(f'<dt><code>/{kwd}</code></dt>\n') lines.append(f'<dd><a href="{target}"><code>{target}</code> ({desc})</a></dt>\n') lines.append("</dl>\n") diff --git a/spec/README.md b/spec/README.md index 6d1dfeb..f4f8d1a 100644 --- a/spec/README.md +++ b/spec/README.md @@ -46,7 +46,7 @@ its documentation. To edit these specs, clone the [git repository] and edit the appropriate file in the [`spec` directory]. These files will match the URLs of their corresponding pages, so if you want to edit -[`tor-spec/flow-control.html`](./tor-spec/flow-control), +[`tor-spec/flow-control.html`], you'll be looking for a file called [`spec/tor-spec/flow-control.md`]. @@ -97,53 +97,53 @@ long-term permalinks. <!-- BEGIN AUTO-GENERATED REDIRECTS --> <dl> -<dt><a href="/address-spec"><code>/address-spec</code></a></dt> +<dt><code>/address-spec</code></dt> <dd><a href="https://spec.torproject.org/address-spec"><code>https://spec.torproject.org/address-spec</code> (Special Hostnames in Tor)</a></dt> -<dt><a href="/bandwidth-file-spec"><code>/bandwidth-file-spec</code></a></dt> +<dt><code>/bandwidth-file-spec</code></dt> <dd><a href="https://spec.torproject.org/bandwidth-file-spec"><code>https://spec.torproject.org/bandwidth-file-spec</code> (Directory Authority Bandwidth File spec)</a></dt> -<dt><a href="/bridgedb-spec"><code>/bridgedb-spec</code></a></dt> +<dt><code>/bridgedb-spec</code></dt> <dd><a href="https://spec.torproject.org/bridgedb-spec"><code>https://spec.torproject.org/bridgedb-spec</code> (BridgeDB specification)</a></dt> -<dt><a href="/cert-spec"><code>/cert-spec</code></a></dt> +<dt><code>/cert-spec</code></dt> <dd><a href="https://spec.torproject.org/cert-spec"><code>https://spec.torproject.org/cert-spec</code> (Ed25519 certificates in Tor)</a></dt> -<dt><a href="/collector-protocol"><code>/collector-protocol</code></a></dt> +<dt><code>/collector-protocol</code></dt> <dd><a href="https://gitlab.torproject.org/tpo/network-health/metrics/collector/-/blob/master/src/main/resources/docs/PROTOCOL?ref_type=heads"><code>https://gitlab.torproject.org/tpo/network-health/metrics/collector/-/blob/master/src/main/resources/docs/PROTOCOL?ref_type=heads</code> (Protocol of CollecTor's File Structure)</a></dt> -<dt><a href="/control-spec"><code>/control-spec</code></a></dt> +<dt><code>/control-spec</code></dt> <dd><a href="https://spec.torproject.org/control-spec"><code>https://spec.torproject.org/control-spec</code> (Tor control protocol, version 1)</a></dt> -<dt><a href="/dir-spec"><code>/dir-spec</code></a></dt> +<dt><code>/dir-spec</code></dt> <dd><a href="https://spec.torproject.org/dir-spec"><code>https://spec.torproject.org/dir-spec</code> (Tor directory protocol, version 3)</a></dt> -<dt><a href="/dir-list-spec"><code>/dir-list-spec</code></a></dt> +<dt><code>/dir-list-spec</code></dt> <dd><a href="https://spec.torproject.org/dir-list-spec"><code>https://spec.torproject.org/dir-list-spec</code> (Tor Directory List file format)</a></dt> -<dt><a href="/ext-orport-spec"><code>/ext-orport-spec</code></a></dt> +<dt><code>/ext-orport-spec</code></dt> <dd><a href="https://spec.torproject.org/ext-orport-spec"><code>https://spec.torproject.org/ext-orport-spec</code> (Extended ORPort for pluggable transports)</a></dt> -<dt><a href="/gettor-spec"><code>/gettor-spec</code></a></dt> +<dt><code>/gettor-spec</code></dt> <dd><a href="https://gitlab.torproject.org/tpo/core/torspec/-/raw/main/attic/text_formats/gettor-spec.txt?ref_type=heads"><code>https://gitlab.torproject.org/tpo/core/torspec/-/raw/main/attic/text_formats/gettor-spec.txt?ref_type=heads</code> (GetTor specification)</a></dt> -<dt><a href="/padding-spec"><code>/padding-spec</code></a></dt> +<dt><code>/padding-spec</code></dt> <dd><a href="https://spec.torproject.org/padding-spec"><code>https://spec.torproject.org/padding-spec</code> (Tor Padding Specification)</a></dt> -<dt><a href="/path-spec"><code>/path-spec</code></a></dt> +<dt><code>/path-spec</code></dt> <dd><a href="https://spec.torproject.org/path-spec"><code>https://spec.torproject.org/path-spec</code> (Tor Path Specification)</a></dt> -<dt><a href="/pt-spec"><code>/pt-spec</code></a></dt> +<dt><code>/pt-spec</code></dt> <dd><a href="https://spec.torproject.org/pt-spec"><code>https://spec.torproject.org/pt-spec</code> (Tor Pluggable Transport Specification, version 1)</a></dt> -<dt><a href="/rend-spec"><code>/rend-spec</code></a></dt> +<dt><code>/rend-spec</code></dt> <dd><a href="https://spec.torproject.org/rend-spec"><code>https://spec.torproject.org/rend-spec</code> (Tor Onion Service Rendezvous Specification, latest version)</a></dt> -<dt><a href="/rend-spec-v2"><code>/rend-spec-v2</code></a></dt> +<dt><code>/rend-spec-v2</code></dt> <dd><a href="https://gitlab.torproject.org/tpo/core/torspec/-/blob/main/attic/rend-spec-v2.txt?ref_type=heads"><code>https://gitlab.torproject.org/tpo/core/torspec/-/blob/main/attic/rend-spec-v2.txt?ref_type=heads</code> (Tor Onion Service Rendezvous Specification, Version 2 (Obsolete))</a></dt> -<dt><a href="/rend-spec-v3"><code>/rend-spec-v3</code></a></dt> +<dt><code>/rend-spec-v3</code></dt> <dd><a href="https://spec.torproject.org/rend-spec"><code>https://spec.torproject.org/rend-spec</code> (Tor Onion Service Rendezvous Specification, Version 3 (Latest))</a></dt> -<dt><a href="/socks-extensions"><code>/socks-extensions</code></a></dt> +<dt><code>/socks-extensions</code></dt> <dd><a href="https://spec.torproject.org/socks-extensions"><code>https://spec.torproject.org/socks-extensions</code> (Tor's extensions to the SOCKS protocol)</a></dt> -<dt><a href="/srv-spec"><code>/srv-spec</code></a></dt> +<dt><code>/srv-spec</code></dt> <dd><a href="https://spec.torproject.org/srv-spec"><code>https://spec.torproject.org/srv-spec</code> (Tor Shared Random Subsystem Specification)</a></dt> -<dt><a href="/tor-fw-helper-spec"><code>/tor-fw-helper-spec</code></a></dt> +<dt><code>/tor-fw-helper-spec</code></dt> <dd><a href="https://gitlab.torproject.org/tpo/core/torspec/-/blob/main/attic/tor-fw-helper-spec.txt?ref_type=heads"><code>https://gitlab.torproject.org/tpo/core/torspec/-/blob/main/attic/tor-fw-helper-spec.txt?ref_type=heads</code> (Tor's (little) Firewall Helper specification)</a></dt> -<dt><a href="/tor-spec"><code>/tor-spec</code></a></dt> +<dt><code>/tor-spec</code></dt> <dd><a href="https://spec.torproject.org/tor-spec"><code>https://spec.torproject.org/tor-spec</code> (Tor Protocol Specification)</a></dt> -<dt><a href="/torbrowser-design"><code>/torbrowser-design</code></a></dt> +<dt><code>/torbrowser-design</code></dt> <dd><a href="https://2019.www.torproject.org/projects/torbrowser/design/"><code>https://2019.www.torproject.org/projects/torbrowser/design/</code> (The Design and Implementation of the Tor Browser)</a></dt> -<dt><a href="/version-spec"><code>/version-spec</code></a></dt> +<dt><code>/version-spec</code></dt> <dd><a href="https://spec.torproject.org/version-spec"><code>https://spec.torproject.org/version-spec</code> (How Tor Version Numbers Work)</a></dt> -<dt><a href="/tor-design"><code>/tor-design</code></a></dt> +<dt><code>/tor-design</code></dt> <dd><a href="https://svn.torproject.org/svn/projects/design-paper/tor-design.pdf"><code>https://svn.torproject.org/svn/projects/design-paper/tor-design.pdf</code> (Tor: The Second-Generation Onion Router)</a></dt> -<dt><a href="/walking-onions"><code>/walking-onions</code></a></dt> +<dt><code>/walking-onions</code></dt> <dd><a href="https://spec.torproject.org/proposals/323-walking-onions-full.html"><code>https://spec.torproject.org/proposals/323-walking-onions-full.html</code> (Walking Onions specifications)</a></dt> </dl> <!-- END AUTO-GENERATED REDIRECTS --> |