Skip to content
Prev Previous commit
Next Next commit
Add check redirects GH action
  • Loading branch information
svekars committed Jun 26, 2025
commit d03f15b07f5fb29b68128a6d4cb9b700208cbbad
27 changes: 15 additions & 12 deletions check_redirects.sh → .github/scripts/check_redirects.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
#!/bin/bash

# Get the base branch (usually main or master)
BASE_BRANCH="main"
CURRENT_BRANCH=$(git branch --show-current)
if [ "$CURRENT_BRANCH" == "$BASE_BRANCH" ]; then
echo "Running on $BASE_BRANCH branch. Skipping check."
exit 0
fi


# Get list of deleted or renamed files in this branch compared to base
DELETED_FILES=$(git diff --name-status $BASE_BRANCH $CURRENT_BRANCH | grep '^D\|^R' | awk '{print $2}' | grep -E '\.(rst|py|ipynb)$' | grep -v 'redirects.py')
DELETED_FILES=$(git diff --name-status $BASE_BRANCH $CURRENT_BRANCH --diff-filter=DR | grep -E '\.(rst|py|md)$' | grep
| awk '{print $2}' | grep -E '\.(rst|py|md)$' | grep -v 'redirects.py')

# Check if any deleted or renamed files were found
if [ -z "$DELETED_FILES" ]; then
echo "No deleted or renamed files found. Skipping check."
exit 0
Expand All @@ -16,22 +20,22 @@ echo "Deleted or renamed files:"
echo "$DELETED_FILES"

# Check if redirects.py has been updated
REDIRECTS_UPDATED=$(git diff --name-status $BASE_BRANCH $CURRENT_BRANCH | grep -E '^M|^A' | grep 'redirects.py' && echo "yes" || echo "no")
REDIRECTS_UPDATED=$(git diff --name-status $BASE_BRANCH $CURRENT_BRANCH --diff-filter=AM | grep 'redirects.py' && echo "yes" || echo "no")

if [ "$REDIRECTS_UPDATED" == "no" ]; then
echo "ERROR: Files were deleted or renamed but redirects.py was not updated."
echo "ERROR: Files were deleted or renamed but redirects.py was not updated. Please update .github/scripts/redirects.py to redirect these files."
exit 1
fi

# Check if each deleted file has a redirect entry
MISSING_REDIRECTS=0
for FILE in $DELETED_FILES; do
# Convert file path to URL path format (remove extension and adjust path)
URL_PATH=$(echo $FILE | sed 's/\.rst$//g' | sed 's/\.py$//g' | sed 's/\.ipynb$//g' | sed 's/^tutorials\///g')
# Check if this path exists in redirects.py
if ! grep -q "\"$URL_PATH\"" tutorials/redirects.py; then
echo "ERROR: Missing redirect for deleted file: $FILE (URL path: $URL_PATH)"
REDIRECT_PATH=$(echo $FILE | sed -E 's/(.+)_source\/(.+)\.(py|rst|md|ipynb)$/\1\/\2.html/')

# Check if this path exists in redirects.py as a key (without checking the target)
if ! grep -q "\"$REDIRECT_PATH\":" redirects.py; then
echo "ERROR: Missing redirect for deleted file: $FILE (should have entry for \"$REDIRECT_PATH\")"
MISSING_REDIRECTS=1
fi
done
Expand All @@ -42,4 +46,3 @@ if [ $MISSING_REDIRECTS -eq 1 ]; then
fi

echo "All deleted/renamed files have proper redirects. Check passed!"

56 changes: 9 additions & 47 deletions .github/workflows/check-redirects.yml
Original file line number Diff line number Diff line change
@@ -1,63 +1,25 @@
name: Check Redirects for Deleted Files
name: Check Redirects for Deleted or Renamed Files

on:
pull_request:
paths:
- '**/*.rst'
- '**/*.py'
- '**/*.md'

jobs:
check-redirects:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Check for deleted/renamed files and redirects
- name: Run redirect check script
run: |
# Get list of deleted or renamed files in this PR
DELETED_FILES=$(git diff --name-status ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep '^D\|^R' | awk '{print $2}' | grep -E '\.(rst|py|ipynb)$' | grep -v 'redirects.py')

if [ -z "$DELETED_FILES" ]; then
echo "No deleted or renamed files found. Skipping check."
exit 0
fi

echo "Deleted or renamed files:"
echo "$DELETED_FILES"

# Check if redirects.py has been updated
REDIRECTS_UPDATED=$(git diff --name-status ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -q '^M\|^A' | grep 'redirects.py' && echo "yes" || echo "no")

if [ "$REDIRECTS_UPDATED" == "no" ]; then
echo "::error::Files were deleted or renamed but redirects.py was not updated. Please add redirects for deleted/renamed files."
exit 1
fi

# Check if each deleted file has a redirect entry
MISSING_REDIRECTS=0
for FILE in $DELETED_FILES; do
# Convert file path to URL path format (remove extension and adjust path)
URL_PATH=$(echo $FILE | sed 's/\.rst$//g' | sed 's/\.py$//g' | sed 's/\.ipynb$//g' | sed 's/^tutorials\///g')

# Check if this path exists in redirects.py
if ! grep -q "\"$URL_PATH\"" tutorials/redirects.py; then
echo "::error::Missing redirect for deleted file: $FILE (URL path: $URL_PATH)"
MISSING_REDIRECTS=1
fi
done

if [ $MISSING_REDIRECTS -eq 1 ]; then
echo "::error::Please add redirects for all deleted/renamed files to redirects.py"
exit 1
fi

echo "All deleted/renamed files have proper redirects. Check passed!"

chmod +x ./.github/scripts/check_redirects.sh
./.github/scripts/check_redirects.sh
env:
BASE_BRANCH: ${{ github.base_ref }}
CURRENT_BRANCH: ${{ github.head_ref }}
Loading
Loading