Skip to content

Commit fad0dfb

Browse files
Merge pull request mendix#11008 from mendix/olu-gh-action-branch-fix
Olu gh action branch fix
2 parents 0fb4546 + 3fdddcb commit fad0dfb

1 file changed

Lines changed: 52 additions & 20 deletions

File tree

.github/workflows/branch-deletion-pr-creation.yml

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)