cmc/cleberg.net

My personal web garden & blog.

clone: git clone https://gitbay.org/cmc/cleberg.net.git

c24efba1df05f6682bc84f1b7d35bdd6ddc5609c

unsigned

author: Christian Cleberg <hello@cleberg.net> · 2026-08-22T03:58:15Z

Drop --exclude-mail, and assert the external check ran

mailto is excluded by default in lychee 0.24.2; the flag does not exist, so the
step died on an invalid argument. Because fail: false also swallows a crash, it
reported success while checking nothing — the guard makes that impossible.
 .github/workflows/link-check.yml | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml
index 2cb2d01..9575f0c 100644
--- a/.github/workflows/link-check.yml
+++ b/.github/workflows/link-check.yml
@@ -60,7 +60,6 @@ jobs:
         uses: lycheeverse/lychee-action@v2.9.0
         with:
           args: >-
-            --exclude-mail
             --root-dir ${{ github.workspace }}/.build-dev
             --exclude '\.onion'
             --max-concurrency 8
@@ -72,6 +71,17 @@ jobs:
           fail: false
           output: external.md
 
+      # `fail: false` stops a dead third-party link failing the job — but it also
+      # swallows lychee refusing to start at all, which reports success while
+      # checking nothing. Assert the report has a summary table in it.
+      - name: External step actually ran
+        run: |
+          if ! grep -q "Total" external.md; then
+            echo "::error::lychee produced no summary — it did not run"
+            cat external.md
+            exit 1
+          fi
+
       - name: Summary
         if: always()
         run: |