Skip to content

Commit d03f15b

Browse files
committed
Add check redirects GH action
1 parent 1c3f8b6 commit d03f15b

File tree

3 files changed

+317
-59
lines changed

3 files changed

+317
-59
lines changed

check_redirects.sh renamed to .github/scripts/check_redirects.sh

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
#!/bin/bash
22

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

79
# Get list of deleted or renamed files in this branch compared to base
8-
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')
10+
DELETED_FILES=$(git diff --name-status $BASE_BRANCH $CURRENT_BRANCH --diff-filter=DR | grep -E '\.(rst|py|md)$' | grep
11+
| awk '{print $2}' | grep -E '\.(rst|py|md)$' | grep -v 'redirects.py')
912

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

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

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

2630
# Check if each deleted file has a redirect entry
2731
MISSING_REDIRECTS=0
2832
for FILE in $DELETED_FILES; do
2933
# Convert file path to URL path format (remove extension and adjust path)
30-
URL_PATH=$(echo $FILE | sed 's/\.rst$//g' | sed 's/\.py$//g' | sed 's/\.ipynb$//g' | sed 's/^tutorials\///g')
31-
32-
# Check if this path exists in redirects.py
33-
if ! grep -q "\"$URL_PATH\"" tutorials/redirects.py; then
34-
echo "ERROR: Missing redirect for deleted file: $FILE (URL path: $URL_PATH)"
34+
REDIRECT_PATH=$(echo $FILE | sed -E 's/(.+)_source\/(.+)\.(py|rst|md|ipynb)$/\1\/\2.html/')
35+
36+
# Check if this path exists in redirects.py as a key (without checking the target)
37+
if ! grep -q "\"$REDIRECT_PATH\":" redirects.py; then
38+
echo "ERROR: Missing redirect for deleted file: $FILE (should have entry for \"$REDIRECT_PATH\")"
3539
MISSING_REDIRECTS=1
3640
fi
3741
done
@@ -42,4 +46,3 @@ if [ $MISSING_REDIRECTS -eq 1 ]; then
4246
fi
4347

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

.github/workflows/check-redirects.yml

Lines changed: 9 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,25 @@
1-
name: Check Redirects for Deleted Files
1+
name: Check Redirects for Deleted or Renamed Files
22

33
on:
44
pull_request:
55
paths:
66
- '**/*.rst'
77
- '**/*.py'
8+
- '**/*.md'
89

910
jobs:
1011
check-redirects:
1112
runs-on: ubuntu-latest
1213
steps:
1314
- name: Checkout code
14-
uses: actions/checkout@v3
15+
uses: actions/checkout@v4
1516
with:
1617
fetch-depth: 0
1718

18-
- name: Set up Python
19-
uses: actions/setup-python@v4
20-
with:
21-
python-version: '3.11'
22-
23-
- name: Check for deleted/renamed files and redirects
19+
- name: Run redirect check script
2420
run: |
25-
# Get list of deleted or renamed files in this PR
26-
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')
27-
28-
if [ -z "$DELETED_FILES" ]; then
29-
echo "No deleted or renamed files found. Skipping check."
30-
exit 0
31-
fi
32-
33-
echo "Deleted or renamed files:"
34-
echo "$DELETED_FILES"
35-
36-
# Check if redirects.py has been updated
37-
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")
38-
39-
if [ "$REDIRECTS_UPDATED" == "no" ]; then
40-
echo "::error::Files were deleted or renamed but redirects.py was not updated. Please add redirects for deleted/renamed files."
41-
exit 1
42-
fi
43-
44-
# Check if each deleted file has a redirect entry
45-
MISSING_REDIRECTS=0
46-
for FILE in $DELETED_FILES; do
47-
# Convert file path to URL path format (remove extension and adjust path)
48-
URL_PATH=$(echo $FILE | sed 's/\.rst$//g' | sed 's/\.py$//g' | sed 's/\.ipynb$//g' | sed 's/^tutorials\///g')
49-
50-
# Check if this path exists in redirects.py
51-
if ! grep -q "\"$URL_PATH\"" tutorials/redirects.py; then
52-
echo "::error::Missing redirect for deleted file: $FILE (URL path: $URL_PATH)"
53-
MISSING_REDIRECTS=1
54-
fi
55-
done
56-
57-
if [ $MISSING_REDIRECTS -eq 1 ]; then
58-
echo "::error::Please add redirects for all deleted/renamed files to redirects.py"
59-
exit 1
60-
fi
61-
62-
echo "All deleted/renamed files have proper redirects. Check passed!"
63-
21+
chmod +x ./.github/scripts/check_redirects.sh
22+
./.github/scripts/check_redirects.sh
23+
env:
24+
BASE_BRANCH: ${{ github.base_ref }}
25+
CURRENT_BRANCH: ${{ github.head_ref }}

0 commit comments

Comments
 (0)