Skip to content

Commit 436815a

Browse files
Merge branch 'development' into nc-profile-merge-update
2 parents 0e2fd17 + 4b5c081 commit 436815a

459 files changed

Lines changed: 10938 additions & 4007 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
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+
16+
jobs:
17+
identify-branches:
18+
if: github.repository_owner == 'mendix'
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout code
22+
uses: actions/checkout@v4
23+
with:
24+
fetch-depth: 0
25+
token: ${{ secrets.GITHUB_TOKEN }}
26+
persist-credentials: true
27+
28+
- name: Setup jq
29+
run: sudo apt-get install -y jq
30+
31+
- name: Create timestamp file
32+
run: |
33+
echo "Last scan for stale merged branches: $(TZ='Europe/Amsterdam' date +'%Y-%m-%d %H:%M:%S %Z (UTC%:z)')" > branch-cleanup-timestamp.txt
34+
35+
- name: Fetch all branches
36+
run: |
37+
git fetch origin '+refs/heads/*:refs/remotes/origin/*' --prune
38+
39+
- name: Process branches
40+
id: branch-data
41+
run: |
42+
set -e
43+
ALL_BRANCHES=$(git branch -r | grep -v "origin/HEAD" | sed 's/origin\///')
44+
MIN_AGE_DAYS=${{ github.event.inputs.min_age_days || 27 }}
45+
46+
PROTECTED_BRANCHES=()
47+
MERGED_BRANCHES_TO_PROCESS=()
48+
BRANCHES_TO_DELETE=()
49+
BRANCHES_TOO_RECENT=()
50+
UNMERGED_BRANCHES=()
51+
52+
CURRENT_DATE=$(date +%Y%m%d)
53+
echo "CURRENT_DATE=$CURRENT_DATE" >> $GITHUB_ENV
54+
55+
for BRANCH in $ALL_BRANCHES; do
56+
branch_lower=$(echo "$BRANCH" | tr '[:upper:]' '[:lower:]')
57+
if [[ $branch_lower =~ (backup|development|main|master|production) ]]; then
58+
PROTECTED_BRANCHES+=("$BRANCH (protected)")
59+
elif git branch -r --merged origin/development | grep -q "origin/$BRANCH"; then
60+
MERGED_BRANCHES_TO_PROCESS+=("$BRANCH")
61+
else
62+
UNMERGED_BRANCHES+=("$BRANCH (not merged)")
63+
fi
64+
done
65+
66+
for BRANCH in "${MERGED_BRANCHES_TO_PROCESS[@]}"; do
67+
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+
73+
if [[ $DAYS_AGO -ge $MIN_AGE_DAYS ]]; then
74+
BRANCHES_TO_DELETE+=("$BRANCH")
75+
else
76+
BRANCHES_TOO_RECENT+=("$BRANCH (too recent: ${DAYS_AGO}d)")
77+
fi
78+
done
79+
80+
ALL_NON_DELETED=(
81+
"${PROTECTED_BRANCHES[@]}"
82+
"${BRANCHES_TOO_RECENT[@]}"
83+
"${UNMERGED_BRANCHES[@]}"
84+
)
85+
86+
echo "HAS_BRANCHES=$([ ${#BRANCHES_TO_DELETE[@]} -gt 0 ] && echo true || echo false)" >> $GITHUB_ENV
87+
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
89+
90+
- name: Create Deletion PR
91+
if: env.HAS_BRANCHES == 'true'
92+
uses: peter-evans/create-pull-request@v6
93+
with:
94+
token: ${{ secrets.GITHUB_TOKEN }}
95+
title: "[Auto] Branch Deletion Candidates - ${{ env.CURRENT_DATE }}"
96+
body: |
97+
### Branches for Deletion
98+
${{ fromJSON(env.BRANCHES_TO_DELETE) }}
99+
100+
### Protected/Recent Branches
101+
${{ fromJSON(env.ALL_NON_DELETED) }}
102+
base: development
103+
labels: Internal WIP
104+
assignees: MarkvanMents,OlufunkeMoronfolu
105+
reviewers: MarkvanMents,OlufunkeMoronfolu
106+
commit-message: "Add branch cleanup candidates for ${{ env.CURRENT_DATE }}"
107+
add-paths: |
108+
branch-cleanup-timestamp.tx
109+
author: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
110+
committer: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Branch Deletion Phase Two (PR Processing)
2+
on:
3+
pull_request:
4+
types: [closed]
5+
branches: [development]
6+
paths:
7+
- 'branch-cleanup-timestamp.txt'
8+
9+
permissions:
10+
contents: write
11+
12+
jobs:
13+
process-approved-deletion:
14+
if: |
15+
github.event.pull_request.merged == true &&
16+
startsWith(github.event.pull_request.title, '[Auto] Branch Deletion Candidates') &&
17+
contains(github.event.pull_request.labels.*.name, 'Internal WIP')
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: Extract branches
28+
id: extract-branches
29+
env:
30+
PR_BODY: ${{ github.event.pull_request.body }}
31+
run: |
32+
BRANCHES=$(echo "$PR_BODY" | awk '
33+
/### Branches for Deletion/ {flag=1; next}
34+
/### Protected\/Recent Branches/ {flag=0}
35+
flag && /^-/ {gsub(/^-[ \t]*/, ""); print}
36+
')
37+
38+
CLEAN_BRANCHES=$(echo "$BRANCHES" | tr -d '\r' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
39+
echo "branches=$(jq -nc '$ARGS.positional' --args $CLEAN_BRANCHES)" >> $GITHUB_OUTPUT
40+
echo "Extracted branches: $BRANCHES"
41+
42+
- name: Delete branches
43+
env:
44+
BRANCHES: ${{ steps.extract-branches.outputs.branches }}
45+
run: |
46+
git config --global user.name "github-actions[bot]"
47+
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
48+
49+
echo "$BRANCHES" | jq -r '.[]' | while read -r branch; do
50+
branch_lower=$(echo "$branch" | tr '[:upper:]' '[:lower:]')
51+
52+
if [[ $branch_lower =~ ^(backup|development|main|master|production)(-[0-9]+)?$ ]]; then
53+
echo "Skipping protected branch: $branch"
54+
continue
55+
fi
56+
57+
if git ls-remote --exit-code --heads origin "$branch" >/dev/null; then
58+
echo "Deleting $branch"
59+
git push origin --delete "$branch"
60+
sleep 1
61+
else
62+
echo "Branch $branch does not exist"
63+
fi
64+
done

.github/workflows/lint-action.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ jobs:
5353
body: |
5454
${{ env.VER }}
5555
branch: lint-docs
56-
committer: MarkvanMents <Mark.van.Ments@mendix.com>
56+
author: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
57+
committer: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
5758
assignees: MarkvanMents,OlufunkeMoronfolu
5859
reviewers: MarkvanMents,OlufunkeMoronfolu
5960
labels: Internal WIP

.github/workflows/remunusedattachments.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ jobs:
3636
Pull Request to delete attachments that are no longer used.
3737
Check the htmltest output from the CI/CD pipeline to ensure that nothing has been removed accidentally.
3838
branch: rem-unused-attachments
39-
committer: MarkvanMents <Mark.van.Ments@mendix.com>
39+
author: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
40+
committer: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
4041
assignees: MarkvanMents,OlufunkeMoronfolu
4142
reviewers: MarkvanMents,OlufunkeMoronfolu
4243
labels: Internal WIP

assets/scss/_styles_project.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ div.date-format{
257257

258258
// DB – Add borders around images
259259
main img {
260-
border-color: #d7d7d7;
260+
border-color: $gray-400;
261261
border-width: 1px;
262262
border-style: solid;
263263
}

branch-cleanup-timestamp.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Last scan for stale merged branches: 2025-12-01 23:24:23 CET (UTC+01:00)

content/en/docs/apidocs-mxsdk/apidocs/deployment/build-api.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,9 @@ An object with the following key-value pairs:
296296

297297
{{% alert color="warning" %}}
298298

299-
- For apps using SVN for version control, this call will build the specified revision even if that revision is not on the specified branch.
299+
* For apps using SVN for version control, this call will build the specified revision even if that revision is not on the specified branch.
300300

301-
- For apps using Git for version control, using a short commit hash can cause timeouts with large repositories. Mendix recommends using the full commit hash
301+
* For apps using Git for version control, using a short commit hash can cause timeouts with large repositories. Mendix recommends using the full commit hash
302302
{{% /alert %}}
303303

304304
##### Example
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
title: "Project Category API"
3+
url: /apidocs-mxsdk/apidocs/project-category-api/
4+
type: swagger
5+
description: "The Project Category API manages your project categories."
6+
weight: 100
7+
restapi: true
8+
---
9+
10+
## Introduction
11+
12+
The Mendix Project Category API allows you to create, edit or delete your project categories.
13+
14+
## Authentication {#authentication}
15+
16+
Authentication for the Project Category API uses a personal access token (PAT).
17+
18+
### Generating a PAT {#generate}
19+
20+
For details on how to generate a PAT, refer to the [Personal Access Tokens](/mendix-profile/user-settings/#pat) section of *User Settings*.
21+
22+
Select the appropriate scopes, depending on the endpoints that need to be invoked. Refer to the [API Reference](#api-reference) for more information on which scopes to use in which endpoints.
23+
24+
Store the generated value somewhere safe so you can use it to authorize your API calls.
25+
26+
### Using the PAT
27+
28+
Each request must contain an `Authorization` header with the value `MxToken {GENERATED_PAT}`. For example:
29+
30+
```http
31+
GET /companies/{:companyId}/categories HTTP/1.1
32+
Authorization: MxToken 7LJE…vk
33+
```
34+
35+
## API Reference{#api-reference}
36+
37+
{{< swaggerui-disable-try-it-out src="/openapi-spec/categories-v1.yaml" >}}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
title: "Private Mendix Platform Pipeline API"
3+
url: /apidocs-mxsdk/apidocs/private-platform-pipeline-api/
4+
type: swagger
5+
description: "This API allows you to manage pipelines in Private Mendix Platform."
6+
restapi: true
7+
weight: 60
8+
linktitle: "Pipeline API"
9+
---
10+
11+
{{% alert color="info" %}}
12+
This document is about [Private Mendix Platform](/private-mendix-platform/) API. This API is only available on instances of Private Mendix Platform. For [Mendix on Kubernetes](/developerportal/deploy/private-cloud/) API, see [Mendix on Kubernetes Build API](/apidocs-mxsdk/apidocs/private-cloud-build-api/) and [Mendix on Kubernetes Deploy API](/apidocs-mxsdk/apidocs/private-cloud-deploy-api/).
13+
{{% /alert %}}
14+
15+
## Introduction
16+
17+
The Private Mendix Platform Project API allows you to manage pipelines in Private Mendix Platform. You can use the API to do the following:
18+
19+
* Get pipeline running information.
20+
* Set the current step status of the pipeline.
21+
* Create a pipeline for build or deployment.
22+
* Approve or reject a manual step of a waiting pipeline.
23+
24+
## API Reference
25+
26+
{{< swaggerui src="/openapi-spec/openapi-pipeline.yaml" >}}

content/en/docs/apidocs-mxsdk/apidocs/studio-pro-10/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:

0 commit comments

Comments
 (0)