Skip to content

Commit 2416bb2

Browse files
authored
Merge branch 'mendix:development' into development2
2 parents 40192cd + 66403d4 commit 2416bb2

921 files changed

Lines changed: 32116 additions & 12720 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.txt
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: 2026-01-06 10:09:12 CET (UTC+01:00)

config/_default/hugo.toml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ disableKinds = ["taxonomy", "term"]
3030
quality = 75
3131
anchor = "smart"
3232

33-
[services]
34-
[services.googleAnalytics]
35-
# Marketing Google Tag ID
36-
id = 'UA-163813-1'
37-
3833
# Language configuration
3934

4035
[languages]
@@ -87,12 +82,16 @@ replacements = "github.com/FortAwesome/Font-Awesome -> ., github.com/twbs/bootst
8782
[sitemap]
8883
priority = 0.5
8984

85+
# Olu - Minification configuration
86+
[minify]
87+
minifyOutput = true
88+
9089
# Everything below this are Site Params
9190
# ======================================
9291
# These are mainly (all?) Docsy settings
9392

9493
[params]
95-
copyright = "© Mendix Technology BV 2021. All rights reserved."
94+
copyright = "© Siemens Industry Software Netherlands B.V. 2025. All rights reserved."
9695
privacy_policy = "http://www.mendix.com/privacy-policy/"
9796

9897
# Menu title if your navbar has a versions selector to access old versions of your site.
@@ -161,7 +160,7 @@ replacements = "github.com/FortAwesome/Font-Awesome -> ., github.com/twbs/bootst
161160
sidebar_menu_truncate = 100
162161

163162
# Adds a H2 section titled "Feedback" to the bottom of each doc. The responses are sent to Google Analytics as events.
164-
# This feature depends on [services.googleAnalytics] and will be disabled if "services.googleAnalytics.id" is not set.
163+
# This feature used to depend on [services.googleAnalytics],but that is now become obsolete.
165164
# If you want this feature, but occasionally need to remove the "Feedback" section from a single page,
166165
# add "hide_feedback: true" to the page's front matter.
167166
[params.ui.feedback]

content/en/docs/apidocs-mxsdk/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: "APIs and SDK"
33
url: /apidocs-mxsdk/
44
description: "Presents the Mendix API documentation and the Mendix SDK documentation."
5-
weight: 55
5+
weight: 51
66
no_list: false
77
description_list: true
88
cascade:

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,10 @@ An object with the following key-value pairs:
295295
* `Description` (String) : Description of the package.
296296

297297
{{% alert color="warning" %}}
298-
For apps using SVN for version control, this call will build the specified revision even if that revision is not on the specified branch.
298+
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.
300+
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
299302
{{% /alert %}}
300303

301304
##### 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" >}}

0 commit comments

Comments
 (0)