Skip to content

Commit f640f09

Browse files
committed
Merge branch 'development' into pr/10219
2 parents f012f6e + f24d697 commit f640f09

File tree

94 files changed

+1125
-634
lines changed

Some content is hidden

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

94 files changed

+1125
-634
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

content/en/docs/apidocs-mxsdk/apidocs/studio-pro-11/extensibility-api/_index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ For information on new releases of the Extensibility API see:
2020

2121
## Introduction
2222

23-
Extensions are self-contained modules which users can add to Studio Pro. This means that with extensibility you can add new features and functionality to Studio Pro. The Extensibility API is an API that allows developers to interact with a curated list of internal systems of Studio Pro. This documentation provides guides and reference documentation for the Extensibility API.
23+
Extensions are self-contained modules that enhance Studio Pro by adding new features and functionality. The Extensibility API allows you to interact with a curated set of internal systems, extending Studio Pro’s capabilities with functionality you can define yourself.
2424

25-
The API is provided in two flavors, depending which language you are developing in. C# and web based (via Typescript):
25+
The API is provided in two versions, depending on the language you are developing in:

content/en/docs/apidocs-mxsdk/apidocs/studio-pro-11/extensibility-api/packaging-your-extension.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,32 @@ url: /apidocs-mxsdk/apidocs/extensibility-api-11/packaging-your-extension
44
weight: 30
55
---
66

7-
# Packaging your extension
7+
# Packaging Your Extension
88

9-
Once you have finished development on your extension, you might want to package it into an add-on module so that others can start using it. Once you have created the add-on module, it can then be published to the Mendix Marketplace for your extension users to download into their Studio Pro app.
9+
After completing development on your extension, you can package it into an add-on module so others can use it. Once packaged, the module can be published to the Mendix Marketplace, allowing other users to download it into their Studio Pro apps.
1010

11-
To package your extension, you will still need the `--enable-extension-development` command line option turned on. Create a new module in your Studio Pro app containing your dev extension, give it an appropriate name. Open the module's settings form and set it to be an Add-on module. In the `Extension name` dropdown, select the extension you want to package into it.
11+
To package your extension, follow the steps below:
12+
13+
1. Make sure the`--enable-extension-development` command-line option is enabled.
14+
2. In your Studio Pro app, create a new module and include your development extension.
15+
3. Give the module a name.
16+
4. Open the module's settings and in the **Export** tab, choose **Add-on module**.
17+
5. In the **Extension name** drop-down, select the extension you want to package into it.
1218

1319
![Extension Add-on Module](/attachments/apidocs-mxsdk/apidocs/extensibility-api/extensionAddOnModule.png)
1420

15-
After you've created your add-on module with its extension, you can now export it, by right-clicking the module in the App Explorer and choosing `Export add-on module package`, as shown below.
21+
After you have created your add-on module with its extension, you can export it by right-clicking the module in the **App Explorer** and selecting **Export add-on module package**.
1622

1723
![Export Module](/attachments/apidocs-mxsdk/apidocs/extensibility-api/exportAddOnModule.png)
1824

1925
You can now save the add-on module to a location of your choice.
2026

21-
# Importing the extension add-on module
27+
# Importing the Extension Add-on Module
2228

23-
Once the add-on module is available to a Studio Pro user, they are now able to add it in their application. They can so so by right-clicking the app in the App Explorer and choosing `Import module package`, as shown below.
29+
When the add-on module is available to a Studio Pro user, they are now able to add it in their application. This is done by right-clicking the app in the **App Explorer** and selecting **Import module package**.
2430

2531
![Import Module](/attachments/apidocs-mxsdk/apidocs/extensibility-api/importAddOnModule.png)
2632

27-
Once an add-on module containing an extension is imported in the app, Studio Pro will show a warning to the user, asking to trust the extension contained in it. If the user does not choose to trust, the module will still be imported but the extension inside it won't be loaded.
33+
When an add-on module containing an extension is imported in the app, Studio Pro will show a warning to the user, asking to trust the extension contained in it. If the user does not choose to trust, the module will still be imported but the extension inside it will not be loaded.
2834

2935
![Trust Extension](/attachments/apidocs-mxsdk/apidocs/extensibility-api/trustExtension.png)

content/en/docs/apidocs-mxsdk/apidocs/studio-pro-11/extensibility-api/web/_index.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,25 @@ weight: 20
1313

1414
## Introduction
1515

16-
Extensions can be written in Typescript or other web languages, described here, or using a C# API which is documented separately in [Extensibility API for C# Developers](/apidocs-mxsdk/apidocs/csharp-extensibility-api-11/).
16+
Extensions can be written in TypeScript or other web languages, described here, or using a C# API, which is documented in [Extensibility API for C# Developers](/apidocs-mxsdk/apidocs/csharp-extensibility-api-11/).
1717

1818
{{% alert color="info" %}}
19-
Please note that extension development is only possible by starting Studio Pro with the `--enable-extension-development` feature flag.
19+
Extension development is only possible with the `--enable-extension-development` feature flag.
2020
{{% /alert %}}
2121

2222
For more detailed information on the web API, see the [Mendix Studio Pro Web Extensibility API reference documentation](http://apidocs.rnd.mendix.com/11/extensions-api/index.html).
2323

2424
## Prerequisites
2525

26-
* You need at least a basic understanding of the Mendix platform.
27-
* You need some understanding of the Mendix Model.
28-
* You need to have some TypeScript development experience.
26+
To use the Web Extensibility API, you must have:
27+
28+
* A basic understanding of the Mendix platform
29+
* Some understanding of the Mendix Model
30+
* Some TypeScript development experience
2931

3032
## Getting Started
3133

32-
For detailed explanation on how to get started with extensions, check out [Get Started with the Web Extensibility API](/apidocs-mxsdk/apidocs/web-extensibility-api-11/getting-started/).
34+
For detailed information on how to get started with extensions, see [Get Started with the Web Extensibility API](/apidocs-mxsdk/apidocs/web-extensibility-api-11/getting-started/).
3335

3436
## How-tos
3537

0 commit comments

Comments
 (0)