Skip to content

Commit 3217cb3

Browse files
authored
Merge branch 'development' into run/4836-absolute-session-timeout-setting
2 parents e9d6b91 + af88581 commit 3217cb3

File tree

177 files changed

+3717
-1657
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

177 files changed

+3717
-1657
lines changed
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
name: Branch Deletion Phase One (PR Creation)
2+
permissions:
3+
contents: write
4+
pull-requests: write
5+
on:
6+
schedule:
7+
- cron: '00 22 1 * *' # 10PM on 1st of every month
8+
workflow_dispatch:
9+
inputs:
10+
min_age_days:
11+
description: "Minimum age in days since merge"
12+
required: true
13+
default: 27
14+
type: number
15+
jobs:
16+
identify-branches:
17+
if: github.repository_owner == 'mendix'
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: Checkout code
21+
uses: actions/checkout@v4
22+
with:
23+
fetch-depth: 0
24+
token: ${{ secrets.GITHUB_TOKEN }}
25+
persist-credentials: true
26+
27+
- name: Fetch all branches
28+
run: |
29+
echo "Fetching all branches from remote..."
30+
git fetch origin '+refs/heads/*:refs/remotes/origin/*' --prune
31+
echo "Fetched branches:"
32+
git branch -r
33+
34+
- name: Process branches
35+
id: branch-data
36+
run: |
37+
set -e
38+
echo "Finding all branches for processing..."
39+
ALL_BRANCHES=$(git branch -r | grep -v "origin/HEAD" | sed 's/origin\///')
40+
41+
echo "All branches found:"
42+
printf "%s\n" "${ALL_BRANCHES[@]}"
43+
44+
MIN_AGE_DAYS=${{ github.event.inputs.min_age_days || 27 }}
45+
46+
# Arrays to hold branches
47+
PROTECTED_BRANCHES=()
48+
MERGED_BRANCHES_TO_PROCESS=()
49+
BRANCHES_TO_DELETE=()
50+
BRANCHES_TOO_RECENT=()
51+
52+
CURRENT_DATE=$(date +%Y%m%d)
53+
echo "CURRENT_DATE=$CURRENT_DATE" >> $GITHUB_ENV
54+
55+
# Check branches
56+
for BRANCH in $ALL_BRANCHES; do
57+
branch_lower=$(echo "$BRANCH" | tr '[:upper:]' '[:lower:]')
58+
# Identify protected branches
59+
if [[ $branch_lower =~ (backup|development|main|master|production) ]]; then
60+
if git branch -r --merged origin/development | grep -q "origin/$BRANCH"; then
61+
PROTECTED_BRANCHES+=("$BRANCH (protected name, merged)")
62+
else
63+
PROTECTED_BRANCHES+=("$BRANCH (protected name, not merged)")
64+
fi
65+
else
66+
# Process non-protected merged branches
67+
if git branch -r --merged origin/development | grep -q "origin/$BRANCH"; then
68+
MERGED_BRANCHES_TO_PROCESS+=("$BRANCH")
69+
else
70+
UNMERGED_BRANCHES+=("$BRANCH (not merged)")
71+
fi
72+
fi
73+
done
74+
75+
# Process potential deletion
76+
for BRANCH in "${MERGED_BRANCHES_TO_PROCESS[@]}"; do
77+
MERGE_HASH=$(git log --grep="Merge branch.*$BRANCH" origin/development -n 1 --pretty=format:"%H" ||
78+
git log --grep="Merge pull request.*$BRANCH" origin/development -n 1 --pretty=format:"%H")
79+
[ -z "$MERGE_HASH" ] && MERGE_HASH=$(git log -n 1 origin/$BRANCH --pretty=format:"%H")
80+
81+
MERGE_DATE=$(git show -s --format=%ct $MERGE_HASH)
82+
DAYS_AGO=$(( ($(date +%s) - MERGE_DATE) / 86400 ))
83+
84+
if [[ $DAYS_AGO -ge $MIN_AGE_DAYS ]]; then
85+
BRANCHES_TO_DELETE+=("$BRANCH ($DAYS_AGO days)")
86+
else
87+
BRANCHES_TOO_RECENT+=("$BRANCH ($DAYS_AGO days)")
88+
fi
89+
done
90+
91+
# Display non-deleted branches for logging
92+
ALL_NON_DELETED_BRANCHES=("${PROTECTED_BRANCHES[@]}" "${BRANCHES_TOO_RECENT[@]}" "${UNMERGED_BRANCHES[@]}")
93+
IFS=$'\n' ALL_NON_DELETED_BRANCHES=($(sort <<<"${ALL_NON_DELETED_BRANCHES[*]}"))
94+
unset IFS
95+
96+
if [ ${#BRANCHES_TO_DELETE[@]} -eq 0 ]; then
97+
echo "No branches found for deletion."
98+
echo "NO_BRANCHES=true" >> $GITHUB_ENV
99+
exit 0
100+
else
101+
echo "NO_BRANCHES=false" >> $GITHUB_ENV
102+
fi
103+
104+
# Create report
105+
echo "# Branch Cleanup Report - $(date +%Y-%m-%d)" > branch-report.branchreport
106+
echo "## Branches for deletion (merged >=${MIN_AGE_DAYS} days ago):" >> branch-report.branchreport
107+
echo '```' >> branch-report.branchreport
108+
printf "%s\n" "${BRANCHES_TO_DELETE[@]}" >> branch-report.branchreport
109+
echo '```' >> branch-report.branchreport
110+
echo "## Branches not eligible for deletion:" >> branch-report.branchreport
111+
echo '```' >> branch-report.branchreport
112+
printf "%s\n" "${ALL_NON_DELETED_BRANCHES[@]}" >> branch-report.branchreport
113+
echo '```' >> branch-report.branchreport
114+
115+
echo "BRANCHES_TO_DELETE<<EOF" >> $GITHUB_ENV
116+
printf "%s\n" "${BRANCHES_TO_DELETE[@]}" >> $GITHUB_ENV
117+
echo "EOF" >> $GITHUB_ENV
118+
echo "ALL_NON_DELETED_BRANCHES<<EOF" >> $GITHUB_ENV
119+
printf "%s\n" "${ALL_NON_DELETED_BRANCHES[@]}" >> $GITHUB_ENV
120+
echo "EOF" >> $GITHUB_ENV
121+
122+
- name: Create Deletion PR
123+
if: env.NO_BRANCHES != 'true'
124+
uses: peter-evans/create-pull-request@v6
125+
with:
126+
commit-message: "Branch cleanup proposal"
127+
title: "[AUTO] Branch Deletion Candidates - ${{ env.CURRENT_DATE }}"
128+
body: |
129+
## Branches for deletion (merged to development)
130+
```
131+
${{ env.BRANCHES_TO_DELETE }}
132+
```
133+
134+
## Branches not eligible for deletion
135+
```
136+
${{ env.ALL_NON_DELETED_BRANCHES }}
137+
```
138+
## ⚠️ Warning
139+
Merging this PR will:
140+
1. Delete the branches listed in the "Branches for deletion" section.
141+
2. Remove the temporary branch-report.branchreport file.
142+
branch: branch-cleanup-${{ env.CURRENT_DATE }}
143+
assignees: MarkvanMents,OlufunkeMoronfolu
144+
reviewers: MarkvanMents,OlufunkeMoronfolu
145+
labels: Internal WIP
146+
add-paths: |
147+
branch-report.branchreport
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
name: Branch Deletion Phase Two (PR Processing)
2+
on:
3+
pull_request:
4+
types:
5+
- closed
6+
branches:
7+
- 'development'
8+
paths:
9+
- '**.branchreport'
10+
permissions:
11+
contents: write
12+
jobs:
13+
delete-branches-and-cleanup:
14+
if: |
15+
github.event.pull_request.merged == true &&
16+
startsWith(github.event.pull_request.title, '[AUTO] Branch Deletion Candidates')
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v4
21+
with:
22+
fetch-depth: 0
23+
token: ${{ secrets.GITHUB_TOKEN }}
24+
ref: ${{ github.event.repository.default_branch }}
25+
- name: Delete branch report file
26+
run: |
27+
# Check if file exists and delete it
28+
if [ -f "branch-report.branchreport" ]; then
29+
# Configure Git with your username
30+
git config --global user.name "github-actions[bot]"
31+
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
32+
33+
git rm branch-report.branchreport
34+
git commit -m "Remove temporary branch report file"
35+
git push
36+
echo "Removed branch-report.branchreport file"
37+
else
38+
echo "branch-report.branchreport file not found"
39+
fi
40+
- name: Extract branches and delete
41+
env:
42+
PR_BODY: ${{ github.event.pull_request.body }}
43+
run: |
44+
echo "PR Body Content:"
45+
echo "$PR_BODY"
46+
echo "-----------------------------------"
47+
48+
echo "Extracting branch names for deletion..."
49+
50+
# Extract lines between the markers using awk
51+
DELETION_LIST=$(echo "$PR_BODY" | awk '
52+
BEGIN { print_lines = 0; }
53+
/Branches for deletion/ { print_lines = 1; next; }
54+
/Branches not eligible for deletion/ { print_lines = 0; }
55+
print_lines == 1 && !/^```/ && NF > 0 {
56+
print $1;
57+
}
58+
')
59+
60+
echo "Branches identified for deletion:"
61+
echo "$DELETION_LIST"
62+
echo "-----------------------------------"
63+
64+
if [ -z "$DELETION_LIST" ]; then
65+
echo "No branches found for deletion"
66+
exit 0
67+
fi
68+
# Configure Git with your username
69+
git config --global user.name "github-actions[bot]"
70+
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
71+
72+
# Process each branch
73+
echo "$DELETION_LIST" | while read -r BRANCH; do
74+
# Skip empty lines
75+
[ -z "$BRANCH" ] && continue
76+
77+
echo "Processing branch: '$BRANCH'"
78+
79+
# Final protection check
80+
branch_lower=$(echo "$BRANCH" | tr '[:upper:]' '[:lower:]')
81+
if [[ $branch_lower =~ (backup|development|main|master|production) ]]; then
82+
echo "Skipping protected branch: $BRANCH"
83+
continue
84+
fi
85+
echo "Attempting to delete branch: $BRANCH"
86+
# Check if branch exists before trying to delete
87+
if git ls-remote --heads origin "$BRANCH" | grep -q "$BRANCH"; then
88+
echo "Branch exists, proceeding with deletion"
89+
git push origin --delete "$BRANCH" || {
90+
echo "Failed to delete branch: $BRANCH"
91+
echo "Error code: $?"
92+
}
93+
else
94+
echo "Branch $BRANCH does not exist or is not accessible"
95+
fi
96+
done

0 commit comments

Comments
 (0)