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 @@ |
| 1 | name: 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. |
| 7 | on: |
| 8 | schedule: |
| 9 | - cron: "0 7 * * 1" |
| 10 | workflow_dispatch: |
| 11 | pull_request: |
| 12 | paths: [".github/workflows/link-check.yml"] |
| 13 | |
| 14 | permissions: |
| 15 | contents: read |
| 16 | |
| 17 | env: |
| 18 | ORGO_VERSION: "0.22.0" |
| 19 | |
| 20 | jobs: |
| 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: |
| 179 | 179 | sudo pacman -S steam |
| 180 | 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 | 184 | * Command-Line Packages |
| 185 | 185 | |
content/blog/2020-01-26-steam-on-ntfs.org
+1 −1
| @@ -6,7 +6,7 @@ |
| 6 | 6 | |
| 7 | 7 | * Auto-Mount Steam Drives |
| 8 | 8 | |
| 9 | | If you want to see how to install Steam on Linux, see my other post: [[../linux-software/][Linux |
| 9 | If you want to see how to install Steam on Linux, see my other post: [[file:2020-01-25-linux-software.org][Linux |
| 10 | 10 | Software]]. |
| 11 | 11 | |
| 12 | 12 | Are 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 | 7 | * Similar Article Available |
| 8 | 8 | |
| 9 | | If you haven't already, feel free to read my post on [[../aes-encryption/][AES Encryption]]. |
| 9 | If you haven't already, feel free to read my post on [[file:2018-11-28-aes-encryption.org][AES Encryption]]. |
| 10 | 10 | |
| 11 | 11 | * What is Cryptography? |
| 12 | 12 | |
content/blog/2020-03-25-session-messenger.org
+1 −1
| @@ -9,7 +9,7 @@ |
| 9 | 9 | The company behind Session (Loki Foundation) is from Australia. If you didn't |
| 10 | 10 | know, Australia has introduced [[https://parlinfo.aph.gov.au/parlInfo/download/legislation/bills/r6195_aspassed/toc_pdf/18204b01.pdf][legislation]] mandating companies comply with |
| 11 | 11 | government requests to build back door access into applications. For more |
| 12 | | information, read my article on [[./2020-01-25-aes-encryption.html][AES Encryption]]. |
| 12 | information, read my article on [[file:2018-11-28-aes-encryption.org][AES Encryption]]. |
| 13 | 13 | |
| 14 | 14 | * About Session |
| 15 | 15 | |
content/blog/2021-04-17-gemini-server.org
+1 −1
| @@ -7,7 +7,7 @@ |
| 7 | 7 | * Similar Article Available |
| 8 | 8 | |
| 9 | 9 | To read more about Gemini and ways to test out this new protocol without your |
| 10 | | own server, see my previous post [[../launching-a-gemini-capsule/][Launching a Gemini Capsule]]. |
| 10 | own server, see my previous post [[file:2021-03-28-gemini-capsule.org][Launching a Gemini Capsule]]. |
| 11 | 11 | |
| 12 | 12 | * Preparation |
| 13 | 13 | |
content/blog/2024-02-13-ubuntu-emergency-mode.org
+1 −1
| @@ -6,7 +6,7 @@ |
| 6 | 6 | |
| 7 | 7 | * The Problem |
| 8 | 8 | |
| 9 | | I recently [[../zfs/][migrated my hard drives to a ZFS pool]] and found myself stuck in |
| 9 | I recently [[file:2024-02-06-zfs.org][migrated my hard drives to a ZFS pool]] and found myself stuck in |
| 10 | 10 | Ubuntu's emergency mode after the first reboot I performed after creating the |
| 11 | 11 | ZFS pool. |
| 12 | 12 | |