Skip to content

Commit

Permalink
update PR link checker workflow
Browse files Browse the repository at this point in the history
Use a different changed-files checker (the old one was no longer
maintained) and also make the link checking more fine-grained by only
checking added lines for broken links.

We now use a matrix to parallelize over changed files. This slows down
the complete workflow a bit in some cases, but it does offer a nicer
user experience, because the files that are checked will now be shown in
the GitHub UI itself, instead of only in the workflow run logs.

Lychee is installed directly from the GitHub nightly release. This is
really fast. The original reason, though, was because there is no Ubuntu
package for Lychee. Works out well, though.

Determining the base SHA is a bit convoluted, because GitHub does not
provide this in a usable way. See
https://www.kenmuse.com/blog/the-many-shas-of-a-github-pull-request/ for
a good overview of this problem. The git rev-parse command was suggested
there. The fetch depth must be at least two, otherwise the base SHA
cannot be used.
  • Loading branch information
egpbos committed Sep 29, 2024
1 parent 823ec15 commit 49e9524
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 21 deletions.
49 changes: 29 additions & 20 deletions .github/workflows/link-checker-pr.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,37 @@
name: Link Checker for Pull requests
on: pull_request
jobs:
changedFiles:
runs-on: ubuntu-latest
outputs:
files: ${{ steps.changed-markdown-files.outputs.all_changed_files }}
steps:
- uses: actions/checkout@v4
- name: Get changed markdown files
id: changed-markdown-files
uses: tj-actions/changed-files@v45
with:
# Avoid using single or double quotes for multiline patterns
files: |
**.md
matrix: true

linkChecker:
runs-on: ubuntu-latest
needs: changedFiles
strategy:
matrix:
file: ${{ fromJSON(needs.changedFiles.outputs.files) }}
fail-fast: false
steps:
- uses: actions/checkout@v3
- id: changed_files
uses: jitterbit/get-changed-files@v1
- name: Link Checker
uses: lycheeverse/[email protected]
id: lychee
env:
GITHUB_TOKEN: ${{secrets.TOKEN_GITHUB}}
- uses: actions/checkout@v4
with:
args: ${{ steps.changed_files.outputs.all }}
- name: Count broken links
fetch-depth: 2
- name: download Lychee
run: |
wget https://github.com/lycheeverse/lychee/releases/download/nightly/lychee-x86_64-unknown-linux-gnu.tar.gz
tar xzf lychee-x86_64-unknown-linux-gnu.tar.gz
- name: Check all this file's additions for broken links
run: |
broken_max=10
broken_count=$(printf "%d" $(grep "🚫 Errors" lychee/out.md | cut -d'|' -f3))
if [ "$broken_count" -gt "$broken_max" ]; then
echo "Number of broken links (${broken_count}) exceeds maximum allowed number (${broken_max})."
cat lychee/out.md
exit 1
else
echo "Number of broken links (${broken_count}) less than or equal to maximum allowed number (${broken_max})."
exit 0
fi
export base_sha=$(git rev-parse ${{ github.sha }}^)
git diff -U0 ${base_sha} ${{ github.event.pull_request.head.sha }} -- ${{ matrix.file }} | grep -v "+++" | grep "^+" | cut -c 2- | ./lychee -
2 changes: 1 addition & 1 deletion _sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@
* [R](/best_practices/language_guides/r.md)
* [C and C++](/best_practices/language_guides/ccpp.md)
* [Fortran](/best_practices/language_guides/fortran.md)
* [Contributing to this Guide](/CONTRIBUTING.md)
* [Contributing to this Guide](/CONTRIBUTING.md)

0 comments on commit 49e9524

Please sign in to comment.