Skip to content

Fix GH Action for link checking #34

Fix GH Action for link checking

Fix GH Action for link checking #34

Workflow file for this run

---
name: Check Links
on:
workflow_dispatch:
push:
branches: [main]
paths-ignore: [src/**, tests/**, "**.py"]
pull_request:
types: [opened, synchronize, reopened]
paths-ignore: [src/**, tests/**, "**.py"]
concurrency:
# New commit on branch cancels running workflows of the same branch
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check-absolute-links:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
outputs:
exit_code: ${{ steps.check-absolute.outputs.exit_code }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: pip install requests
- name: Check Absolute Links
id: check-absolute
run: |
# Only check absolute links (http/https), not relative links
python docs/link_checker.py --dir docs/book --substring "http" --validate-links --timeout 15 --ci-mode
# Capture the exit code even if the command fails
EXIT_CODE=$?
echo "exit_code=$EXIT_CODE" >> $GITHUB_OUTPUT
# Don't exit with error yet, as we want to keep the exit code for the summary step
exit 0
- name: Mark job status based on check result
if: steps.check-absolute.outputs.exit_code != '0'
run: |
echo "::error::Absolute links check failed! Found broken links."
exit 1
check-relative-links:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
outputs:
exit_code: ${{ steps.check-relative.outputs.exit_code }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Check Relative Links
id: check-relative
run: |
# Check if relative links resolve within the repository
python scripts/check_relative_links.py --dir docs/book
# Capture the exit code even if the command fails
EXIT_CODE=$?
echo "exit_code=$EXIT_CODE" >> $GITHUB_OUTPUT
# Don't exit with error yet, as we want to keep the exit code for the summary step
exit 0
- name: Mark job status based on check result
if: steps.check-relative.outputs.exit_code != '0'
run: |
echo "::error::Relative links check failed! Found broken links."
exit 1
summary:
needs: [check-absolute-links, check-relative-links]
if: always() && github.event.pull_request.draft == false
runs-on: ubuntu-latest
steps:
- name: Create Summary
id: create-summary
run: |-
echo "# Documentation Link Check Results" >> $GITHUB_STEP_SUMMARY
# Initialize FAILED variable
FAILED=false
# Create summary content for PR comment
COMMENT_BODY="## Documentation Link Check Results\n\n"
# Check for failures in absolute links job
if [[ "${{ needs.check-absolute-links.outputs.exit_code }}" != "0" ]]; then
echo "❌ **Absolute links check failed**" >> $GITHUB_STEP_SUMMARY
echo "There are broken absolute links in the documentation. Please check the job logs for details." >> $GITHUB_STEP_SUMMARY
COMMENT_BODY+="❌ **Absolute links check failed**\n\nThere are broken absolute links in the documentation. [See workflow logs for details](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})\n\n"
FAILED=true
else
echo "✅ **Absolute links check passed**" >> $GITHUB_STEP_SUMMARY
COMMENT_BODY+="✅ **Absolute links check passed**\n\n"
fi
# Check for failures in relative links job
if [[ "${{ needs.check-relative-links.outputs.exit_code }}" != "0" ]]; then
echo "❌ **Relative links check failed**" >> $GITHUB_STEP_SUMMARY
echo "There are broken relative links in the documentation. Please check the job logs for details." >> $GITHUB_STEP_SUMMARY
COMMENT_BODY+="❌ **Relative links check failed**\n\nThere are broken relative links in the documentation. [See workflow logs for details](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})\n\n"
FAILED=true
else
echo "✅ **Relative links check passed**" >> $GITHUB_STEP_SUMMARY
COMMENT_BODY+="✅ **Relative links check passed**\n\n"
fi
# Add timestamp
COMMENT_BODY+="\n\n<sub>Last checked: $(date -u '+%Y-%m-%d %H:%M:%S UTC')</sub>"
# Save comment body to output
echo "comment_body<<EOF" >> $GITHUB_OUTPUT
echo "$COMMENT_BODY" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
# Save failed status to output
echo "failed=$FAILED" >> $GITHUB_OUTPUT
# Exit with failure if any checks failed
if [[ "$FAILED" == "true" ]]; then
echo "::error::One or more link checks failed. Please fix the broken links."
exit 1
fi
- name: Find Comment
uses: peter-evans/find-comment@v2
if: github.event_name == 'pull_request'
id: find-comment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: "github-actions[bot]"
body-includes: "Documentation Link Check Results"
- name: Create or Update Comment
uses: peter-evans/create-or-update-comment@v2
if: github.event_name == 'pull_request'
with:
comment-id: ${{ steps.find-comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: ${{ steps.create-summary.outputs.comment_body }}
edit-mode: replace