GitHub Action
hahwul/deadfinder is a composite action that downloads the matching release binary, verifies its sha256, and executes the scan. Runs on Linux (x86_64/aarch64) and macOS (arm64). Intel macOS runners (macos-13) are not supported — use macos-latest.
Pin a version
Always pin a released ref. @latest is not a valid Actions ref (GitHub has no auto-resolver for it).
- uses: hahwul/deadfinder@v2 # tracks latest 2.x — gets bug-fix patches automatically
# or
- uses: hahwul/deadfinder@2.0.2 # exact pin — fully reproducible
The version input can override the binary independently of the action ref:
- uses: hahwul/deadfinder@v2
with:
version: "2.0.2" # download binary from this release tag
Full example
steps:
- name: Run DeadFinder
uses: hahwul/deadfinder@v2
id: scan
with:
command: sitemap
target: https://www.example.com/sitemap.xml
# Optional:
# timeout: 10
# concurrency: 50
# include30x: false
# headers: "X-API-Key: secret"
# worker_headers: "User-Agent: Deadfinder Bot"
# user_agent: "MyBot/1.0"
# proxy: "http://localhost:8080"
# proxy_auth: "user:pass"
# match: "^https://example\\.com/"
# ignore: "\\.png$"
# coverage: true
# visualize: report.png
# silent: false
# verbose: false
- name: Handle results
run: echo '${{ steps.scan.outputs.output }}' | jq '.'
Inputs
| Input | Required | Default | Notes |
|---|---|---|---|
command |
✓ | — | url / file / pipe / sitemap |
target |
✓ | — | URL, file path, or sitemap URL |
version |
latest |
Release tag; latest resolves to most recent release |
|
timeout |
10 |
seconds | |
concurrency |
50 |
workers | |
silent |
false |
string "true" to enable |
|
verbose |
false |
||
include30x |
false |
||
headers |
"" |
comma-separated "Key: Value" pairs |
|
worker_headers |
"" |
headers for link-check requests | |
user_agent |
"" |
overrides default UA | |
proxy |
"" |
HTTP/HTTPS proxy URL | |
proxy_auth |
"" |
user:pass |
|
match |
"" |
regex | |
ignore |
"" |
regex | |
coverage |
false |
||
visualize |
"" |
file path (implies coverage) |
Outputs
| Output | Shape |
|---|---|
output |
Compact JSON string of the scan result (same shape as -f json output). |
Consume with fromJSON():
- run: |
echo "Dead links: ${{ fromJSON(steps.scan.outputs.output).summary }}"
Migrating from v1
The v1 action was Docker-based and bundled the Ruby gem. v2 is a composite action that downloads the Crystal binary directly. All v1 inputs are preserved. worker_headers was previously undeclared but wired through args — it's now a formal input. version is new. No inputs were renamed or removed.
Pin to @1.10.0 to keep the v1 behavior; use @v2 (or pin a specific 2.x tag like @2.0.2) for v2.