diff --git a/.github/workflows/pr-check-links.yml b/.github/workflows/pr-check-links.yml index c2713550..5f6c99cb 100644 --- a/.github/workflows/pr-check-links.yml +++ b/.github/workflows/pr-check-links.yml @@ -11,22 +11,30 @@ jobs: - 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 }} - fetch-depth: 0 + + - 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: Create baseline branch by reverting feature branch changes run: | # Create a copy of the feature branch - git checkout -b baseline-copy - - # Find the base commit where the feature branch diverged from main - base_commit=$(git merge-base origin/main baseline-copy) + git checkout -b feature-baseline # Reset the new branch to the base commit - git reset --hard $base_commit + git reset --hard ${{ env.base_commit }} - - name: Dump all links from baseline-copy + - name: Dump all links from feature-baseline uses: lycheeverse/lychee-action@v2.0.2 with: args: | @@ -46,6 +54,34 @@ jobs: - name: Print .lycheeignore run: cat .lycheeignore + - name: Dump names of files altered in PR and append hash sign to find links with anchors + 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: In .lycheeignore, remove links with anchors referring to altered files + run: | + while IFS= read -r line; do + sed -i "\|$line|d" .lycheeignore + done < altered-files.txt + + - name: In .lycheeignore, remove links with anchors referring to renamed files + run: | + while IFS= read -r line; do + sed -i "\|$line|d" .lycheeignore + done < renamed-files.txt + + - name: Print .lycheeignore with unaffected links + run: cat .lycheeignore + - name: Check links uses: lycheeverse/lychee-action@v2.0.2 with: