Files
2026-07-13 13:05:14 +08:00

218 lines
9.7 KiB
TOML

################################################################################
# Config for the link checker lychee.
#
# Download & learn more at:
# https://github.com/lycheeverse/lychee
#
# Example config:
# https://github.com/lycheeverse/lychee/blob/master/lychee.example.toml
#
# Run `lychee . --dump` to list all found links that are being checked.
#
# Note that by default lychee will only check markdown and html files,
# to check any other files you have to point to them explicitly, e.g.:
# `lychee **/*.rs`
# To make things worse, `exclude_path` is ignored for these globs,
# so local runs with lots of gitignored files will be slow.
# (https://github.com/lycheeverse/lychee/issues/1405)
#
# This unfortunately doesn't list anything for non-glob checks.
################################################################################
# Maximum number of concurrent link checks.
# Workaround for "too many open files" error on MacOS, see https://github.com/lycheeverse/lychee/issues/1248
max_concurrency = 96
# Check links inside `<code>` and `<pre>` blocks as well as Markdown code blocks.
include_verbatim = true
# Proceed for server connections considered insecure (invalid TLS).
insecure = true
# Maximum number of allowed retries before a link is declared dead.
max_retries = 4
# Wait time between attempts in seconds.
retry_wait_time = 2
# Comma-separated list of accepted status codes for valid links.
accept = [
"100..=103", # Informational codes.
"200..=299", # Success codes.
"429", # Too many requests. This is practically never a sign of a broken link.
"403", # A lot of endpoints always return 403 for the link checker
]
# Exclude these filesystem paths from getting checked.
exclude_path = [
# Unfortunately lychee doesn't yet read .gitignore https://github.com/lycheeverse/lychee/issues/1331
# The following entries are there because of that:
"__pycache__",
"_deps/",
".git",
".pixi",
"build",
"docs/python/",
"rerun_cpp/_deps",
"rerun_cpp/docs/html",
"rerun_cpp/docs/xml",
"rerun_cpp/src/rerun/third_party/",
"rerun_cpp/tmp/",
"rerun_js/node_modules/",
"rerun_notebook/node_modules/",
"rerun_py/site/",
"target_ra",
"target_wasm",
"target",
"venv",
# Generated ghat action definitions (contain upstream URLs we don't control)
".github/ghat/actions",
# Actually ignored files beyond .gitignore
"lychee.toml", # Contains regex patterns with URL-like strings that aren't actual links.
"crates/store/re_uri/src/lib.rs", # Contains some malformed URLs, but they are not actual links.
"crates/store/re_uri/src/redap_uri.rs", # Same as above.
"crates/store/re_grpc_server/src/lib.rs", # Contains CORS tests with fake origin URLs
"crates/utils/re_analytics/src/event.rs", # Contains test with malformed urls
"crates/utils/re_perf_telemetry/src/telemetry.rs", # Contains `parse_rerun_endpoint` docs/tests with fake `rerun://host…` URLs
"crates/viewer/re_viewer/src/reflection/mod.rs", # Checker struggles how links from examples are escaped here. They are all checked elsewhere, so not an issue.
"docs/snippets/INDEX.md", # The snippet index is guaranteed should be correct by design.
"scripts/lint.py", # Contains url-matching regexes that aren't actual urls
"scripts/screenshot_compare/assets/templates/",
".typos.toml",
]
# Exclude URLs and mail addresses from checking (supports regex).
exclude = [
# Skip speculative links
'.*?speculative-link',
# Strings with replacements.
'/__VIEWER_VERSION__/', # Replacement variable __VIEWER_VERSION__.
'/\$', # Replacement variable $.
'\$$', # URL ending in `$`: stripped template variable (e.g. `${{ inputs.X }}`).
'/GIT_HASH/', # Replacement variable GIT_HASH.
'\{\}', # Ignore links with string interpolation.
'\$relpath\^', # Relative paths as used by rerun_cpp's doc header.
'%7B.+%7D', # Ignore strings that look like ready to use links but contain a replacement strings. The URL escaping is for '{.+}' (this seems to be needed for html embedded urls since lychee assumes they use this encoding).
'%7B%7D', # Ignore links with string interpolation, escaped variant.
# Ignore storage-node example links
'rerun:/.*',
# Local links that require further setup.
'/examples', # Relative link to our examples gallery.
'http://0.0.0.0',
'http://127.0.0.1',
'http://localhost',
're_viewer.js', # Build artifact that html is linking to.
'recording:/', # rrd recording link.
'ws:/',
# API endpoints.
'https://fonts.googleapis.com/', # Font API entrypoint, not a link.
'https://fonts.gstatic.com/', # Font API entrypoint, not a link.
'https://tel.rerun.io/', # Analytics endpoint.
'https://docs-assets.developer.apple.com/ml-research/datasets/arkitscenes/v1', # Used by arkit_scenes.
'https://overpass-api.de/api/interpreter', # Used by openstreetmap_data example
# Avoid rate limiting.
'https://crates.io/crates/w\+', # Avoid crates.io rate-limiting
'https://github.com/rerun-io/rerun/commit/\.*', # Ignore links to our own commits (typically in changelog).
'https://github.com/rerun-io/rerun/pull/\.*', # Ignore links to our own pull requests (typically in changelog).
'https://github.com/rerun-io/rerun/issues/\.*', # Ignore links to our own issues.
# Intentionally faked links.
'file:///does/not/exist.rrd',
'file:///path/to/file',
'file:///tmp/droidnano/Fri_Aug_18_09:46:43_2023.rrd',
'file://foo',
'file://path/to/file.rrd',
'file://somehost/file/path.rrd',
'http://foo.*',
'http://x/',
'https://foo.*',
'https://link.to',
'https://rerun.rs',
'https://static.rerun.io/my_screenshot/',
'https://your-hosted-asset-url.com/re_viewer_bg.wasm',
'https://your-hosted-asset-url.com/widget.js',
'rerun://localhost:51234/recording/some-recording-id',
'https://customer.cloud.rerun.io/.*',
'https://redap.rerun.io',
'http://wrong-scheme',
'rerun\+http://localhost:\{grpc_port\}/proxy',
'.*scheme:/.*',
'http(s)?://example.com/.*',
'file:///uri1.rrd',
'file:///uri2.rrd',
# Link fragments and data links in examples.
'https://raw.githubusercontent.com/googlefonts/noto-emoji/', # URL fragment.
'https://static.rerun.io/rgbd_dataset', # Base data link for rgbd dataset.
'https://storage.googleapis.com/', # Storage API entrypoint, not a link.
'https://ref\.rerun\.io/prose/?$', # GCS bucket prefix, no directory index.
'https://build\.rerun\.io/mirror/mozilla/sccache/?$', # GCS bucket prefix, no directory index.
# Not accessible from CI.
'.github/workflows/.*.yml', # GitHub action workflows cause issues on CI.
'https://9p.io/sys/doc/lexnames.html', # Works locally but on CI we get: `Failed: Network error: error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:ssl/statem/extensions.c:946:`
'https://claude.site/artifacts/*', # Giving a 500, but only from CI
'https://fifteen-thirtyeight.rerun.io/script.js', # Gives 403 forbidden on CI.
'https://github.com/user-attachments/assets/.*', # Gives Not Found on CI, but works locally.
'https://git.sr.ht/*', # Bot protection returns 418 I'm a teapot on CI.
'https://lib.rs/*', # Gives 403 forbidden on CI.
'https://math.stackexchange.com/*', # Gives 403 forbidden on CI.
'https://pixabay.com/photos/brother-sister-girl-family-boy-977170/', # Gives 403 forbidden on CI.
'https://stackoverflow.com/*', # Stackoverflow links are no longer accessible from CI.
'https://vimeo.com/*', # Gives 403 forbidden on CI.
'https://vimeo/', # Malformed URL extracted from code doing startsWith checks.
'https://player.vimeo.com/*', # Gives 403 forbidden on CI.
'https://www.youtube-nocookie.com/*', # Gives 403 forbidden on CI.
'https://www.npmjs.com/*', # Gives 403 forbidden on CI.
'https://www.reddit.com/*', # Gives 403 forbidden on CI.
'https://www.shadertoy.com/*', # 403 on CI
'https://www.tensorflow.org/*', # tensorflow.org apparently blocks CI.
'https://www.unicode.org/license.txt', # Gives network error on CI.
# Need GitHub login.
'https://github.com/rerun-io/landing',
'https://github.com/rerun-io/documentation',
'https://github.com/rerun-io/dataplatform',
# Needs authentication
'https://.*\.eks\.amazonaws\.com/', # EKS API server endpoints in CI workflows.
'https://.*\.blob\.core\.windows\.net/', # Azure blob storage, requires auth.
'https://rerun\.grafana\.net/api/datasources/.*', # Grafana API endpoints, requires auth.
'https://ms-b22605aed932-7275.fra.meilisearch.io',
'https://eu.posthog.com/project/', # Requires to be logged in on PostHog.
'https://github.com/rerun-io/internal-test-assets/\.*',
'https://github.com/google/mediapipe/issues/5188', # For some reason that link has always failed.
'https://www.figma.com/.*',
'https://stilearning.com/*', # License header URL, site unreachable from CI.
# Temporarily down or not accessible.
'https://dl.acm.org/doi/10.1145/3638550.3643617', # We might be getting rate-limited here.
'https://forum.doom9.org/.*',
'https://github.com/rerun-io/rerun/releases/download/prerelease', # Pre-release downloads may go down while a pre-release updates or pre-release CI partially breaks.
'https://wiki.ros.org/.*', # Constant timeouts.
'https://www.doxygen.nl/.*', # Getting 403, but the links work.
# Works but is really slow at times:
'https://anaconda.org/conda-forge/libarrow',
'https://cvg.cit.tum.de/data/datasets/visual-inertial-dataset',
'https://openaccess.thecvf.com/content/CVPR2023/html/Du_Learning_To_Render_Novel_Views_From_Wide-Baseline_Stereo_Pairs_CVPR_2023_paper.html',
'https://picsum.photos/*',
# These are APIs:
'https://api.linear.app/graphql',
'https://api.rootly.com/.*',
'https://api.workos.com/.*',
'https://rerun.io/api',
'https://rerun.io/login',
# '^file:///', # Ignore local file links. They need to be tested, but it's useful for external links we have to ping.
]