eryajf / lychee-action

Github action to check for broken links in Markdown, HTML, and text files using lychee, a fast link checker written in Rust.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

lychee link checking action

GitHub Marketplace Check Links

Quickly check links in Markdown, HTML, and text files using lychee.

When used in conjunction with Create Issue From File, issues will be opened when the action finds link problems.

Usage

Here is a full example of a GitHub workflow file:

It will check all repository links once per day and create an issue in case of errors. Save this under .github/workflows/links.yml:

name: Links

on:
  repository_dispatch:
  workflow_dispatch:
  schedule:
    - cron: "00 18 * * *"

jobs:
  linkChecker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Link Checker
        id: lychee
        uses: lycheeverse/lychee-action@v1.6.1
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

      - name: Create Issue From File
        if: env.lychee_exit_code != 0
        uses: peter-evans/create-issue-from-file@v4
        with:
          title: Link Checker Report
          content-filepath: ./lychee/out.md
          labels: report, automated issue

If you always want to use the latest features but avoid breaking changes, you can replace the version with
lycheeverse/lychee-action@v1.

Alternative approach:

This will check all repository links during any git push event and for all pull requests. If there's an error, it will fail the action. This has the benefit of ensuring that during a Pull Request, no link is added that is broken and any existing link will be caught if they become broken. Save this under .github/workflows/links-fail-fast.yml:

name: Links (Fail Fast)

on:
  push:
  pull_request:

jobs:
  linkChecker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Link Checker
        uses: lycheeverse/lychee-action@v1.6.1
        with:
          fail: true
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

Passing arguments

This action uses lychee for link checking. lychee arguments can be passed to the action via the args parameter.

On top of that, the action also supports some additional arguments.

Argument Examples Description
args --cache, --insecure See lychee's documentation for all arguments and values.
debug false Enable debug output in action (set -x). Helpful for troubleshooting.
fail false Fail workflow run on error (i.e. when lychee exit code is not 0).
format markdown, json Summary output format.
jobSummary false Write Github job summary (on Markdown output only).
lycheeVersion 0.11.1 Overwrite the lychee version to be used.
output lychee/results.md Summary output file path.

See action.yml for a full list of supported arguments and their default values.

Example of argument passing

- name: Link Checker
  uses: lycheeverse/lychee-action@v1.6.1
  with:
    # Check all markdown and html files in repo (default)
    args: --verbose --no-progress './**/*.md' './**/*.html'
    # Use json as output format (instead of markdown)
    format: json
    # Use different output file path
    output: /tmp/foo.txt
    # Fail action on broken links
    fail: true

Utilising the cache feature

In order to mitigate issues regarding rate limiting or to reduce stress on external resources, one can setup lychee's cache similar to this:

- name: Restore lychee cache
  uses: actions/cache@v3
  with:
    path: .lycheecache
    key: cache-lychee-${{ github.sha }}
    restore-keys: cache-lychee-

- name: Run lychee
  uses: lycheeverse/lychee-action@v1.6.1
  with:
    args: "--cache --max-cache-age 1d"

Note that there is no need for another step at the end to store the cache. There will automatically be a Post step (generated from the used actions/cache action) taking care of that. It will compare and save the cache based on the given key. So in this setup, as long as a user triggers the CI run from the same commit, it will be the same key. The first run will save the cache, subsequent runs will not update it (because it's the same commit hash). For restoring the cache, the most recent available one is used (commit hash doesn't matter).

Excluding links from getting checked

Add a .lycheeignore file to the root of your repository to exclude links from getting checked. It supports regular expressions. One expression per line.

Fancy badge

Pro tip: You can add a little badge to your repo to show the status of your links. Just replace org with your organisation name and repo with the repository name and put it into your README.md:

[![Check Links](https://github.com/org/repo/actions/workflows/links.yml/badge.svg)](https://github.com/org/repo/actions/workflows/links.yml)

It will look like this:

Check Links

Troubleshooting and common problems

See lychee's Troubleshooting Guide for solutions to common link-checking problems.

Performance

A full CI run to scan 576 links takes approximately 1 minute for the analysis-tools-dev/static-analysis repository.

Security and Updates

It is recommended to pin lychee-action to a fixed version for security reasons. You can use dependabot to automatically keep your Github actions up-to-date. This is a great way to pin lychee-action, while still receiving updates in the future. It's a relatively easy thing to do.

Create a file named .github/dependabot.yml with the following contents:

version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: ".github/workflows"
    schedule:
      interval: "daily"

When you add or update the dependabot.yml file, this triggers an immediate check for version updates. Please see the documentation for all configuration options.

Security tip

For additional security when relying on automation to update actions you can pin the action to a SHA-256 rather than the semver version so as to avoid tag spoofing Dependabot will still be able to automatically update this.

For example:

- name: Link Checker
  uses: lycheeverse/lychee-action@d322e38893906cef8788eefe9c63694c562c7dfa # for v1.6.1

Credits

This action is based on the deprecated peter-evans/link-checker and uses lychee (written in Rust) instead of liche (written in Go) for link checking.

License

lychee is licensed under either of

at your option.

About

Github action to check for broken links in Markdown, HTML, and text files using lychee, a fast link checker written in Rust.

License:Apache License 2.0


Languages

Language:Shell 100.0%