Skip to content

ci: Add script &CI to check dead links #4

ci: Add script &CI to check dead links

ci: Add script &CI to check dead links #4

name: Check Dead Links
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
check-links:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Verify wget installation
run: wget --version
- name: Extract URLs from all documentation
id: extract_urls
run: |
FILE_EXTENSIONS="*.md *.html *.txt"
find . \( -name "*.md" -o -name "*.html" -o -name "*.txt" \) -type f -print0 | \
xargs -0 grep -hoP '(https?://[^\s)]+)' > urls.txt || true
sort -u urls.txt -o urls.txt
echo "Total URLs found: $(wc -l < urls.txt)"
grep -vE '<HOST>|http://callback/url|http://control-plane' urls.txt > filtered_urls.txt
echo "Total URLs after exclusion: $(wc -l < filtered_urls.txt)"
- name: Check if URLs were found
run: |
if [ ! -s filtered_urls.txt ]; then
echo "No URLs found to check after applying exclusions."
exit 0
fi
- name: Check URLs
run: |
TOTAL=0
FAILED=0
DEAD_LINKS=()
while IFS= read -r url; do
TOTAL=$((TOTAL +1))
echo "[$TOTAL] Checking URL: $url"
wget --spider --quiet --timeout=10 "$url"
if [ $? -ne 0 ]; then
echo "❌ Dead link found: $url"
DEAD_LINKS+=("$url")
FAILED=$((FAILED +1))
else
echo "✅ Link is valid: $url"
fi
done < filtered_urls.txt
echo "Total links checked: $TOTAL"
echo "Dead links found: $FAILED"
if [ "$FAILED" -ne 0 ]; then
echo "::error::Found $FAILED dead links."
for dead in "${DEAD_LINKS[@]}"; do
echo "::error::Dead link: $dead"
done
printf "*Found %d dead links:*\\n" "$FAILED" > dead_links.md
for dead in "${DEAD_LINKS[@]}"; do
printf "- %s\\n" "$dead" >> dead_links.md
done
cat dead_links.md
exit 1
else
echo "All $TOTAL links are valid."
fi