Skip to content

Add an ignore-patterns input for known false positives, and update the existing issue instead of opening duplicates #2

Description

@mmcky

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:

URL Reported status Actual status from a normal network
https://fred.stlouisfed.org/ 0 (Timeout) 200, 0.32s
https://fred.stlouisfed.org/series/UNRATE 0 (Timeout) 200, 0.49s

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'.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions