File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 1+ name : Delete old merged and unmerged branches
2+
3+ on :
4+ schedule :
5+ - cron : ' 0 0 * * *' # Run every day at midnight
6+ workflow_dispatch :
7+
8+ permissions :
9+ contents : write
10+ pull-requests : write
11+
12+ jobs :
13+ delete-old-branches :
14+ runs-on : ubuntu-latest
15+
16+ steps :
17+ - name : Checkout code
18+ uses : actions/checkout@v4
19+
20+ - name : Delete old branches (Except main)
21+ run : |
22+ git fetch --prune
23+
24+ # Delete merged branches older than 30 days, except main
25+ for branch in $(git branch -r --merged | grep -v "main" | grep -v "HEAD"); do
26+ BRANCH_NAME=$(echo $branch | sed 's/origin\///')
27+ LAST_COMMIT_DATE=$(git log -1 --format=%ci $BRANCH_NAME)
28+ DAYS_OLD=$(echo $(( ( $(date +%s) - $(date -d "$LAST_COMMIT_DATE" +%s) ) / 86400 )))
29+
30+ if [[ $DAYS_OLD -gt 30 ]]; then
31+ echo "Deleting merged branch: $BRANCH_NAME"
32+ git push origin --delete $BRANCH_NAME
33+ fi
34+ done
35+
36+ # Delete unmerged branches older than 90 days, except main
37+ for branch in $(git branch -r --no-merged | grep -v "main" | grep -v "HEAD"); do
38+ BRANCH_NAME=$(echo $branch | sed 's/origin\///')
39+ LAST_COMMIT_DATE=$(git log -1 --format=%ci $BRANCH_NAME)
40+ DAYS_OLD=$(echo $(( ( $(date +%s) - $(date -d "$LAST_COMMIT_DATE" +%s) ) / 86400 )))
41+
42+ if [[ $DAYS_OLD -gt 90 ]]; then
43+ echo "Deleting stale unmerged branch: $BRANCH_NAME"
44+ git push origin --delete $BRANCH_NAME
45+ fi
46+ done
47+ env :
48+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
You can’t perform that action at this time.
0 commit comments