Problem
action-link-checker has no way to whitelist known-good URLs, so hosts that block or throttle datacenter IP ranges get reported as broken every single run. Combined with create-issue: true on a weekly cron, this opens a new duplicate issue every week for links that are perfectly fine.
Concrete case: QuantEcon/lecture-python-programming has accumulated nine open duplicate issues between 2026-06-01 and 2026-07-27, all reporting the same two links:
FRED (St. Louis Fed) throttles requests from cloud/CI IP ranges, so GitHub Actions runners time out while the links work fine for readers. Every QuantEcon lecture repo links to FRED, so this affects all of them.
The signal-to-noise ratio on these issues is now effectively zero, which is exactly how a genuine broken link gets missed. Issue QuantEcon/lecture-python-programming#587 is the first in two months to contain a real finding (a stale GitHub docs URL), and it is buried under eight identical false positives.
Request 1: an ignore-patterns input
Add an input that accepts a list of regex or glob patterns for URLs to skip entirely, mirroring Sphinx's long-standing linkcheck_ignore. Something like an ignore-patterns input taking a newline-separated list of patterns, each matched against the full URL, with matching URLs excluded from the report and from the broken/redirect counts.
The lecture repos already maintain exactly this list in _config.yml under sphinx.config.linkcheck_ignore — for lecture-python-programming that is https://fred.stlouisfed.org/.* among others. Because this action scans built HTML rather than running through Sphinx, it never sees that configuration and re-reports the same URLs indefinitely. An equivalent input would let repos keep one source of truth for known false positives.
Note that silent-codes is not a workaround here. Setting it to include 0 would silence every timeout, including real ones — it suppresses a status code, not a URL, so it trades one false-negative class for another.
This is also becoming more relevant as the lecture repos migrate to Jupyter Book 2: _config.yml is replaced by myst.yml, which has no linkcheck_ignore equivalent, so an action-level ignore list becomes the only place to record known-good-but-unreachable-from-CI URLs.
Request 2: update the existing issue instead of opening a new one
When create-issue: true and an open issue created by this action already exists in the repo, the action should update that issue (edit the body, or add a comment) rather than creating another one. Optionally gate this on a configurable label or on the issue title matching issue-title.
Right now a weekly cron against a persistent problem produces an unbounded pile of identical issues that nobody triages. Happy to split this into a separate issue if you would prefer to track the two requests independently.
Environment
Reported from the Link Checker [Anaconda, Linux] workflow in QuantEcon/lecture-python-programming, using QuantEcon/action-link-checker@main with silent-codes: '403,503', fail-on-broken: 'false', create-issue: 'true'.
Problem
action-link-checkerhas no way to whitelist known-good URLs, so hosts that block or throttle datacenter IP ranges get reported as broken every single run. Combined withcreate-issue: trueon a weekly cron, this opens a new duplicate issue every week for links that are perfectly fine.Concrete case: QuantEcon/lecture-python-programming has accumulated nine open duplicate issues between 2026-06-01 and 2026-07-27, all reporting the same two links:
0 (Timeout)200, 0.32s0 (Timeout)200, 0.49sFRED (St. Louis Fed) throttles requests from cloud/CI IP ranges, so GitHub Actions runners time out while the links work fine for readers. Every QuantEcon lecture repo links to FRED, so this affects all of them.
The signal-to-noise ratio on these issues is now effectively zero, which is exactly how a genuine broken link gets missed. Issue QuantEcon/lecture-python-programming#587 is the first in two months to contain a real finding (a stale GitHub docs URL), and it is buried under eight identical false positives.
Request 1: an
ignore-patternsinputAdd an input that accepts a list of regex or glob patterns for URLs to skip entirely, mirroring Sphinx's long-standing
linkcheck_ignore. Something like anignore-patternsinput taking a newline-separated list of patterns, each matched against the full URL, with matching URLs excluded from the report and from the broken/redirect counts.The lecture repos already maintain exactly this list in
_config.ymlundersphinx.config.linkcheck_ignore— for lecture-python-programming that ishttps://fred.stlouisfed.org/.*among others. Because this action scans built HTML rather than running through Sphinx, it never sees that configuration and re-reports the same URLs indefinitely. An equivalent input would let repos keep one source of truth for known false positives.Note that
silent-codesis not a workaround here. Setting it to include0would silence every timeout, including real ones — it suppresses a status code, not a URL, so it trades one false-negative class for another.This is also becoming more relevant as the lecture repos migrate to Jupyter Book 2:
_config.ymlis replaced bymyst.yml, which has nolinkcheck_ignoreequivalent, so an action-level ignore list becomes the only place to record known-good-but-unreachable-from-CI URLs.Request 2: update the existing issue instead of opening a new one
When
create-issue: trueand an open issue created by this action already exists in the repo, the action should update that issue (edit the body, or add a comment) rather than creating another one. Optionally gate this on a configurable label or on the issue title matchingissue-title.Right now a weekly cron against a persistent problem produces an unbounded pile of identical issues that nobody triages. Happy to split this into a separate issue if you would prefer to track the two requests independently.
Environment
Reported from the
Link Checker [Anaconda, Linux]workflow in QuantEcon/lecture-python-programming, usingQuantEcon/action-link-checker@mainwithsilent-codes: '403,503',fail-on-broken: 'false',create-issue: 'true'.