Skip to content

ci[pr-check-links]: dump links from baseline commit for pr link checking #329

ci[pr-check-links]: dump links from baseline commit for pr link checking

ci[pr-check-links]: dump links from baseline commit for pr link checking #329

Workflow file for this run

name: Check links in diffs
on:
pull_request:
branches: [main]
jobs:
check-links:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Set environment variables
id: set-env
run: |
# Extract the base commit ID where the feature branch diverged from main
base_commit=$(git merge-base origin/main ${{ github.event.pull_request.head.ref }})
echo "base_commit=$base_commit" >> $GITHUB_ENV
# Extract the head commit ID on the feature branch
head_commit=${{ github.event.pull_request.head.sha }}
echo "head_commit=$head_commit" >> $GITHUB_ENV
- name: Print commit IDs
run: |
echo ${{ env.base_commit }}
echo $(git merge-base origin/main ${{ github.event.pull_request.head.ref }})
echo ${{ env.head_commit }}
- name: Create baseline branch by reverting feature branch changes
run: |
# Create a copy of the feature branch
git checkout -b baseline-copy
# Reset the new branch to the base commit
git reset --hard ${{ env.base_commit }}
- name: Dump all links from baseline-copy
uses: lycheeverse/[email protected]
with:
args: |
--dump
--include-fragments
--exclude-path ./themes/
--exclude-path ./layouts/
.
output: links-baseline.txt
- name: Check out feature branch
run: git checkout ${{ github.head_ref }}
- name: Append links-baseline.txt to .lycheeignore
run: cat links-baseline.txt >> .lycheeignore
- name: Print .lycheeignore
run: cat .lycheeignore
- name: Print commit IDs
run: |
echo ${{ env.base_commit }}
echo ${{ env.head_commit }}
- name: Dump names of files altered in PR and add prefix to each file
run: |
git diff --name-only --diff-filter=DM ${{ env.base_commit }} ${{ env.head_commit }} > altered-files.txt
sed -i 's|$|#|' altered-files.txt
git diff --name-status --diff-filter=R ${{ env.base_commit }} ${{ env.head_commit }} | awk '{print $2}' > renamed-files.txt
sed -i 's|$|#|' renamed-files.txt
- name: Print altered-files.txt
run: cat altered-files.txt
- name: Print renamed-files.txt
run: cat renamed-files.txt
- name: Remove links to altered files in .lycheeignore
run: |
while IFS= read -r line; do
sed -i "\|$line|d" .lycheeignore
done < altered-files.txt
- name: Remove links to altered files in .lycheeignore
run: |
while IFS= read -r line; do
sed -i "\|$line|d" .lycheeignore
done < renamed-files.txt
- name: Print .lycheeignore
run: cat .lycheeignore
- name: Check links
uses: lycheeverse/[email protected]
with:
args: |
--no-progress
--include-fragments
--exclude-path ./themes/
--exclude-path ./layouts/
.
fail: true # Fail action if broken links are found
- name: Suggestions
if: failure()
run: |
echo -e "\nPlease review the links reported in the Check links step above."
echo -e "If a link is valid but fails due to a CAPTCHA challenge, IP blocking, login requirements, etc.,"
echo -e "consider adding such links to the .lycheeignore file to bypass future checks.\n"
exit 1
- name: Clean up all changes
if: always()
run: |
git reset --hard HEAD
git clean -df