blob: eb9b8a190b7f70652a4ce3f3b4859fa024b20406 [file] [log] [blame]
name: Check links daily
on:
workflow_dispatch:
schedule:
- cron: "18 0 * * *"
permissions:
issues: write # to create an issue when link check fails
env:
OUTPUT_FILE: lychee.md
jobs:
build-and-check-links:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@main
- name: Install lychee
env:
LYCHEEVERSION: 0.13.0
# due to the limitation of Apache, we can't use lycheeverse/lychee-action directly,
# so we re-use some core code from it
run: |
curl -sLO "https://github.com/lycheeverse/lychee/releases/download/v${{ env.LYCHEEVERSION }}/lychee-v${{ env.LYCHEEVERSION }}-x86_64-unknown-linux-gnu.tar.gz"
tar -xvzf "lychee-v${{ env.LYCHEEVERSION }}-x86_64-unknown-linux-gnu.tar.gz"
rm "lychee-v${{ env.LYCHEEVERSION }}-x86_64-unknown-linux-gnu.tar.gz"
install -t "$HOME/.local/bin" -D lychee
rm lychee
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Link Checker
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
# For parameter description, see https://github.com/lycheeverse/lychee#commandline-parameters
# -E, --exclude-all-private Exclude all private IPs from checking.
# -i, --insecure Proceed for server connections considered insecure (invalid TLS)
# -n, --no-progress Do not show progress bar.
# -t, --timeout <timeout> Website timeout in seconds from connect to response finished [default:20]
# --max-concurrency <max-concurrency> Maximum number of concurrent network requests [default: 128]
# -a --accept <accept> Comma-separated list of accepted status codes for valid links
# -m, --max-redirects <MAX_REDIRECTS>
# 'build': the site directory to check
# './*.md': all markdown files in the root directory
run: |
# run lychee
GITHUB_WORKFLOW_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}?check_suite_focus=true"
if ! lychee --output ${OUTPUT_FILE} \
-E -i -n -t 5 --max-concurrency 64 -a 429,401,403 -m 10 -f markdown -s http -s https -X HEAD \
'**/*.md'
then
echo "" >> "${OUTPUT_FILE}" # add a new line
echo "[Full Github Actions output](${GITHUB_WORKFLOW_URL})" >> "${OUTPUT_FILE}"
gh issue list -S "is:open Broken links found in the website"
if ! gh issue list -S "is:open Broken links found in the website" | grep -F "Broken links found in the website"; then
gh issue create --title "Broken links found in the website" --body-file "${OUTPUT_FILE}" --repo "${GITHUB_REPOSITORY}" --assignee "${GITHUB_ACTOR}" --label "type/bug"
else
echo "Broken links found in the website, but an issue already exists."
fi
exit 1
fi