Commit c01dba4633

c01dba4633dd14ecfdaac508b12d347c55ee8af0

parent: 44cb7ee485

Unsigned

cmc <hello@cleberg.net> · 2026-08-22 03:54 UTC

Check links weekly, and point six internal links at their canonical URLs

The six links were written before a URL scheme change and only resolved because
the web server redirects the old paths. orgo --strict did not catch them: it
resolves file: links, and these were bare relative paths passed through as
opaque URLs. Rewriting them as file: links makes orgo validate them from now on
and drops a redirect hop. Link text is unchanged.

Internal links fail the job, external links only report — a dead third-party
link is worth knowing about but is not a reason to block the site.

Layout: unified · split

.github/workflows/link-check.yml added +83
@@ -0,0 +1,83 @@
1name: Link check
2
3# Weekly rather than per-PR: most of these links are external, and the web is
4# flaky enough that a per-PR run would fail for reasons no author controls.
5# The paths filter still runs it on any PR that edits this workflow, so a change
6# here is validated by the thing it changes.
7on:
8 schedule:
9 - cron: "0 7 * * 1"
10 workflow_dispatch:
11 pull_request:
12 paths: [".github/workflows/link-check.yml"]
13
14permissions:
15 contents: read
16
17env:
18 ORGO_VERSION: "0.22.0"
19
20jobs:
21 links:
22 runs-on: ubuntu-latest
23 steps:
24 - uses: actions/checkout@v7
25
26 - name: Cache orgo
27 id: cache-orgo
28 uses: actions/cache@v6
29 with:
30 path: ~/.cargo/bin/orgo
31 key: orgo-${{ env.ORGO_VERSION }}-${{ runner.os }}
32
33 - name: Install orgo
34 if: steps.cache-orgo.outputs.cache-hit != 'true'
35 run: cargo install orgo --version "$ORGO_VERSION" --locked
36
37 # orgo directly, not build.py. A production build rewrites
38 # img.cleberg.net URLs to /img/, which is served from a different docroot
39 # and would look like 198 broken links here. The development output keeps
40 # them absolute, so the image host gets checked for real.
41 - name: Build the site
42 run: orgo build content -o .build-dev --strict
43
44 # Internal links are the half worth gating on: they are entirely within
45 # this repo, so a failure is always a real defect and always fixable here.
46 - name: Internal links
47 uses: lycheeverse/lychee-action@v2.9.0
48 with:
49 args: --offline --base .build-dev --include-verbatim '.build-dev/**/*.html'
50 fail: true
51 output: internal.md
52
53 # External links are reported, not gated. A dead third-party link is worth
54 # knowing about, but it is not a reason to block the site.
55 - name: External links
56 uses: lycheeverse/lychee-action@v2.9.0
57 with:
58 args: >-
59 --exclude-mail
60 --exclude '\.onion'
61 --max-concurrency 8
62 --max-retries 2
63 --timeout 20
64 --accept 200,206,301,302,303,307,308,401,403,429
65 --include-verbatim
66 '.build-dev/**/*.html'
67 fail: false
68 output: external.md
69
70 - name: Summary
71 if: always()
72 run: |
73 { echo "## Internal"; cat internal.md 2>/dev/null || echo "no report";
74 echo; echo "## External"; cat external.md 2>/dev/null || echo "no report";
75 } >> "$GITHUB_STEP_SUMMARY"
76
77 - uses: actions/upload-artifact@v7
78 if: always()
79 with:
80 name: link-reports
81 path: |
82 internal.md
83 external.md
content/blog/2020-01-25-linux-software.org +1 −1
@@ -179,7 +179,7 @@ Finally, install the program:
179sudo pacman -S steam 179sudo pacman -S steam
180#+end_src 180#+end_src
181 181
182[[./2020-01-26-steam-on-ntfs-drives.html][Problem Launching Steam Games? Click Here.]] 182[[file:2020-01-26-steam-on-ntfs.org][Problem Launching Steam Games? Click Here.]]
183 183
184* Command-Line Packages 184* Command-Line Packages
185 185
content/blog/2020-01-26-steam-on-ntfs.org +1 −1
@@ -6,7 +6,7 @@
6 6
7* Auto-Mount Steam Drives 7* Auto-Mount Steam Drives
8 8
9If you want to see how to install Steam on Linux, see my other post: [[../linux-software/][Linux 9If you want to see how to install Steam on Linux, see my other post: [[file:2020-01-25-linux-software.org][Linux
10Software]]. 10Software]].
11 11
12Are you having trouble launching games, even though they've installed correctly? 12Are you having trouble launching games, even though they've installed correctly?
content/blog/2020-02-09-cryptography-basics.org +1 −1
@@ -6,7 +6,7 @@
6 6
7* Similar Article Available 7* Similar Article Available
8 8
9If you haven't already, feel free to read my post on [[../aes-encryption/][AES Encryption]]. 9If you haven't already, feel free to read my post on [[file:2018-11-28-aes-encryption.org][AES Encryption]].
10 10
11* What is Cryptography? 11* What is Cryptography?
12 12
content/blog/2020-03-25-session-messenger.org +1 −1
@@ -9,7 +9,7 @@
9The company behind Session (Loki Foundation) is from Australia. If you didn't 9The company behind Session (Loki Foundation) is from Australia. If you didn't
10know, Australia has introduced [[https://parlinfo.aph.gov.au/parlInfo/download/legislation/bills/r6195_aspassed/toc_pdf/18204b01.pdf][legislation]] mandating companies comply with 10know, Australia has introduced [[https://parlinfo.aph.gov.au/parlInfo/download/legislation/bills/r6195_aspassed/toc_pdf/18204b01.pdf][legislation]] mandating companies comply with
11government requests to build back door access into applications. For more 11government requests to build back door access into applications. For more
12information, read my article on [[./2020-01-25-aes-encryption.html][AES Encryption]]. 12information, read my article on [[file:2018-11-28-aes-encryption.org][AES Encryption]].
13 13
14* About Session 14* About Session
15 15
content/blog/2021-04-17-gemini-server.org +1 −1
@@ -7,7 +7,7 @@
7* Similar Article Available 7* Similar Article Available
8 8
9To read more about Gemini and ways to test out this new protocol without your 9To read more about Gemini and ways to test out this new protocol without your
10own server, see my previous post [[../launching-a-gemini-capsule/][Launching a Gemini Capsule]]. 10own server, see my previous post [[file:2021-03-28-gemini-capsule.org][Launching a Gemini Capsule]].
11 11
12* Preparation 12* Preparation
13 13
content/blog/2024-02-13-ubuntu-emergency-mode.org +1 −1
@@ -6,7 +6,7 @@
6 6
7* The Problem 7* The Problem
8 8
9I recently [[../zfs/][migrated my hard drives to a ZFS pool]] and found myself stuck in 9I recently [[file:2024-02-06-zfs.org][migrated my hard drives to a ZFS pool]] and found myself stuck in
10Ubuntu's emergency mode after the first reboot I performed after creating the 10Ubuntu's emergency mode after the first reboot I performed after creating the
11ZFS pool. 11ZFS pool.
12 12