@@ -38,10 +38,18 @@ jobs:
3838
3939 - name : Process branches
4040 id : branch-data
41+ env :
42+ MIN_AGE_DAYS : ${{ github.event.inputs.min_age_days || '27' }}
4143 run : |
4244 set -e
4345 ALL_BRANCHES=$(git branch -r | grep -v "origin/HEAD" | sed 's/origin\///')
44- MIN_AGE_DAYS=${{ github.event.inputs.min_age_days || 27 }}
46+ MIN_AGE_DAYS=${MIN_AGE_DAYS:-27}
47+
48+ echo "MIN_AGE_DAYS=${MIN_AGE_DAYS}"
49+
50+ PROTECTED_COUNT=0
51+ MERGED_COUNT=0
52+ UNMERGED_COUNT=0
4553
4654 PROTECTED_BRANCHES=()
4755 MERGED_BRANCHES_TO_PROCESS=()
@@ -54,38 +62,56 @@ jobs:
5462
5563 for BRANCH in $ALL_BRANCHES; do
5664 branch_lower=$(echo "$BRANCH" | tr '[:upper:]' '[:lower:]')
57- if [[ $branch_lower =~ (backup|development|main|master|production) ]]; then
58- PROTECTED_BRANCHES+=("$BRANCH (protected)")
65+ if [[ $branch_lower == *backup* || $branch_lower =~ ^(development|main|master|production)(-[0-9]+)?$ ]]; then
66+ PROTECTED_BRANCHES+=("$BRANCH")
67+ PROTECTED_COUNT=$((PROTECTED_COUNT+1))
5968 elif git branch -r --merged origin/development | grep -q "origin/$BRANCH"; then
6069 MERGED_BRANCHES_TO_PROCESS+=("$BRANCH")
70+ MERGED_COUNT=$((MERGED_COUNT+1))
6171 else
62- UNMERGED_BRANCHES+=("$BRANCH (not merged)")
72+ UNMERGED_BRANCHES+=("$BRANCH")
73+ UNMERGED_COUNT=$((UNMERGED_COUNT+1))
6374 fi
6475 done
6576
77+ echo "branch totals: protected=${PROTECTED_COUNT} merged=${MERGED_COUNT} unmerged=${UNMERGED_COUNT}"
78+
6679 for BRANCH in "${MERGED_BRANCHES_TO_PROCESS[@]}"; do
6780 MERGE_HASH=$(git log --grep="Merge branch.*$BRANCH" origin/development -n 1 --pretty=format:"%H" || true)
68- [ -z "$MERGE_HASH" ] && MERGE_HASH=$(git log -n 1 origin/$BRANCH --pretty=format:"%H")
69-
70- MERGE_DATE=$(git show -s --format=%ct $MERGE_HASH)
71- DAYS_AGO=$(( ($(date +%s) - MERGE_DATE) / 86400 ))
72-
81+ if [ -z "$MERGE_HASH" ]; then
82+ MERGE_HASH=$(git log -n 1 origin/$BRANCH --pretty=format:"%H" || true)
83+ fi
84+
85+ if [ -z "$MERGE_HASH" ]; then
86+ echo "WARN: no merge commit found for $BRANCH — skipping"
87+ UNMERGED_BRANCHES+=("$BRANCH (no-merge-hash)")
88+ UNMERGED_COUNT=$((UNMERGED_COUNT+1))
89+ continue
90+ fi
91+
92+ MERGE_DATE_EPOCH=$(git show -s --format=%ct $MERGE_HASH 2>/dev/null || true)
93+ if [ -z "$MERGE_DATE_EPOCH" ]; then
94+ echo "WARN: could not read commit date for $BRANCH (hash=$MERGE_HASH) — skipping"
95+ UNMERGED_BRANCHES+=("$BRANCH (no-merge-date)")
96+ UNMERGED_COUNT=$((UNMERGED_COUNT+1))
97+ continue
98+ fi
99+
100+ DAYS_AGO=$(( ($(date +%s) - MERGE_DATE_EPOCH) / 86400 ))
101+
73102 if [[ $DAYS_AGO -ge $MIN_AGE_DAYS ]]; then
74- BRANCHES_TO_DELETE+=("$BRANCH")
103+ BRANCHES_TO_DELETE+=("$BRANCH (${DAYS_AGO}d since merge) ")
75104 else
76- BRANCHES_TOO_RECENT+=("$BRANCH (too recent: ${DAYS_AGO}d)")
105+ BRANCHES_TOO_RECENT+=("$BRANCH (${DAYS_AGO}d since merge )")
77106 fi
107+ echo "checked $BRANCH: hash=$MERGE_HASH date=$MERGE_DATE_EPOCH days=${DAYS_AGO}"
78108 done
79109
80- ALL_NON_DELETED=(
81- "${PROTECTED_BRANCHES[@]}"
82- "${BRANCHES_TOO_RECENT[@]}"
83- "${UNMERGED_BRANCHES[@]}"
84- )
85-
86110 echo "HAS_BRANCHES=$([ ${#BRANCHES_TO_DELETE[@]} -gt 0 ] && echo true || echo false)" >> $GITHUB_ENV
87111 echo "BRANCHES_TO_DELETE=$(printf -- '- %s\n' "${BRANCHES_TO_DELETE[@]}" | jq -Rs .)" >> $GITHUB_ENV
88- echo "ALL_NON_DELETED=$(printf -- '- %s\n' "${ALL_NON_DELETED[@]}" | jq -Rs .)" >> $GITHUB_ENV
112+ echo "PROTECTED_BRANCHES=$(printf -- '- %s\n' "${PROTECTED_BRANCHES[@]}" | jq -Rs .)" >> $GITHUB_ENV
113+ echo "BRANCHES_TOO_RECENT=$(printf -- '- %s\n' "${BRANCHES_TOO_RECENT[@]}" | jq -Rs .)" >> $GITHUB_ENV
114+ echo "UNMERGED_BRANCHES=$(printf -- '- %s\n' "${UNMERGED_BRANCHES[@]}" | jq -Rs .)" >> $GITHUB_ENV
89115
90116 - name : Create Deletion PR
91117 if : env.HAS_BRANCHES == 'true'
@@ -97,8 +123,14 @@ jobs:
97123 ### Branches for Deletion
98124 ${{ fromJSON(env.BRANCHES_TO_DELETE) }}
99125
100- ### Protected/Recent Branches
101- ${{ fromJSON(env.ALL_NON_DELETED) }}
126+ ### Protected Branches
127+ ${{ fromJSON(env.PROTECTED_BRANCHES) }}
128+
129+ ### Recent Merges (too recent to delete)
130+ ${{ fromJSON(env.BRANCHES_TOO_RECENT) }}
131+
132+ ### Unmerged Branches
133+ ${{ fromJSON(env.UNMERGED_BRANCHES) }}
102134 base : development
103135 labels : Internal WIP
104136 assignees : MarkvanMents,OlufunkeMoronfolu
0 commit comments