Luke Hagar f74fe031f2 Add debug logging for filesystem traversal in URL collection functions
Introduce debug output in CollectURLsWithIgnoreConfig, CollectURLsProgressWithIgnoreConfig, and CollectURLsV2 functions to log the paths being walked during filesystem traversal. This change aids in debugging and provides better visibility into the URL collection process.
2025-09-19 19:06:44 +00:00
2025-09-11 15:59:53 +00:00
2025-09-11 15:59:53 +00:00
2025-09-11 15:59:53 +00:00

Validate external links across your repository. Ships as a self-contained GitHub Action (Docker) and a CLI.

Quick start (GitHub Action)

Add a workflow:

name: Slinky
on:
  pull_request:
    branches: [ main ]
jobs:
  slinky:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
      - name: Run Slinky
        uses: LukeHagar/slinky@v1
        with:
          targets: "docs/,README.md,**/*.md"

Inputs

  • targets: Comma-separated paths and patterns to scan. Can be directories, files, or glob patterns (e.g. docs/,api-specs/**/*.yaml,README.md). Default: **/*
  • concurrency: Max concurrent requests. Default: 16
  • timeout: HTTP timeout seconds. Default: 10
  • json-out: Optional JSON results path. Default: results.json
  • md-out: Optional Markdown report path. Default: results.md
  • repo-blob-base: Override GitHub blob base URL (https://github.com/<owner>/<repo>/blob/<sha>). Auto-detected in Actions.
  • fail-on-failures: Fail job on any broken links. Default: true
  • comment-pr: Post Markdown as a PR comment when applicable. Default: true
  • step-summary: Append report to the job summary. Default: true

When running on PRs, Slinky auto-links files using the PR head commit. You can override with repo-blob-base.

CLI

Install (from source):

go build -o slinky ./

Usage:

# Headless: provide one or more targets (files, dirs, or globs)
slinky check **/*
slinky check ./docs/**/* ./markdown/**/*

# TUI mode: same targets
slinky run **/*

Notes:

  • Targets can be files, directories, or doublestar globs. Multiple targets are allowed.
  • If no targets are provided, the default is **/* relative to the current working directory.

Notes

  • Respects .gitignore.
  • Skips likely binary files and files > 2 MiB.
  • Uses a browser-like User-Agent to reduce false negatives.

.slinkignore

Place a .slinkignore file at the repository root to exclude paths and/or specific URLs from scanning and reporting. The format is JSON with two optional arrays:

{
  "ignorePaths": [
    "**/vendor/**",
    "**/*.bak"
  ],
  "ignoreURLs": [
    "https://example.com/this/path/does/not/exist",
    "*localhost:*",
    "*internal.example.com*"
  ]
}
  • ignorePaths: gitignore-style patterns evaluated against repository-relative paths (uses doublestar **).
  • ignoreURLs: patterns applied to the full URL string. Supports exact matches, substring contains, and doublestar-style wildcard matches.

Examples:

  • Ignore generated folders: "**/dist/**", backups: "**/*.bak".
  • Ignore known example or placeholder links: "*example.com*", "https://example.com/foo".
Description
No description provided
Readme 6 MiB
Languages
Go 95.2%
Shell 3.1%
Makefile 1.2%
Dockerfile 0.5%