93 lines
3.2 KiB
YAML
93 lines
3.2 KiB
YAML
name: 'Report Broken Links'
|
|
description: 'Downloads broken link reports, generates PR comment, and posts results'
|
|
|
|
inputs:
|
|
github-token:
|
|
description: 'GitHub token for posting comments'
|
|
required: false
|
|
default: ${{ github.token }}
|
|
max-links-per-file:
|
|
description: 'Maximum links to show per file in comment'
|
|
required: false
|
|
default: '20'
|
|
include-success-message:
|
|
description: 'Include success message when no broken links found'
|
|
required: false
|
|
default: 'true'
|
|
|
|
outputs:
|
|
has-broken-links:
|
|
description: 'Whether broken links were found (true/false)'
|
|
value: ${{ steps.generate-comment.outputs.has-broken-links }}
|
|
broken-link-count:
|
|
description: 'Number of broken links found'
|
|
value: ${{ steps.generate-comment.outputs.broken-link-count }}
|
|
|
|
runs:
|
|
using: 'composite'
|
|
steps:
|
|
- name: Download broken link reports
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: reports
|
|
continue-on-error: true
|
|
|
|
- name: Generate PR comment
|
|
id: generate-comment
|
|
run: |
|
|
# Generate comment using our script
|
|
node .github/scripts/comment-generator.js \
|
|
--max-links ${{ inputs.max-links-per-file }} \
|
|
${{ inputs.include-success-message == 'false' && '--no-success' || '' }} \
|
|
--output-file comment.md \
|
|
reports/ || echo "No reports found or errors occurred"
|
|
|
|
# Check if comment file was created and has content
|
|
if [[ -f comment.md && -s comment.md ]]; then
|
|
echo "comment-generated=true" >> $GITHUB_OUTPUT
|
|
|
|
# Count broken links by parsing the comment
|
|
broken_count=$(grep -o "Found [0-9]* broken link" comment.md | grep -o "[0-9]*" || echo "0")
|
|
echo "broken-link-count=$broken_count" >> $GITHUB_OUTPUT
|
|
|
|
# Check if there are actually broken links (not just a success comment)
|
|
if [[ "$broken_count" -gt 0 ]]; then
|
|
echo "has-broken-links=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "has-broken-links=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
else
|
|
echo "has-broken-links=false" >> $GITHUB_OUTPUT
|
|
echo "broken-link-count=0" >> $GITHUB_OUTPUT
|
|
echo "comment-generated=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
shell: bash
|
|
|
|
- name: Post PR comment
|
|
if: steps.generate-comment.outputs.comment-generated == 'true'
|
|
uses: actions/github-script@v7
|
|
with:
|
|
github-token: ${{ inputs.github-token }}
|
|
script: |
|
|
const fs = require('fs');
|
|
|
|
if (fs.existsSync('comment.md')) {
|
|
const comment = fs.readFileSync('comment.md', 'utf8');
|
|
|
|
if (comment.trim()) {
|
|
await github.rest.issues.createComment({
|
|
issue_number: context.issue.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
body: comment
|
|
});
|
|
}
|
|
}
|
|
|
|
- name: Set workflow status
|
|
if: steps.generate-comment.outputs.has-broken-links == 'true'
|
|
run: |
|
|
broken_count="${{ steps.generate-comment.outputs.broken-link-count }}"
|
|
echo "::error::Found $broken_count broken link(s)"
|
|
exit 1
|
|
shell: bash |