Commit: CI: Add Lychee CI test to check for broken links

4 views
Skip to first unread message

Christian Brabandt

unread,
Aug 10, 2025, 4:45:22 AM8/10/25
to vim...@googlegroups.com
CI: Add Lychee CI test to check for broken links

Commit: https://github.com/vim/vim/commit/e32465190c22af35834c81f6e5f123533389e7b5
Author: Damien Lejay <dam...@lejay.be>
Date: Sun Aug 10 10:28:58 2025 +0200

CI: Add Lychee CI test to check for broken links

closes: https://github.com/vim/vim/issues/17879

Signed-off-by: Damien Lejay <dam...@lejay.be>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml
new file mode 100644
index 000000000..e16515f0d
--- /dev/null
+++ b/.github/workflows/link-check.yml
@@ -0,0 +1,15 @@
+# .github/workflows/link-check.yml
+name: Check Links
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: '0 3 * * 0' # Every Sunday at 03:00 UTC
+jobs:
+ lychee:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Run Lychee
+ uses: lycheeverse/lychee-action@v2
+ with:
+ args: --verbose --config ci/lychee.toml .
diff --git a/Filelist b/Filelist
index 5153ded57..b52506d75 100644
--- a/Filelist
+++ b/Filelist
@@ -12,6 +12,7 @@ SRC_ALL = \
.github/workflows/ci.yml \
.github/workflows/codeql-analysis.yml \
.github/workflows/coverity.yml \
+ .github/workflows/link-check.yml \
.github/actions/test_artifacts/action.yml \
.github/dependabot.yml \
.gitignore \
@@ -24,6 +25,7 @@ SRC_ALL = \
ci/config.mk*.sed \
ci/if_ver*.vim \
ci/if_feat_check.vim \
+ ci/lychee.toml \
ci/setup-xvfb.sh \
ci/setup-sway.sh \
ci/remove_snap.sh \
diff --git a/ci/lychee.toml b/ci/lychee.toml
new file mode 100644
index 000000000..4077e7795
--- /dev/null
+++ b/ci/lychee.toml
@@ -0,0 +1,47 @@
+############################# Runtime #############################
+
+# Reasonable concurrency to avoid rate-limiting small hosts.
+max_concurrency = 14
+
+# File extensions to scan
+extensions = ["c", "h", "md", "html", "txt"]
+
+############################# Requests ############################
+
+# Accepted status codes
+# - Include 429 (Too Many Requests) to avoid marking throttled links as dead.
+accept = ["100..=103", "200..=299", "429"]
+
+# Retry each request a few times on transient network errors
+retries = 2
+retry_wait_time = 2
+
+# Timeout per request in seconds
+timeout = 20
+
+############################# Exclusions ##########################
+
+exclude = [
+ '^https?://sys/file$',
+ '^file://.*',
+ '^https?://(www\.)?badges\.debian\.net/.*$',
+ '^https?://(www\.)?repology\.org/.*$',
+ '^https?://scan\.coverity\.com/.*$',
+ '^https?://(www\.)?img\.shields\.io/.*$',
+ '^https?://(www\.)?fossies\.org/.*$',
+ '^https?://(www\.)?adobe\.com.*$',
+ '^https?://(www\.)?google\.com.*$',
+ '^https?://(www\.)?forum\.vmssoftware\.com/.*$',
+ '^http://vim\.sourceforge\.net/scripts/script\.php\?script_id=40$',
+ '^https://is\.gd/.*$',
+ '^https://wiki\.contextgarden\.net/Vim$',
+ '^https://github\.com/you/foobar\.git$',
+ '^https?://flatassembler\.net',
+ '^https?://www\.fleiner\.com/vim/download.html',
+]
+
+# Lychee only reads UTF-8 files
+exclude_path = [
+ 'src/po',
+ 'src/testdir',
+]
Reply all
Reply to author
Forward
0 new messages