From d594090db5075a7a00dd657b3cdcd1a4cfbcafff Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Mon, 1 Jun 2026 14:37:56 +0200 Subject: [PATCH 1/5] Remove SAP PR Build workflow --- .github/workflows/PR-SAP.yml | 58 ------------------------------------ 1 file changed, 58 deletions(-) delete mode 100644 .github/workflows/PR-SAP.yml diff --git a/.github/workflows/PR-SAP.yml b/.github/workflows/PR-SAP.yml deleted file mode 100644 index cbec6b6f51..0000000000 --- a/.github/workflows/PR-SAP.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: PR Build (SAP) - -on: - pull_request: - merge_group: - -concurrency: - group: pr-sap-${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -permissions: - contents: read - -jobs: - build-sap: - runs-on: ubuntu-latest - if: '! github.event.pull_request.head.repo.fork' - steps: - - name: Checkout SAP repo - run: | - git config --global credential.helper "cache --timeout=3600" - echo -e "url=https://user:${GH_TOKEN}@github.com\n" | git credential approve - echo -e "url=https://user:${GH_TOKEN_TOOLS_DOCS}@github.tools.sap\n" | git credential approve - git clone --depth 1 --no-single-branch https://github.tools.sap/cap/docs docs - cd docs - git checkout $GITHUB_HEAD_REF || git checkout main - git submodule update --init --recursive - cd @external - git checkout $GITHUB_HEAD_REF - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_TOKEN_TOOLS_DOCS: ${{ secrets.GH_TOKEN_TOOLS_DOCS }} - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 - cache: 'npm' - cache-dependency-path: docs/package-lock.json - - run: npm ci - working-directory: docs - - run: npm test - working-directory: docs - - run: npm run lint - working-directory: docs - - run: npm run docs:build - working-directory: docs - env: - NODE_OPTIONS: "--max-old-space-size=6144" - VITE_CAPIRE_CI_HOST: "github.com" - VITE_CAPIRE_EXTRA_ASSETS: true - MAVEN_HOST: https://common.repositories.cloud.sap/artifactory/build.releases - MAVEN_TOKEN: ${{ secrets.MAVEN_TOKEN }} - - name: Find broken anchor links - working-directory: docs - run: | - npm run docs:preview -- --port 5555 & - sleep 2 - .github/etc/blc.js http://localhost:5555/docs/ From 033a428707acc6f185bc2f76c6f2db3f60e79438 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 5 Jun 2026 10:03:33 +0200 Subject: [PATCH 2/5] Fixed broken link to hex-arch illustration --- .../hexagonal-archritecture-origin.png | Bin 0 -> 11669 bytes get-started/concepts.md | 33 +++++++++--------- 2 files changed, 16 insertions(+), 17 deletions(-) create mode 100644 get-started/assets/concepts/hexagonal-archritecture-origin.png diff --git a/get-started/assets/concepts/hexagonal-archritecture-origin.png b/get-started/assets/concepts/hexagonal-archritecture-origin.png new file mode 100644 index 0000000000000000000000000000000000000000..bafeced942249feff605db00a0d80bb81635c954 GIT binary patch literal 11669 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 [[toc]] @@ -43,7 +43,7 @@ The CAP framework features a mix of proven and broadly adopted open-source and S The major building blocks are as follows: - [**Core Data Services** (CDS)](../cds/) — CAP's universal modeling language, and the very backbone of everything; used to capture domain knowledge, generating database schemas, translating to and from various API languages, and most important: fueling generic runtimes to automatically serve request out of the box. - + - [**Service Runtimes**](../guides/services/providing-services) for [Node.js](../node.js/) and [Java](../java/) — providing the core frameworks for services, generic providers to serve requests automatically, database support for SAP HANA, SQLite, and PostgreSQL, and protocol adaptors for REST, OData, GraphQL, ... - [**Platform Integrations**](../plugins/) — providing CAP-level service interfaces (*'[Calesi](#the-calesi-pattern)'*) to cloud platform services in platform-agnostic ways, as much as possible. Some of these are provided out of the box, others as plugins. @@ -90,16 +90,16 @@ In a first iteration, it would look like this in CDS, with some fields added: ::: code-group ```cds [Domain Data Model] -entity Authors { +entity Authors { name : String; books : Association to many Books; } -entity Books { +entity Books { title : String; author : Association to Authors; genre : Association to Genres; } -entity Genres { +entity Genres { name : String; parent : Association to Genres; } @@ -608,13 +608,12 @@ So, in total, and in effect, we learn: -The *[Hexagonal Architecture](https://alistair.cockburn.us/hexagonal-architecture/)* (also known as *Ports and Adapters Architecture/Pattern*) as first proposed by Alistair Cockburn in 2005, is quite famous and fancied these days (rightly so). As he introduces it, its intent is to: +The *[Hexagonal Architecture](https://en.wikipedia.org/wiki/hexagonal_architecture_(software))* (also known as *Ports and Adapters Architecture/Pattern*) as first proposed by Alistair Cockburn in 2005, is quite famous and fancied these days (rightly so). As he introduces it, its intent is to: *"Allow an application to equally be driven by users, programs, automated test or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and databases"* {.indent style="font-family:serif"} ... and he illustrated that like this: - -![Hexagonal architecture basic.gif](https://alistair.cockburn.us/hexFig1.png) +![Hexagonal Architecture original illustration by Alistair Cockburn](assets/concepts/hexagonal-archritecture-origin.png) In a nutshell, this introduction to the objectives of hexagonal architecture translates to that in our world of cloud-based business applications: From 3e6e565921bba35c3d3dbdad07fa3a329ee10669 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 5 Jun 2026 10:05:13 +0200 Subject: [PATCH 3/5] . --- get-started/concepts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/concepts.md b/get-started/concepts.md index 422ef91d0d..1dc56f5587 100644 --- a/get-started/concepts.md +++ b/get-started/concepts.md @@ -624,7 +624,7 @@ In a nutshell, this introduction to the objectives of hexagonal architecture tra > - To reduce complexity and speed up turnaround times at *development*, and in *tests* >
→ [*'Airplane Mode' Development & Tests*](features#fast-inner-loops) > -> **In contrast to that**, if you (think you) are doing Hexagonal Architecture, but still find yourself trapped in a slow and expensive always-connected development experience, you might have missed a point... → the *Why* and *What*, not *How*. +> **In contrast to that**, if (you think) you are doing Hexagonal Architecture, but still find yourself trapped in a slow and expensive always-connected development experience, you might have missed a point... → the *Why* and *What*, not *How*. From 366a8c6d2a2121e34945adc2e2081732c9770705 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 5 Jun 2026 11:30:25 +0200 Subject: [PATCH 4/5] polished --- get-started/concepts.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/get-started/concepts.md b/get-started/concepts.md index 1dc56f5587..7d46dc852d 100644 --- a/get-started/concepts.md +++ b/get-started/concepts.md @@ -608,23 +608,24 @@ So, in total, and in effect, we learn: -The *[Hexagonal Architecture](https://en.wikipedia.org/wiki/hexagonal_architecture_(software))* (also known as *Ports and Adapters Architecture/Pattern*) as first proposed by Alistair Cockburn in 2005, is quite famous and fancied these days (rightly so). As he introduces it, its intent is to: +The *[Hexagonal Architecture](https://en.wikipedia.org/wiki/hexagonal_architecture_(software))* (also known as *Ports and Adapters Architecture/Pattern*) as first proposed by Alistair Cockburn in 2005, is quite famous and fancied these days (rightly so). He introduced it back then with the following opening statement and illustration: -*"Allow an application to equally be driven by users, programs, automated test or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and databases"* {.indent style="font-family:serif"} +*"Allow an application to equally be driven by users, programs, automated test or batch scripts, and to be developed and tested in isolation from its eventual run-time devices and databases"* {style="font-family:serif; font-size:115%; padding:0 44px"} -... and he illustrated that like this: ![Hexagonal Architecture original illustration by Alistair Cockburn](assets/concepts/hexagonal-archritecture-origin.png) -In a nutshell, this introduction to the objectives of hexagonal architecture translates to that in our world of cloud-based business applications: +We can translate that to these objectives in our world of cloud-based business applications: > [!tip] Objectives of Hexagonal Architecture > > - Your *Application* (→ the inner hexagon) should stay ***agnostic*** to *"the outside"* > - Thereby allowing to replace *"the outside"* met in production by *mocked* variants > - To reduce complexity and speed up turnaround times at *development*, and in *tests* ->
→ [*'Airplane Mode' Development & Tests*](features#fast-inner-loops) > -> **In contrast to that**, if (you think) you are doing Hexagonal Architecture, but still find yourself trapped in a slow and expensive always-connected development experience, you might have missed a point... → the *Why* and *What*, not *How*. +> -> See also: [*Inner-Loop Development & Tests*](features#fast-inner-loops) +> + +In contrast to that, if (you think) you are doing Hexagonal Architecture, but still find yourself trapped in a slow and expensive always-connected development experience, you might have missed a point... → the *Why* and *What*, not *How*. From 2862353e0bd7a0d5f3b234d03c2b18bb330e9506 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 10 Jun 2026 21:20:59 +0200 Subject: [PATCH 5/5] bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 621a69b1be..d68a10212d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@capire/docs", - "version": "2026.4.2", + "version": "2026.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@capire/docs", - "version": "2026.4.2", + "version": "2026.4.3", "license": "SEE LICENSE IN LICENSE", "devDependencies": { "@cap-js/cds-typer": "^0", diff --git a/package.json b/package.json index 34d6137de1..657b198a78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@capire/docs", - "version": "2026.4.2", + "version": "2026.4.3", "description": "Capire on VitePress", "type": "module", "scripts": {