Skip to content

Commit 8d7dab3

Browse files
committed
add cron based doc preview cleanup job
1 parent 8c629f7 commit 8d7dab3

File tree

2 files changed

+87
-33
lines changed

2 files changed

+87
-33
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Cleanup stale doc Previews
2+
3+
on:
4+
schedule:
5+
- cron: '0 2 * * *' # Run daily at 2 AM UTC
6+
workflow_dispatch: # Allow manual trigger
7+
8+
concurrency:
9+
group: doc-preview-cleanup
10+
cancel-in-progress: false
11+
12+
jobs:
13+
cleanup-closed-pr-previews:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: write
17+
pull-requests: read
18+
steps:
19+
- name: Checkout gh-pages branch
20+
uses: actions/checkout@v4
21+
with:
22+
ref: gh-pages
23+
fetch-depth: 0
24+
25+
- name: Clean up closed PR previews
26+
run: |
27+
echo "Starting preview cleanup..."
28+
29+
deleted_previews=""
30+
31+
# Find all preview directories
32+
if [ -d "previews" ]; then
33+
shopt -s nullglob
34+
for preview_dir in previews/PR*; do
35+
if [ -d "$preview_dir" ]; then
36+
# Extract PR number
37+
pr_number=$(echo "$preview_dir" | sed 's/previews\/PR//')
38+
39+
# Validate PR number is numeric
40+
if ! [[ "$pr_number" =~ ^[0-9]+$ ]]; then
41+
echo "Skipping invalid directory: $preview_dir"
42+
continue
43+
fi
44+
45+
# Check PR state via GitHub API
46+
api_response=$(curl -s -w "%{http_code}" -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
47+
"https://api.github.com/repos/${{ github.repository }}/pulls/$pr_number")
48+
49+
http_code="${api_response: -3}"
50+
json_response="${api_response%???}"
51+
52+
if [ "$http_code" != "200" ] && [ "$http_code" != "404" ]; then
53+
echo "API error for PR #$pr_number: HTTP $http_code"
54+
echo "Response: $json_response"
55+
exit 1
56+
fi
57+
58+
pr_state=$(echo "$json_response" | jq -r '.state // "not_found"')
59+
60+
if [ "$pr_state" = "closed" ] || [ "$pr_state" = "not_found" ]; then
61+
echo "Delete $preview_dir (PR #$pr_number is $pr_state)"
62+
deleted_previews="$deleted_previews $preview_dir"
63+
64+
# git rm -rf "$preview_dir"
65+
else
66+
echo "Keeping $preview_dir (PR #$pr_number is open)"
67+
fi
68+
69+
sleep 1
70+
fi
71+
done
72+
shopt -u nullglob
73+
fi
74+
75+
# Commit and clean history if any previews were deleted
76+
if [ -n "$deleted_previews" ]; then
77+
echo "Clean up history for:$deleted_previews"
78+
79+
git config user.name "Documenter.jl"
80+
git config user.email "[email protected]"
81+
git commit -m "delete previews"
82+
git branch gh-pages-new $(echo "delete history" | git commit-tree HEAD^{tree})
83+
echo "Force push changes to upstream repo"
84+
# git push --force origin gh-pages-new:gh-pages
85+
else
86+
echo "No previews to clean up"
87+
fi

.github/workflows/docpreviewcleanup.yml

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)