diff --git a/.ci/jenkins/Jenkinsfile.daily-dev-publish b/.ci/jenkins/Jenkinsfile.daily-dev-publish index ff19d2c9a9d..51d2def7daa 100644 --- a/.ci/jenkins/Jenkinsfile.daily-dev-publish +++ b/.ci/jenkins/Jenkinsfile.daily-dev-publish @@ -41,17 +41,17 @@ pipeline { DEV_DEPLOYMENT_BASE_IMAGE__registry = 'docker.io' DEV_DEPLOYMENT_BASE_IMAGE__account = 'apache' DEV_DEPLOYMENT_BASE_IMAGE__name = 'incubator-kie-sandbox-dev-deployment-base' - DEV_DEPLOYMENT_BASE_IMAGE__buildTags = 'daily-dev' + DEV_DEPLOYMENT_BASE_IMAGE__buildTag = 'daily-dev' DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__registry = 'docker.io' DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__account = 'apache' DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__name = 'incubator-dev-deployment-kogito-quarkus-blank-app' - DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTags = 'daily-dev' + DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTag = 'daily-dev' DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__registry = 'docker.io' DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__account = 'apache' DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__name = 'incubator-dev-deployment-dmn-form-webapp' - DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTags = 'daily-dev' + DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTag = 'daily-dev' ONLINE_EDITOR__devDeploymentBaseImageRegistry = 'docker.io' ONLINE_EDITOR__devDeploymentBaseImageAccount = 'apache' @@ -119,12 +119,12 @@ pipeline { KOGITO_TASK_CONSOLE__registry = 'docker.io' KOGITO_TASK_CONSOLE__account = 'apache' KOGITO_TASK_CONSOLE__name = 'incubator-kie-kogito-task-console' - KOGITO_TASK_CONSOLE__buildTags = 'daily-dev' + KOGITO_TASK_CONSOLE__buildTag = 'daily-dev' KOGITO_MANAGEMENT_CONSOLE__registry = 'docker.io' KOGITO_MANAGEMENT_CONSOLE__account = 'apache' KOGITO_MANAGEMENT_CONSOLE__name = 'incubator-kie-kogito-management-console' - KOGITO_MANAGEMENT_CONSOLE__buildTags = 'daily-dev' + KOGITO_MANAGEMENT_CONSOLE__buildTag = 'daily-dev' SONATAFLOW_BUILDER_IMAGE__registry = 'docker.io' SONATAFLOW_BUILDER_IMAGE__account = 'apache' @@ -279,7 +279,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.DEV_DEPLOYMENT_BASE_IMAGE__registry}/${env.DEV_DEPLOYMENT_BASE_IMAGE__account}", "${env.DEV_DEPLOYMENT_BASE_IMAGE__name}", - "${env.DEV_DEPLOYMENT_BASE_IMAGE__buildTags}", + "${env.DEV_DEPLOYMENT_BASE_IMAGE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } @@ -292,7 +292,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__registry}/${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__account}", "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__name}", - "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTags}", + "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } @@ -305,7 +305,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__registry}/${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__account}", "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__name}", - "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTags}", + "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } @@ -471,7 +471,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.KOGITO_TASK_CONSOLE__registry}/${env.KOGITO_TASK_CONSOLE__account}", "${env.KOGITO_TASK_CONSOLE__name}", - "${env.KOGITO_TASK_CONSOLE__buildTags}", + "${env.KOGITO_TASK_CONSOLE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } @@ -484,7 +484,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.KOGITO_MANAGEMENT_CONSOLE__registry}/${env.KOGITO_MANAGEMENT_CONSOLE__account}", "${env.KOGITO_MANAGEMENT_CONSOLE__name}", - "${env.KOGITO_MANAGEMENT_CONSOLE__buildTags}", + "${env.KOGITO_MANAGEMENT_CONSOLE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } diff --git a/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-base-image b/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-base-image index a191c9e357b..a36c9ca89c8 100644 --- a/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-base-image +++ b/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-base-image @@ -43,7 +43,7 @@ pipeline { DEV_DEPLOYMENT_BASE_IMAGE__registry = 'docker.io' DEV_DEPLOYMENT_BASE_IMAGE__account = 'apache' DEV_DEPLOYMENT_BASE_IMAGE__name = 'incubator-kie-sandbox-dev-deployment-base' - DEV_DEPLOYMENT_BASE_IMAGE__buildTags = "latest ${params.RELEASE_VERSION}" + DEV_DEPLOYMENT_BASE_IMAGE__buildTag = "latest ${params.RELEASE_VERSION}" RELEASE_ARTIFACTS_DIR = "${WORKSPACE}/release-artifacts" @@ -142,7 +142,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.DEV_DEPLOYMENT_BASE_IMAGE__registry}/${env.DEV_DEPLOYMENT_BASE_IMAGE__account}", "${env.DEV_DEPLOYMENT_BASE_IMAGE__name}", - "${env.DEV_DEPLOYMENT_BASE_IMAGE__buildTags}", + "${env.DEV_DEPLOYMENT_BASE_IMAGE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } diff --git a/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-dmn-form-webapp-image b/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-dmn-form-webapp-image index 1312a5729e9..5582e6877e1 100644 --- a/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-dmn-form-webapp-image +++ b/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-dmn-form-webapp-image @@ -43,7 +43,7 @@ pipeline { DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__registry = 'docker.io' DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__account = 'apache' DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__name = 'incubator-dev-deployment-dmn-form-webapp' - DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTags = "latest ${params.RELEASE_VERSION}" + DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTag = "latest ${params.RELEASE_VERSION}" RELEASE_ARTIFACTS_DIR = "${WORKSPACE}/release-artifacts" @@ -142,7 +142,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__registry}/${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__account}", "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__name}", - "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTags}", + "${env.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } diff --git a/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-kogito-quarkus-blank-app-image b/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-kogito-quarkus-blank-app-image index e3c2d4af661..6092b896751 100644 --- a/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-kogito-quarkus-blank-app-image +++ b/.ci/jenkins/release-jobs/Jenkinsfile.dev-deployment-kogito-quarkus-blank-app-image @@ -43,7 +43,7 @@ pipeline { DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__registry = 'docker.io' DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__account = 'apache' DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__name = 'incubator-dev-deployment-kogito-quarkus-blank-app' - DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTags = "latest ${params.RELEASE_VERSION}" + DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTag = "latest ${params.RELEASE_VERSION}" RELEASE_ARTIFACTS_DIR = "${WORKSPACE}/release-artifacts" @@ -142,7 +142,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__registry}/${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__account}", "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__name}", - "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTags}", + "${env.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } diff --git a/.ci/jenkins/release-jobs/Jenkinsfile.kogito-management-console b/.ci/jenkins/release-jobs/Jenkinsfile.kogito-management-console index 52871fa5f95..3d59128056b 100644 --- a/.ci/jenkins/release-jobs/Jenkinsfile.kogito-management-console +++ b/.ci/jenkins/release-jobs/Jenkinsfile.kogito-management-console @@ -43,7 +43,7 @@ pipeline { KOGITO_MANAGEMENT_CONSOLE__registry = 'docker.io' KOGITO_MANAGEMENT_CONSOLE__account = 'apache' KOGITO_MANAGEMENT_CONSOLE__name = 'incubator-kie-kogito-management-console' - KOGITO_MANAGEMENT_CONSOLE__buildTags = "latest ${params.RELEASE_VERSION}" + KOGITO_MANAGEMENT_CONSOLE__buildTag = "latest ${params.RELEASE_VERSION}" RELEASE_ARTIFACTS_DIR = "${WORKSPACE}/release-artifacts" @@ -142,7 +142,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.KOGITO_MANAGEMENT_CONSOLE__registry}/${env.KOGITO_MANAGEMENT_CONSOLE__account}", "${env.KOGITO_MANAGEMENT_CONSOLE__name}", - "${env.KOGITO_MANAGEMENT_CONSOLE__buildTags}", + "${env.KOGITO_MANAGEMENT_CONSOLE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } diff --git a/.ci/jenkins/release-jobs/Jenkinsfile.kogito-task-console b/.ci/jenkins/release-jobs/Jenkinsfile.kogito-task-console index d65b0bdcbb3..b2a8d48c22f 100644 --- a/.ci/jenkins/release-jobs/Jenkinsfile.kogito-task-console +++ b/.ci/jenkins/release-jobs/Jenkinsfile.kogito-task-console @@ -43,7 +43,7 @@ pipeline { KOGITO_TASK_CONSOLE__registry = 'docker.io' KOGITO_TASK_CONSOLE__account = 'apache' KOGITO_TASK_CONSOLE__name = 'incubator-kie-kogito-task-console' - KOGITO_TASK_CONSOLE__buildTags = "latest ${params.RELEASE_VERSION}" + KOGITO_TASK_CONSOLE__buildTag = "latest ${params.RELEASE_VERSION}" RELEASE_ARTIFACTS_DIR = "${WORKSPACE}/release-artifacts" @@ -142,7 +142,7 @@ pipeline { dockerUtils.pushImageToRegistry( "${env.KOGITO_TASK_CONSOLE__registry}/${env.KOGITO_TASK_CONSOLE__account}", "${env.KOGITO_TASK_CONSOLE__name}", - "${env.KOGITO_TASK_CONSOLE__buildTags}", + "${env.KOGITO_TASK_CONSOLE__buildTag}", "${pipelineVars.dockerHubApacheKiePushCredentialsId}" ) } diff --git a/examples/drools-process-usertasks-quarkus-example/pom.xml b/examples/drools-process-usertasks-quarkus-example/pom.xml index 116ac070637..3ab00e2fc76 100644 --- a/examples/drools-process-usertasks-quarkus-example/pom.xml +++ b/examples/drools-process-usertasks-quarkus-example/pom.xml @@ -32,6 +32,19 @@ drools-process-usertasks-quarkus-example Kie-Tools Example :: Process with Usertasks Quarkus Kogito user tasks orchestration - Quarkus + + + + + org.jbpm + jbpm-quarkus-devui-bom + ${project.version} + pom + import + + + + io.quarkus @@ -48,7 +61,6 @@ org.jbpm jbpm-quarkus-devui - ${project.version} io.quarkus diff --git a/examples/jbpm-compact-architecture-example/README.md b/examples/jbpm-compact-architecture-example/README.md new file mode 100644 index 00000000000..c754d55ceb6 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/README.md @@ -0,0 +1,555 @@ +# jBPM Compact Architecture Quarkus Example + +## Description + +This example showcases a basic implementation of the **Hiring** process that drives a _Candidate_ through different +interviews until he gets hired. + +This quickstart project shows a simple example user task orchestration including the use of DMN decisions to +generate the candidate offer and tÂșimers to skip User Tasks. + +This example also demonstrates how to configure the whole _Kogito_ environment using the new _Compact Architecture_ that +enable simplifying the communication among _Kogito_ services removing the need of events (Kafka/HTTP) between them. This can +be achieved using the following _Quarkus_ addons: + +- `kogito-addons-quarkus-data-index-persistence-postgresql`: enables the _Kogito Runtime_ persisting directly into the + _Data-Index_ database. +- `kogito-addons-quarkus-jobs`: enables collocating the _Jobs Service_ inside the _Kogito Runtime_. + +## The Java models + +The **Hiring** process uses two POJOs to handle the process data, both of them can be found in the _org.kie.kogito.hr_ package. + +The `CandidateData` POJO is the input of the process. It represents the person that wants to get the job. + +```java +public class CandidateData { + + private String name; // Name of the candidate + private String lastName; // Last name of the candidate + private String email; // Email of the candidate + private Integer experience; // Years of experience + private List skills; // List of technical skills + + // Constructors, setters, getters... +} +``` + +The `Offer` POJO is the output of the process and represents the job offer that will be sent to the candidate. +It will be automatically calculated during the process execution depending on the candidate years of experience & skills. + +```java +public class Offer { + + private String category; // Job category based on the candidate experience + private Integer salary; // Salary based on the candidate experience and skills + + // Constructors, setters, getters... +} +``` + +## The _New Hiring Offer_ DMN + +This example makes use of the _New Hiring Offer_ DMN to generate a base offer for the `Candidate`. The DMN looks like this: + +In this simple DMN we have an `Offer` _Decision_, that will generate the candidate offer, which +has a requirement of a `CandidateData` _Input Data_. + +
+
+ DMN Diagram +
New Hiring Offer DMN diagram
+
+
+ +The DMN defines the following data types (`tCandidateData` & `tOffer` ) matching the POJOs defined in the project +(`CandidateData.java` & `Offer.java`): + +
+
+ DMN Type Definitions +
New Hiring Offer DMN types
+
+
+ +As expected, `CandidateData` _Input Data_ & `Offer` _Decision_ have a `tCandidateData` data + +The `Offer` decision uses the following _Boxed Expression_ to generate the `tOffer`: + +
+
+ DMN Decision +
New Hiring Offer DMN decision
+
+
+ +## The Hiring Process + +### Process variables + +The process handles the following _Variables_: + +| Variable | Type | Tags | Description | +| ----------------- | --------------------------------- | ------------ | ------------------------------------------------- | +| **candidateData** | `org.kie.kogito.hr.CandidateData` | **input** | The candidate data | +| **offer** | `org.kie.kogito.hr.Offer` | **output** | The generated candidate offer | +| **hr_approval** | `Boolean` | **internal** | Determines that HR department approves the hiring | +| **it_approval** | `Boolean` | **internal** | Determines that IT department approves the hiring | + +### The BPMN Process + +
+
+ Hiring Process Diagram +
Hiring Process Diagram
+
+
+ +The process starts receiving the `CandidateData` as an input and storing it into the `candidateData` variable, and if the +candidate meets two minimal requirements, the process will continue and reach the **Generate base offer**, otherwise the +candidate application will be denied and the process will complete without sending the `offer` to the candidate. + +The **Generate base offer** is a _Business Rule Task_ that will use the _New Hiring Offer_ decision defined in the +`NewHiringOffer.dmn` to generate the an `Offer` based on the candidate experience and skills. The task takes the `candidateData` +as an input and will produce an instance of `org.kie.kogito.hr.Offer` that will be stored in the `offer` variable. + +
+
+ Offer assignments +
Generate base Offer data assignments
+
+
+ +After the `offer` has been generated, the process will jump into the **HR Interview** _User Task_, where the candidate we'll +be interviewed by the _HR_ department. The task takes the `candidateData` and `offer` as inputs and as an output will produce +the `hr_approve` boolean and an updated `offer`. + +
+
+ HR Interview assignments +
HR Interviewr task data assignments
+
+
+ +The **HR Interview** _User Task_ also has a _Boundary Timer Event_ that will prevent the task to delay and will cancel the +task after certain time (for example purpose just 3 minutes). This _Boundary Timer Event_ will schedule a Job in the Jobs Service +that when trigger will notify the _Kogito Runtime_ to cancel the task and deny the application. + +If **HR Interview** successfully completed, the process will jump into the **IT Interview** _User Task_. Again the candidate +we'll have a second interview with the _IT_ department. Again, this task will take the `candidateData` and `offer` as inputs +but as an output will produce the `it_approve` boolean. + +
+
+ IT Interview assignments +
IT Interviewr task data assignments
+
+
+ +Once both tasks are completed, if the candidate got the approvals from _HR_ & _IT_ (both `hr_interview` & `hr_interview` being true) +the process will jump into the **Send Offer to Candidate** _Script Task_ that will notify the candidate about the offer +and the process will end. + +> **NOTE:** for simplicity, all the _User Tasks_ in this example are assigned to the _jdoe_ user present in the keycloak configuration + +## Running the example + +### Prerequisites + +- Java 17+ installed +- Environment variable JAVA_HOME set accordingly +- Maven 3.9.3+ installed +- Docker and Docker Compose to run the required example infrastructure. + +And when using native image compilation, you will also need: + +- GraalVM 20.3+ installed +- Environment variable GRAALVM_HOME set accordingly +- GraalVM native image needs as well native-image extension: https://www.graalvm.org/reference-manual/native-image/ +- Note that GraalVM native image compilation typically requires other packages (glibc-devel, zlib-devel and gcc) to be installed too, please refer to GraalVM installation documentation for more details. + +### Infrastructure Services + +This quickstart provides a docker compose template that starts all the required services. This setup ensures that all services are connected with a default configuration. + +- PostgreSQL: 5432 +- Management Console: 8280 +- Task Console: 8380 +- Keycloak: 8480 +- PgAdmin: 8055 +- Kogito Example Service: 8080 + +To help bootstraping the Infrastructure Services, the example provides the `startServices.sh` script inside the _docker-compose_ +folder. + +> **_NOTE_**: the docker compose template requires using _extra_hosts_ to allow the services use the host network, this may +> carry some issues if you are using a **podman** version older than **4.7**. + +### Building & Running the example + +To build the example, on a Terminal, run the following command: + +```shell +mvn clean package -Pcontainer +``` + +This will build the example quarkus application and create a Docker image that will be started in the `docker-compose` template. + +To execute the full example (including consoles), open a Terminal and run the following command inside the `docker-compose` folder: + +```shell +sh startServices.sh +``` + +> **_IMPORTANT:_** if you are running this example on MacOs and you are not using **Docker Desktop**, please append +> the following entry in your `/etc/hosts` file to enable a good communication between al components. +> +> ``` +> 127.0.0.1 kubernetes.docker.internal +> ``` + +Additionally, if you want to start only the example and the minimal Infrastructure Services (PostgreSQL, Data-Index and Jobs Service), +you can run the same `startServices.sh` script but passing the `example` argument + +```shell +sh startServices.sh example +``` + +> **_NOTE:_** starting the Infrastructure Services, please consider running a `mvn clean package -Pcontainer` +> command on the project root before running the `startServices.sh` script for the first time or any time you modify the project. + +### Running the example in Development mode + +To run the example in Development mode, just run the following command in a Terminal: + +```shell +mvn clean package quarkus:dev -Pdevelopment +``` + +The Development Mode will embed all the needed Infrastructure Services (PostgreSQL, Data-Index & Jobs Service) and won't +require any extra step. + +The `development` profile includes the **Runtime Tools Quarkus Extension** that exposes a new section in the **Quarkus Dev-UI** +unifying the **Management Console** & **Task Console** functionalities. **Quarkus Dev-UI** is available at http://localhost:8080/q/dev + +> **_NOTE:_** For more information about how to work with Kogito Runtime Tools Quarkus Extension, please refer to the [Kogito Documentation](https://docs.kogito.kie.org/latest/html_single/#con-runtime-tools-dev-ui_kogito-developing-process-services) page. + +### Starting an instance of the Hiring Process + +Once the service is up and running you can make use of the **Hiring** application by a sending request to `http://localhost:8080/hiring`. + +Sending the following valid `CandidateData` will start a process instance that will land into the _HR Interview_ task: + +```json +{ + "candidateData": { + "name": "Jon", + "lastName": "Snow", + "email": "jon@snow.org", + "experience": 5, + "skills": ["Java", "Kogito", "Fencing"] + } +} +``` + +In a Terminal you can execute this curl command to start a **Hiring** process: + +```bash +curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 5, "skills": ["Java", "Kogito", "Fencing"]}}' +``` + +If everything went well you may get a response like: + +```json +{ + "id": "628e679f-4deb-4abc-9f28-668914c64ef9", + "offer": { + "category": "Senior Software Engineer", + "salary": 40450 + } +} +``` + +In the server log You may find a trace like: + +``` +New Hiring has been created for candidate: Jon Snow +################################### +Generated offer for candidate: Jon Snow +Job Category: Senior Software Engineer +Base salary: 40450 +################################### +``` + +Use the following `CandidateData` that don't match the minimal candidate requirements, to start a process that will automatically end: + +```json +{ + "candidateData": { + "name": "Jon", + "lastName": "Snow", + "email": "jon@snow.org", + "experience": 0, + "skills": [] + } +} +``` + +In a Terminal you can execute this curl command to start a **Hiring** process: + +```bash +curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 0, "skills": []}}' +``` + +If everything went well you may get a response like: + +```json +{ + "id": "3659601a-bb59-458d-859e-7892621ad5b7", + "offer": null +} +``` + +In the server log You may find a trace like: + +``` +New Hiring has been created for candidate: Jon Snow +################################### +Candidate Jon Snow don't meet the requirements for the position but we'll keep it on records for the future! +################################### +``` + +### Using Keycloak as Authentication Server + +In this Quickstart we'll be using [Keycloak](https://www.keycloak.org/) as _Authentication Server_. It will be started as a part of the project _Infrastructure Services_, you can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder. + +It will install the _Kogito Realm_ that comes with a predefined set of users: + +| Login | Password | Roles | +| ----- | -------- | ------------------- | +| admin | admin | _admin_, _managers_ | +| alice | alice | _user_ | +| jdoe | jdoe | _managers_ | + +Once Keycloak is started, you should be able to access your _Keycloak Server_ at [localhost:8480/auth](http://localhost:8480/auth) with _admin_ user. + +> **_NOTE:_** This example uses keycloak authentication to enable security only in the consoles not in runtime. + +### Using the Kogito Runtime Consoles to interact with the Hiring Process + +The following _step-by-step_ guides will show how to take advantage of both _Kogito Management Console_ and _Kogito Task Console_ +to operate with the instances of _Hiring_ process. + +To be able to follow the guides, please make sure that the example has been built using the `container` and all the _Infractructure Services_ +are started as explained in the [Building & Running the example](#building--running-the-example) section. + +> **_NOTE_**: For more information about how to operate with the _Kogito Runtime Consoles_, please refer to the +> [Management Console](https://docs.kogito.kie.org/latest/html_single/#con-management-console_kogito-developing-process-services) & [Task Console](https://docs.kogito.kie.org/latest/html_single/#con-task-console_kogito-developing-process-services) documentation. + +#### Show active Hiring process instance at Kogito Management Console + +_Kogito Management Console_ is the tool that enables the user to view and administrate process instances in our _Kogito application_. + +In this guide we'll see how to use the _Kogito Management Console_ to view the state of the Hiring process instances. + +1. With the example built and all the _Infrastructure Services_ running, let's start an instance of the _Hiring_ process. To do so, in a Terminal just run: + + ```bash + curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 5, "skills": ["Java", "Kogito", "Fencing"]}}' + ``` + + If everything went well, you should get a response like: + + ```json + { + "id": "064a6372-b5bb-4eff-a059-d7b24d4ac64a", + "offer": { "category": "Senior Software Engineer", "salary": 40450 } + } + ``` + + Which indicates that a new process instance with id **064a6372-b5bb-4eff-a059-d7b24d4ac64a** has been started. + +2. Now let's check the process instance state with the _Kogito Management Console_. To do so, in your browser navigate + to http://localhost:8280 and log in using any of the users specified in the [Using Keycloak as Authentication Server](#using-keycloak-as-authentication-server). + + Once you are logged in, you should be redirected to the **Process Instances** page where you should be able to see + the started process instance in active state. + +
+
+ Process List +
Process List in Kogito Management Console
+
+
+ +3. Click on the instance **id** to navigate into the _Process Details_ page. In there you'll be able to see different panels displaying relevant information about the instance state, such as the _Diagram_, _Timeline_, _Details_, _Variables_, _Jobs_... + +
+
+ Process Details +
Process Instance Details page
+
+
+ + Now check the **Diagram** panel, in there you'll se the instance execution path. Notice that it's stopped _HR Interview_ _User Task_ waiting for some input from the user. + The task has _Timer_ that will skip the task if it's not completed in a given time (3 minutes in this example). You should be able to see the + associated _Job_ in the **Jobs** panel. Now, let's wait 3 minutes to see the timer in action. + +4. After 3 minutes, the scheduled _Job_ should have been executed, making the process instance skip the _HR Interview_ task. + In the **Process Details** page, click the _Refresh_ button to see the process instance state. + +
+
+ Process Details after timer +
Process Instance completed after the timer execution.
+
+
+ + Again, check the _Diagram_ panel to see the process instance execution path and the _HR Interview_ task + should have been skipped and the process instance continued its execution by following the _Application denied_ path + reaching the _Completed_ state. + + Notice in the _Jobs_ panel that the associated _Job_ has the **Executed** status. + +#### Complete Hiring process instances using Kogito Task Console + +When a _Kogito_ process reaches a _User Task_, the process execution stops waiting for the user input +that will enable the _User Task_ to finish and allowing the process execution to continue. + +_Kogito Task Console_ is the tool that enables the user interacting with the process _User Tasks_ and provide the necesary data +for the process to continue (usually wiht forms). + +In this guide, we'll see how to complete the process _User Tasks_ using the _Kogito Task Console_ to interact with the process _User Tasks_ +using the engine autogenerated forms. + +> **_NOTE_**: For simplicity, all the _User Tasks_ are assigned to the user _jdoe_. Please make sure you use the _jdoe_/_jdoe_ credentials +> when logging in the _Task Console_ + +1. With the example built and all the _Infrastructure Services_ running, let's start an instance of the _Hiring_ process. To do so, in a Terminal just run: + + ```bash + curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d '{"candidateData": { "name": "Jon", "lastName": "Snow", "email": "jon@snow.org", "experience": 5, "skills": ["Java", "Kogito", "Fencing"]}}' + ``` + + If everything went well, you should get a response like: + + ```json + { + "id": "3cf0d58f-a824-4046-ba6c-c2e79edc1df7", + "offer": { "category": "Senior Software Engineer", "salary": 40450 } + } + ``` + + Which indicates that a new process instance with id **3cf0d58f-a824-4046-ba6c-c2e79edc1df7** has been started. + +2. Let's check the process instance state. Again browse to http://localhost:8280 to access the _Kogito Management Console_, + and in the **Process List** click the **Id** column to open the **Process Details** page. + +
+
+ Process List +
Process List in Kogito Management Console
+
+
+ +
+
+ Process Details +
Process instance Details page.
+
+
+ + As expected, the process instance is stopped in the _HR Interview_ task waiting for some input from the user. Let's try to + complete the task. + +3. Now open the _Kogito Task Console_ by browsing to http://localhost:8380 and login using the **jdoe/jdoe** credentials. + After logging in, you'll be redirected to the **Task Inbox** page, which contains the list of _Active_ tasks assigned to the + logged user. In this case you should be able to see only the new _HR Interview_ task. + +
+
+ Task Inbox +
Task Inbox in Kogito Task Console
+
+
+ + Click on the **HR Interview** task to open the form and complete it! + +4. The **Task Form** is the main component to interact with User Tasks, it allows the user to provide the data required by + the task and transition it to the next phase, allowing the Process to continue. The **Task Form** is autogenerated based + on the _User Task_ data assignments. + +
+
+ HR Interview Form +
HR Interview Task Form
+
+
+ + _HR Interview_ Form allows you to edit the actual **Offer** that will be sent to the _Candidate_ and also approve or deny + the job application with the **Approve** checkbox. + + Now, check the **Approve** checkbox click the **Complete** button in order to submit the form and complete the task. If the + task could be successfully completed, a notification should appear in the screen and the form will stay in Read-Only mode. + +
+
+ HR Interview Form Notification +
HR Interview Success notification!
+
+
+ + With the _HR Interview_ task successfully completed the process has moved forward and reached the _IT Interview_ task. + + Optionally, you can check the process instance state in the **Kogito Management Console** and verify the current + execution path. + +
+
+ Process Details +
Process Instance details stopped in IT Interview
+
+
+ +5. Now is time to complete the **IT Interview** task and complete this Hiring process instance. In **Task Console**, go + back to **Task Inbox** and as expected, there you'll see that **HR Interview** is no longer available and a new + **IT Interview** has appeared. + +
+
+ Task Inbox +
IT Interview in Task Inbox
+
+
+ + As done in Step #3, click in the **IT Interview** task to open the task form. _IT Interview_ task only needs the + candidate **Approval** to be submitted. Please, check the **Approval** field and click the **Complete** button to + submit the form. + +
+
+ IT Interview Form +
IT Interview Task Form
+
+
+ +6. After the form is submitted the _IT Task_ should be completed and the process should continue, notifying the _Candidate_ + that he has succesfully finished the Hiring process. Please go back to **Task Inbox** to verify there are no other active tasks + waiting for you. + +
+
+ Empty Task Inbox +
Empty **Task Inbox** after completing the *IT Interview* Task
+
+
+ + You can also open use _Kogito Management Console_ to check the state of the process instance and verify that the + instance has been successfully completed. + +
+
+ Hiring Process succesfully completed +
Hiring Process sucessfully completed
+
+
diff --git a/examples/jbpm-compact-architecture-example/docker-compose/.gitignore b/examples/jbpm-compact-architecture-example/docker-compose/.gitignore new file mode 100644 index 00000000000..b6632dbda58 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/.gitignore @@ -0,0 +1,3 @@ +.env +svg/ +persistence/ \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/docker-compose/README.md b/examples/jbpm-compact-architecture-example/docker-compose/README.md new file mode 100644 index 00000000000..26834f79196 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/README.md @@ -0,0 +1,61 @@ +# Kogito and Infrastructure services + +To allow a quick setup of all services required to run this demo, we provide a docker compose template that starts the following services: + +- Postgresql +- PgAdmin +- Kogito Example Service (Only available if the example has been compiled using the `container` mvn profile eg: `mvn cleanp package -Dcontainer`) +- Kogito Management Console +- Kogito Task Console +- Keycloak + +The docker compose template provides three profiles to enable starting only the set of services you want to use. The profiles are: + +- **infra**: Starts only the minimal infrastructure to run the example (Postgresql, pgadmin, Kogito Data Index) +- **example**: Starts the services in _infra_ profile and the Kogito Example Service. Requires the example to be compiled using the `container` mvn profile eg: `mvn cleanp package -Dcontainer`. +- **full** (default): includes all the above and also starts the **Management Console**, **Task Console** and a **Keycloak** to handle the consoles authentication. Requires the example to be compiled using the `container` mvn profile eg: `mvn cleanp package -Dcontainer`. + +> NOTE: In order to use it, please ensure you have Docker Compose installed on your machine, otherwise follow the instructions available +> in [here](https://docs.docker.com/compose/install/). + +## Starting the services + +Use the `startServices.sh` passing the docker profile you want to use as an argument. If no profile is provided the script will default to **full**. + +Eg: + +```shell +sh startServices.sh example +``` + +Once the services are started (depending on the profile), the following ports will be assigned on your local machine: + +- Postgresql: 5432 +- PgAdmin: 8055 +- Kogito Example Service: 8080 +- Kogito Management Console: 8280 +- Kogito Task Console: 8380 +- Keycloak: 8480 + +## Stopping and removing volume data + +To stop all services, simply run: + +```shell +docker compose stop +``` + +or + +```shell +docker compose down +``` + +to stop the services and remove the containers +docker-compose -f docker-compose-postgresql.yml stop + +For more details please check the Docker Compose documentation. + +```shell +docker compose --help +``` diff --git a/examples/jbpm-compact-architecture-example/docker-compose/docker-compose.yml b/examples/jbpm-compact-architecture-example/docker-compose/docker-compose.yml new file mode 100644 index 00000000000..e65463296c5 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/docker-compose.yml @@ -0,0 +1,127 @@ +version: "3" + +services: + postgres: + container_name: postgres + image: postgres:16.1-alpine3.19 + profiles: ["infra", "example", "full"] + ports: + - "5432:5432" + volumes: + - ./sql:/docker-entrypoint-initdb.d:Z + healthcheck: + test: ["CMD", "pg_isready", "-q", "-d", "kogito", "-U", "kogito-user"] + timeout: 45s + interval: 10s + retries: 50 + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + + pgadmin: + container_name: pgadmin + image: dpage/pgadmin4:8.2 + profiles: ["infra", "example", "full"] + ports: + - 8055:80 + depends_on: + - postgres + volumes: + - ./pgadmin/servers.json:/pgadmin4/servers.json + - ./pgadmin/pgpass:/pgadmin4/pgpass + entrypoint: > + /bin/sh -c " + cp -f /pgadmin4/pgpass /var/lib/pgadmin/; + chmod 600 /var/lib/pgadmin/pgpass; + /entrypoint.sh + " + environment: + PGADMIN_DEFAULT_EMAIL: user@kogito.org + PGADMIN_DEFAULT_PASSWORD: pass + PGADMIN_CONFIG_SERVER_MODE: "False" + PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False" + GUNICORN_ACCESS_LOGFILE: "/dev/null" + + jbpm-compact-architecture-example-service: + container_name: jbpm-compact-architecture-example-service + image: dev.local/${USER}/jppm-compact-architecture-example-service:${PROJECT_VERSION} + profiles: ["example", "full"] + ports: + - "8080:8080" + environment: + QUARKUS_HTTP_CORS_ORIGINS: "/.*/" + QUARKUS_DATASOURCE_JDBC_URL: "jdbc:postgresql://postgres:5432/kogito" + QUARKUS_DATASOURCE_REACTIVE_URL: "postgresql://postgres:5432/kogito" + QUARKUS_DATASOURCE_USERNAME: kogito-user + QUARKUS_DATASOURCE_PASSWORD: kogito-pass + QUARKUS_DATASOURCE_DB_KIND: postgresql + KOGITO_JOBS_SERVICE_URL: http://${DOCKER_GATEWAY_HOST}:8080 + KOGITO_SERVICE_URL: http://${DOCKER_GATEWAY_HOST}:8080 + KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST}:8080 + extra_hosts: + - "${DOCKER_GATEWAY_HOST}:host-gateway" + + keycloak: + container_name: keycloak + image: quay.io/keycloak/keycloak:legacy + profiles: ["full"] + ports: + - "8480:8080" + depends_on: + postgres: + condition: service_healthy + volumes: + - ./keycloak/kogito-realm.json:/tmp/kogito-realm.json + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/auth/realms/kogito"] + interval: 2s + timeout: 1s + retries: 50 + environment: + DB_VENDOR: POSTGRES + DB_ADDR: postgres + DB_DATABASE: keycloak + DB_USER: kogito-user + DB_SCHEMA: public + DB_PASSWORD: kogito-pass + KEYCLOAK_USER: admin + KEYCLOAK_PASSWORD: admin + KEYCLOAK_IMPORT: /tmp/kogito-realm.json + + management-console: + container_name: management-console + image: ${KOGITO_MANAGEMENT_CONSOLE_IMAGE} + profiles: ["full"] + ports: + - 8280:8080 + depends_on: + jbpm-compact-architecture-example-service: + condition: service_started + keycloak: + condition: service_healthy + volumes: + - ./svg/:/home/kogito/data/svg/ + environment: + RUNTIME_TOOLS_MANAGEMENT_CONSOLE_DATA_INDEX_ENDPOINT: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8080/graphql + KOGITO_CONSOLES_KEYCLOAK_HEALTH_CHECK_URL: http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration + KOGITO_CONSOLES_KEYCLOAK_URL: http://localhost:8480/auth + KOGITO_CONSOLES_KEYCLOAK_REALM: kogito + KOGITO_CONSOLES_KEYCLOAK_CLIENT_ID: kogito-console-quarkus + + task-console: + container_name: task-console + image: ${KOGITO_TASK_CONSOLE_IMAGE} + profiles: ["full"] + ports: + - 8380:8080 + depends_on: + jbpm-compact-architecture-example-service: + condition: service_started + keycloak: + condition: service_healthy + environment: + RUNTIME_TOOLS_TASK_CONSOLE_DATA_INDEX_ENDPOINT: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8080/graphql + KOGITO_CONSOLES_KEYCLOAK_HEALTH_CHECK_URL: http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration + KOGITO_CONSOLES_KEYCLOAK_URL: http://localhost:8480/auth + KOGITO_CONSOLES_KEYCLOAK_REALM: kogito + KOGITO_CONSOLES_KEYCLOAK_CLIENT_ID: kogito-console-quarkus diff --git a/examples/jbpm-compact-architecture-example/docker-compose/keycloak/kogito-realm.json b/examples/jbpm-compact-architecture-example/docker-compose/keycloak/kogito-realm.json new file mode 100644 index 00000000000..711887e17a2 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/keycloak/kogito-realm.json @@ -0,0 +1,2010 @@ +{ + "realm": "kogito", + "notBefore": 0, + "revokeRefreshToken": false, + "refreshTokenMaxReuse": 0, + "accessTokenLifespan": 300, + "accessTokenLifespanForImplicitFlow": 900, + "ssoSessionIdleTimeout": 1800, + "ssoSessionMaxLifespan": 36000, + "ssoSessionIdleTimeoutRememberMe": 0, + "ssoSessionMaxLifespanRememberMe": 0, + "offlineSessionIdleTimeout": 2592000, + "offlineSessionMaxLifespanEnabled": false, + "offlineSessionMaxLifespan": 5184000, + "accessCodeLifespan": 60, + "accessCodeLifespanUserAction": 300, + "accessCodeLifespanLogin": 1800, + "actionTokenGeneratedByAdminLifespan": 43200, + "actionTokenGeneratedByUserLifespan": 300, + "enabled": true, + "sslRequired": "external", + "registrationAllowed": false, + "registrationEmailAsUsername": false, + "rememberMe": false, + "verifyEmail": false, + "loginWithEmailAllowed": true, + "duplicateEmailsAllowed": false, + "resetPasswordAllowed": false, + "editUsernameAllowed": false, + "bruteForceProtected": false, + "permanentLockout": false, + "maxFailureWaitSeconds": 900, + "minimumQuickLoginWaitSeconds": 60, + "waitIncrementSeconds": 60, + "quickLoginCheckMilliSeconds": 1000, + "maxDeltaTimeSeconds": 43200, + "failureFactor": 30, + "roles": { + "realm": [ + { + "name": "managers", + "composite": false, + "clientRole": false, + "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", + "attributes": {} + }, + { + "name": "uma_authorization", + "description": "${role_uma_authorization}", + "composite": false, + "clientRole": false, + "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", + "attributes": {} + }, + { + "name": "admin", + "composite": false, + "clientRole": false, + "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", + "attributes": {} + }, + { + "name": "user", + "composite": false, + "clientRole": false, + "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", + "attributes": {} + }, + { + "name": "HR", + "composite": false, + "clientRole": false, + "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", + "attributes": {} + }, + { + "name": "IT", + "composite": false, + "clientRole": false, + "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", + "attributes": {} + }, + { + "name": "offline_access", + "description": "${role_offline-access}", + "composite": false, + "clientRole": false, + "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", + "attributes": {} + } + ], + "client": { + "realm-management": [ + { + "name": "manage-identity-providers", + "description": "${role_manage-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "impersonation", + "description": "${role_impersonation}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "view-identity-providers", + "description": "${role_view-identity-providers}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "view-realm", + "description": "${role_view-realm}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "query-users", + "description": "${role_query-users}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "manage-clients", + "description": "${role_manage-clients}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "manage-events", + "description": "${role_manage-events}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "realm-admin", + "description": "${role_realm-admin}", + "composite": true, + "composites": { + "client": { + "realm-management": [ + "impersonation", + "manage-identity-providers", + "view-identity-providers", + "view-realm", + "query-users", + "manage-clients", + "manage-events", + "manage-realm", + "view-authorization", + "manage-authorization", + "view-users", + "create-client", + "query-clients", + "query-groups", + "manage-users", + "view-clients", + "view-events", + "query-realms" + ] + } + }, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "manage-realm", + "description": "${role_manage-realm}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "view-authorization", + "description": "${role_view-authorization}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "manage-authorization", + "description": "${role_manage-authorization}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "create-client", + "description": "${role_create-client}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "view-users", + "description": "${role_view-users}", + "composite": true, + "composites": { + "client": { + "realm-management": ["query-groups", "query-users"] + } + }, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "query-clients", + "description": "${role_query-clients}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "query-groups", + "description": "${role_query-groups}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "manage-users", + "description": "${role_manage-users}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "view-clients", + "description": "${role_view-clients}", + "composite": true, + "composites": { + "client": { + "realm-management": ["query-clients"] + } + }, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "view-events", + "description": "${role_view-events}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + }, + { + "name": "query-realms", + "description": "${role_query-realms}", + "composite": false, + "clientRole": true, + "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", + "attributes": {} + } + ], + "security-admin-console": [], + "admin-cli": [], + "kogito-service": [ + { + "name": "uma_protection", + "composite": false, + "clientRole": true, + "containerId": "0ac5df91-e044-4051-bd03-106a3a5fb9cc", + "attributes": {} + } + ], + "broker": [ + { + "name": "read-token", + "description": "${role_read-token}", + "composite": false, + "clientRole": true, + "containerId": "53d4fe53-a039-471e-886a-28eddc950e95", + "attributes": {} + } + ], + "account": [ + { + "name": "view-profile", + "description": "${role_view-profile}", + "composite": false, + "clientRole": true, + "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", + "attributes": {} + }, + { + "name": "manage-account", + "description": "${role_manage-account}", + "composite": true, + "composites": { + "client": { + "account": ["manage-account-links"] + } + }, + "clientRole": true, + "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", + "attributes": {} + }, + { + "name": "manage-account-links", + "description": "${role_manage-account-links}", + "composite": false, + "clientRole": true, + "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", + "attributes": {} + } + ] + } + }, + "groups": [], + "defaultRoles": ["uma_authorization", "offline_access"], + "requiredCredentials": ["password"], + "otpPolicyType": "totp", + "otpPolicyAlgorithm": "HmacSHA1", + "otpPolicyInitialCounter": 0, + "otpPolicyDigits": 6, + "otpPolicyLookAheadWindow": 1, + "otpPolicyPeriod": 30, + "otpSupportedApplications": ["FreeOTP", "Google Authenticator"], + "scopeMappings": [ + { + "clientScope": "offline_access", + "roles": ["offline_access"] + } + ], + "clients": [ + { + "clientId": "account", + "name": "${client_account}", + "baseUrl": "/auth/realms/kogito/account", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "0136c3ef-0dfd-4b13-a6d0-2c8b6358edec", + "defaultRoles": ["view-profile", "manage-account"], + "redirectUris": ["/auth/realms/kogito/account/*"], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] + }, + { + "clientId": "admin-cli", + "name": "${client_admin-cli}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "a951803a-79c7-46a6-8197-e32835286971", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] + }, + { + "clientId": "broker", + "name": "${client_broker}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "e1f7edd7-e15c-43b4-8736-ff8204d16836", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] + }, + { + "clientId": "kogito-frontend", + "rootUrl": "http://localhost:8082", + "adminUrl": "http://localhost:8082", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "secret", + "redirectUris": ["http://localhost:8082/*"], + "webOrigins": ["http://localhost:8082"], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"], + "access": { + "view": true, + "configure": true, + "manage": true + } + }, + { + "clientId": "kogito-app", + "rootUrl": "http://localhost:8080", + "adminUrl": "http://localhost:8080", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "secret", + "redirectUris": ["http://localhost:8080/*"], + "webOrigins": ["*"], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"], + "access": { + "view": true, + "configure": true, + "manage": true + } + }, + { + "clientId": "kogito-service", + "rootUrl": "", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "secret", + "redirectUris": ["*"], + "webOrigins": ["*"], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": true, + "authorizationServicesEnabled": true, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "name": "Client ID", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientId", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientId", + "jsonType.label": "String" + } + }, + { + "name": "Client IP Address", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientAddress", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientAddress", + "jsonType.label": "String" + } + }, + { + "name": "Client Host", + "protocol": "openid-connect", + "protocolMapper": "oidc-usersessionmodel-note-mapper", + "consentRequired": false, + "config": { + "user.session.note": "clientHost", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "clientHost", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"], + "authorizationSettings": { + "allowRemoteResourceManagement": true, + "policyEnforcementMode": "ENFORCING", + "resources": [ + { + "name": "User Resource", + "ownerManagedAccess": false, + "attributes": {}, + "_id": "df1b74a9-3f10-499d-a581-368de48e512b", + "uris": ["/api/users/*"] + }, + { + "name": "Administration Resource", + "ownerManagedAccess": false, + "attributes": {}, + "_id": "7124e2f1-e6dc-44b4-87ab-24b010090b97", + "uris": ["/api/admin/*"] + } + ], + "policies": [ + { + "name": "Any User Policy", + "description": "Any user granted with the user role can access something", + "type": "role", + "logic": "POSITIVE", + "decisionStrategy": "UNANIMOUS", + "config": { + "roles": "[{\"id\":\"user\",\"required\":false}]" + } + }, + { + "name": "Only Administrators", + "description": "Only administrators can access", + "type": "role", + "logic": "POSITIVE", + "decisionStrategy": "UNANIMOUS", + "config": { + "roles": "[{\"id\":\"admin\",\"required\":false}]" + } + }, + { + "name": "User Resource Permission", + "type": "resource", + "logic": "POSITIVE", + "decisionStrategy": "UNANIMOUS", + "config": { + "resources": "[\"User Resource\"]", + "applyPolicies": "[\"Any User Policy\"]" + } + }, + { + "name": "Administration Resource Permission", + "type": "resource", + "logic": "POSITIVE", + "decisionStrategy": "UNANIMOUS", + "config": { + "resources": "[\"Administration Resource\"]", + "applyPolicies": "[\"Only Administrators\"]" + } + } + ], + "scopes": [], + "decisionStrategy": "UNANIMOUS" + } + }, + { + "clientId": "kogito-console-react", + "rootUrl": "http://localhost:9000", + "adminUrl": "http://localhost:9000/", + "baseUrl": "http://localhost:9000/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": ["http://localhost:9000/*"], + "webOrigins": ["*"], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] + }, + { + "clientId": "kogito-console-quarkus", + "rootUrl": "http://localhost:8380", + "adminUrl": "http://localhost:8380/", + "baseUrl": "http://localhost:8380/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "**********", + "redirectUris": ["http://localhost:8380/*", "http://localhost:8280/*"], + "webOrigins": ["*"], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "multivalued": "true", + "user.attribute": "foo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] + }, + { + "clientId": "kogito-jobs-service", + "rootUrl": "http://localhost:8080", + "adminUrl": "http://localhost:8080", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "secret", + "redirectUris": ["http://localhost:8080/*"], + "webOrigins": ["http://localhost:8080"], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "exclude.session.state.from.auth.response": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "tls.client.certificate.bound.access.tokens": "false", + "saml.authnstatement": "false", + "display.on.consent.screen": "false", + "saml.onetimeuse.condition": "false" + }, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"], + "access": { + "view": true, + "configure": true, + "manage": true + } + }, + { + "clientId": "realm-management", + "name": "${client_realm-management}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "c41b709a-a012-4c69-89d7-4f926dba0619", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] + }, + { + "clientId": "security-admin-console", + "name": "${client_security-admin-console}", + "baseUrl": "/auth/admin/kogito/console/index.html", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "e571b211-2550-475d-b87f-116ff54091ee", + "redirectUris": ["/auth/admin/kogito/console/*"], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "authenticationFlowBindingOverrides": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + } + ], + "defaultClientScopes": ["web-origins", "role_list", "profile", "roles", "email"], + "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] + } + ], + "clientScopes": [ + { + "name": "address", + "description": "OpenID Connect built-in scope: address", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${addressScopeConsentText}" + }, + "protocolMappers": [ + { + "name": "address", + "protocol": "openid-connect", + "protocolMapper": "oidc-address-mapper", + "consentRequired": false, + "config": { + "user.attribute.formatted": "formatted", + "user.attribute.country": "country", + "user.attribute.postal_code": "postal_code", + "userinfo.token.claim": "true", + "user.attribute.street": "street", + "id.token.claim": "true", + "user.attribute.region": "region", + "access.token.claim": "true", + "user.attribute.locality": "locality" + } + } + ] + }, + { + "name": "email", + "description": "OpenID Connect built-in scope: email", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${emailScopeConsentText}" + }, + "protocolMappers": [ + { + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "name": "email verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "emailVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email_verified", + "jsonType.label": "boolean" + } + } + ] + }, + { + "name": "microprofile-jwt", + "description": "Microprofile - JWT built-in scope", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "false" + }, + "protocolMappers": [ + { + "name": "upn", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "upn", + "jsonType.label": "String" + } + }, + { + "name": "groups", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "multivalued": "true", + "user.attribute": "foo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "groups", + "jsonType.label": "String" + } + } + ] + }, + { + "name": "offline_access", + "description": "OpenID Connect built-in scope: offline_access", + "protocol": "openid-connect", + "attributes": { + "consent.screen.text": "${offlineAccessScopeConsentText}", + "display.on.consent.screen": "true" + } + }, + { + "name": "phone", + "description": "OpenID Connect built-in scope: phone", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${phoneScopeConsentText}" + }, + "protocolMappers": [ + { + "name": "phone number verified", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumberVerified", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number_verified", + "jsonType.label": "boolean" + } + }, + { + "name": "phone number", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "phoneNumber", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "phone_number", + "jsonType.label": "String" + } + } + ] + }, + { + "name": "profile", + "description": "OpenID Connect built-in scope: profile", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "true", + "display.on.consent.screen": "true", + "consent.screen.text": "${profileScopeConsentText}" + }, + "protocolMappers": [ + { + "name": "nickname", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "nickname", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "nickname", + "jsonType.label": "String" + } + }, + { + "name": "zoneinfo", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "zoneinfo", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "zoneinfo", + "jsonType.label": "String" + } + }, + { + "name": "updated at", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "updatedAt", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "updated_at", + "jsonType.label": "String" + } + }, + { + "name": "birthdate", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "birthdate", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "birthdate", + "jsonType.label": "String" + } + }, + { + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": false, + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "name": "middle name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "middleName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "middle_name", + "jsonType.label": "String" + } + }, + { + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "name": "gender", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "gender", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "gender", + "jsonType.label": "String" + } + }, + { + "name": "picture", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "picture", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "picture", + "jsonType.label": "String" + } + }, + { + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "name": "profile", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "profile", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "profile", + "jsonType.label": "String" + } + }, + { + "name": "website", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "website", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "website", + "jsonType.label": "String" + } + } + ] + }, + { + "name": "role_list", + "description": "SAML role list", + "protocol": "saml", + "attributes": { + "consent.screen.text": "${samlRoleListScopeConsentText}", + "display.on.consent.screen": "true" + }, + "protocolMappers": [ + { + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + } + ] + }, + { + "name": "roles", + "description": "OpenID Connect scope for add user roles to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "true", + "consent.screen.text": "${rolesScopeConsentText}" + }, + "protocolMappers": [ + { + "name": "realm roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-realm-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "realm_access.roles", + "jsonType.label": "String", + "multivalued": "true" + } + }, + { + "name": "audience resolve", + "protocol": "openid-connect", + "protocolMapper": "oidc-audience-resolve-mapper", + "consentRequired": false, + "config": {} + }, + { + "name": "client roles", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-client-role-mapper", + "consentRequired": false, + "config": { + "user.attribute": "foo", + "access.token.claim": "true", + "claim.name": "resource_access.${client_id}.roles", + "jsonType.label": "String", + "multivalued": "true" + } + } + ] + }, + { + "name": "web-origins", + "description": "OpenID Connect scope for add allowed web origins to the access token", + "protocol": "openid-connect", + "attributes": { + "include.in.token.scope": "false", + "display.on.consent.screen": "false", + "consent.screen.text": "" + }, + "protocolMappers": [ + { + "name": "allowed web origins", + "protocol": "openid-connect", + "protocolMapper": "oidc-allowed-origins-mapper", + "consentRequired": false, + "config": {} + } + ] + } + ], + "defaultDefaultClientScopes": ["role_list", "profile", "email", "roles", "web-origins"], + "defaultOptionalClientScopes": ["offline_access", "address", "phone", "microprofile-jwt"], + "browserSecurityHeaders": { + "contentSecurityPolicyReportOnly": "", + "xContentTypeOptions": "nosniff", + "xRobotsTag": "none", + "xFrameOptions": "SAMEORIGIN", + "xXSSProtection": "1; mode=block", + "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "strictTransportSecurity": "max-age=31536000; includeSubDomains" + }, + "smtpServer": {}, + "eventsEnabled": false, + "eventsListeners": ["jboss-logging"], + "enabledEventTypes": [], + "adminEventsEnabled": false, + "adminEventsDetailsEnabled": false, + "components": { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ + { + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "oidc-full-name-mapper", + "saml-user-attribute-mapper", + "saml-user-property-mapper", + "oidc-address-mapper", + "saml-role-list-mapper", + "oidc-sha256-pairwise-sub-mapper", + "oidc-usermodel-attribute-mapper", + "oidc-usermodel-property-mapper" + ] + } + }, + { + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allow-default-scopes": ["true"] + } + }, + { + "name": "Allowed Client Scopes", + "providerId": "allowed-client-templates", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allow-default-scopes": ["true"] + } + }, + { + "name": "Trusted Hosts", + "providerId": "trusted-hosts", + "subType": "anonymous", + "subComponents": {}, + "config": { + "host-sending-registration-request-must-match": ["true"], + "client-uris-must-match": ["true"] + } + }, + { + "name": "Full Scope Disabled", + "providerId": "scope", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "name": "Max Clients Limit", + "providerId": "max-clients", + "subType": "anonymous", + "subComponents": {}, + "config": { + "max-clients": ["200"] + } + }, + { + "name": "Consent Required", + "providerId": "consent-required", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "saml-user-attribute-mapper", + "oidc-full-name-mapper", + "saml-role-list-mapper", + "saml-user-property-mapper", + "oidc-usermodel-attribute-mapper", + "oidc-address-mapper", + "oidc-usermodel-property-mapper", + "oidc-sha256-pairwise-sub-mapper" + ] + } + } + ], + "org.keycloak.keys.KeyProvider": [ + { + "name": "rsa-generated", + "providerId": "rsa-generated", + "subComponents": {}, + "config": { + "privateKey": [ + "MIIEowIBAAKCAQEAn5T13suF8mlS+pJXp0U1bto41nW55wpcs+Rps8ZVCRyJKWqzwSCYnI7lm0rB2wBpAAO4OPoj1zlmVoFmBPsDU9Xf7rjsJb5LIzIQDCZY44aSDZt6RR+gakPiQvlzHyW/RozYpngDJF7TsTD7rdRF1xQ4RprfBF8fwK/xsU7pxbeom5xDHZhz3fiw8s+7UdbmnazDHfAjU58aUrLGgVRfUsuoHjtsptYlOIXEifaeMetXZE+HhqLYRHQPDap5fbBJl773Trosn7N9nmzN4x1xxGj9So21WC5UboQs9sAIVgizc4omjZ5Y4RN9HLH7G4YwJctNntzmnJhDui9zAO+zSQIDAQABAoIBADi+F7rTtVoft0Cfnok8o6Y58/HVxHdxiMryUd95iy0FN4RBi48FTx6D9QKFz25Ws/8sU2n3D51srIXf1u24b1N0/f39RQKaqk7mcyxOylaEuBQcj5pah4ihgKd92UBfBKdKV5LBo6RgD3e2yhbiHr8+UlBQqzH7vOef6Bm6zIbfmi3N88swAJhP0YizRZFklsbmLsK6nkwyro00CHJvPVKSBbM+ad+/zIBsLw56MvNngB5TuFguUgoljd6M1T2z4utmZGlTUqrfE1onAVLJZoGnRohyIr7dJEg6YxWR70PxsgmkDKyeRvet9P1trO0n+OSprusfrC3cHJStabap1V0CgYEA1A/CtsqTnjdYYsB19eumZgdpzUgNc/YEAzZ/OWb8yTLoB2ncci+63A1rXHUXAqJFY7vtjn5mxv7SuASNbUrzq+6KfZvC1x9XEtnczqT/ypunNfxmIZuj8Nuu6vtURguZ8kPPwdkI8toTizRFeRE5ZDBvoQryiEVYugfHaHT5vzsCgYEAwKWODwquI0Lv9BuwdNVrBXQpkKh3ZfYOA7i9xvhxlM7xUu8OMCwwCPn3r7vrW5APjTqX4h330mJ44SLEs+7gbCUs4BbJBLA6g0ChlHa9PTkxp6tk2nDF/B34fxiZSRkE85L+d+at0Dc3hnlzLCJCzJawGpoPniPU9e4w0p4dN0sCgYAsGnMGjS8SUrRhJWHjGXVr9tK8TOXvXhULjgP7rj2Yoqu7Dvs4DFEyft/7RKbad2EzEtyfLA64CDtO5jN7rYDsGxpWcVSeZPg5BXJ0z8AbJTArfCjJiJMZ/rZsTIUEZFlKF2xYBolj6JLz+pUQTtK+0YwF1D8ItFN1rTR9twZSDQKBgQC6sPXNX+VH6LuPTjIf1x8CxwLs3EXxOpV0R9kp9GRl+HJnk6GlT30xhcThufQo5KAdllXQXIhoiuNoEoCbevhj9Vbax1oBQCNERSMRNEzKAx46xd9TzYwgeo7x5E3QR/3DaoVOfu+cY5ZcrF/PulgP2kxJS1mtQD5GIpGP2oinpwKBgGqiqTFPqRcelx76vBvTU+Jp1zM62T4AotbMrSQR/oUvqHe5Ytj/SbZx+wbbHAiyGgV700Mosyviik83YEAbR3kdOPjgYvAJJW2Y3jEMdQ7MwriXz8XLh5BGmYfVjkSOJXed9ua9WlYLKOJeXXv191BbDvrx5NXuJyVVU4vJx3YZ" + ], + "certificate": [ + "MIICnTCCAYUCBgFp4EYIrjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdwcm90ZWFuMB4XDTE5MDQwMjIyNTYxOVoXDTI5MDQwMjIyNTc1OVowEjEQMA4GA1UEAwwHcHJvdGVhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+U9d7LhfJpUvqSV6dFNW7aONZ1uecKXLPkabPGVQkciSlqs8EgmJyO5ZtKwdsAaQADuDj6I9c5ZlaBZgT7A1PV3+647CW+SyMyEAwmWOOGkg2bekUfoGpD4kL5cx8lv0aM2KZ4AyRe07Ew+63URdcUOEaa3wRfH8Cv8bFO6cW3qJucQx2Yc934sPLPu1HW5p2swx3wI1OfGlKyxoFUX1LLqB47bKbWJTiFxIn2njHrV2RPh4ai2ER0Dw2qeX2wSZe+9066LJ+zfZ5szeMdccRo/UqNtVguVG6ELPbACFYIs3OKJo2eWOETfRyx+xuGMCXLTZ7c5pyYQ7ovcwDvs0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVtmRKDb4OK5iSA46tagMBkp6L7WuPpCWuHGWwobEP+BecYsShW7zP3s12oA8SNSwbhvu0CRqgzxhuypgf3hKQFVU153Erv4hzkj+8S0s5LR/ZE7tDNY2lzJ3yQKXy3Md7EkuzzvOZ50MTrcSKAanWq/ZW1OTnrtGymj5zGJnTg7mMnJzEIGePxkvPu/QdchiPBLqxfZYm1jsFGY25djOC3N/KmVcRVmPRGuu6D8tBFHlKoPfZYPdbMvsvs24aupHKRcZ+ofTCpK+2Qo8c0pSSqeEYHGmuGqC6lC6ozxtxSABPO9Q1R1tZBU7Kg5HvXUwwmoVS3EGub46YbHqbmWMLg==" + ], + "priority": ["100"] + } + }, + { + "name": "hmac-generated", + "providerId": "hmac-generated", + "subComponents": {}, + "config": { + "kid": ["96afd00e-85cf-4d35-b18e-061d3813d8b2"], + "secret": ["qBFGKdUGf6xDgKphnRfoFzIzaFHJW4bYnZ9MinPFzN38X5_ctq-2u1q5RdZzeJukXvk2biHB8_s3DxWmmLZFsA"], + "priority": ["100"], + "algorithm": ["HS256"] + } + }, + { + "name": "aes-generated", + "providerId": "aes-generated", + "subComponents": {}, + "config": { + "kid": ["b04473d3-8395-4016-b455-19a9e951106b"], + "secret": ["x68mMOVdz3qKWzltzReV0g"], + "priority": ["100"] + } + } + ] + }, + "internationalizationEnabled": false, + "supportedLocales": [], + "authenticationFlows": [ + { + "alias": "Handle Existing Account", + "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-confirm-link", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "idp-email-verification", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "Verify Existing Account by Re-authentication", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "alias": "Verify Existing Account by Re-authentication", + "description": "Reauthentication of existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "OPTIONAL", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "browser", + "description": "browser based authentication", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-cookie", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "identity-provider-redirector", + "requirement": "ALTERNATIVE", + "priority": 25, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "forms", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "alias": "clients", + "description": "Base authentication for clients", + "providerId": "client-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "client-secret", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-jwt", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-secret-jwt", + "requirement": "ALTERNATIVE", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-x509", + "requirement": "ALTERNATIVE", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "direct grant", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "requirement": "OPTIONAL", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "docker auth", + "description": "Used by Docker clients to authenticate against the IDP", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "docker-http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "first broker login", + "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "review profile config", + "authenticator": "idp-review-profile", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorConfig": "create unique user config", + "authenticator": "idp-create-user-if-unique", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "Handle Existing Account", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "alias": "forms", + "description": "Username, password, otp and other auth forms.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "OPTIONAL", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "http challenge", + "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "no-cookie-redirect", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "basic-auth", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "basic-auth-otp", + "requirement": "DISABLED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "requirement": "DISABLED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "registration", + "description": "registration flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-page-form", + "requirement": "REQUIRED", + "priority": 10, + "flowAlias": "registration form", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "alias": "registration form", + "description": "registration form", + "providerId": "form-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-user-creation", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-profile-action", + "requirement": "REQUIRED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-password-action", + "requirement": "REQUIRED", + "priority": 50, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-recaptcha-action", + "requirement": "DISABLED", + "priority": 60, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "reset credentials", + "description": "Reset credentials for a user if they forgot their password or something", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "reset-credentials-choose-user", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-credential-email", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-password", + "requirement": "REQUIRED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-otp", + "requirement": "OPTIONAL", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "alias": "saml ecp", + "description": "SAML ECP Profile Authentication Flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + } + ], + "authenticatorConfig": [ + { + "alias": "create unique user config", + "config": { + "require.password.update.after.registration": "false" + } + }, + { + "alias": "review profile config", + "config": { + "update.profile.on.first.login": "missing" + } + } + ], + "requiredActions": [ + { + "alias": "CONFIGURE_TOTP", + "name": "Configure OTP", + "providerId": "CONFIGURE_TOTP", + "enabled": true, + "defaultAction": false, + "priority": 10, + "config": {} + }, + { + "alias": "terms_and_conditions", + "name": "Terms and Conditions", + "providerId": "terms_and_conditions", + "enabled": false, + "defaultAction": false, + "priority": 20, + "config": {} + }, + { + "alias": "UPDATE_PASSWORD", + "name": "Update Password", + "providerId": "UPDATE_PASSWORD", + "enabled": true, + "defaultAction": false, + "priority": 30, + "config": {} + }, + { + "alias": "UPDATE_PROFILE", + "name": "Update Profile", + "providerId": "UPDATE_PROFILE", + "enabled": true, + "defaultAction": false, + "priority": 40, + "config": {} + }, + { + "alias": "VERIFY_EMAIL", + "name": "Verify Email", + "providerId": "VERIFY_EMAIL", + "enabled": true, + "defaultAction": false, + "priority": 50, + "config": {} + } + ], + "browserFlow": "browser", + "registrationFlow": "registration", + "directGrantFlow": "direct grant", + "resetCredentialsFlow": "reset credentials", + "clientAuthenticationFlow": "clients", + "dockerAuthenticationFlow": "docker auth", + "attributes": { + "_browser_header.xXSSProtection": "1; mode=block", + "_browser_header.xFrameOptions": "SAMEORIGIN", + "_browser_header.strictTransportSecurity": "max-age=31536000; includeSubDomains", + "permanentLockout": "false", + "quickLoginCheckMilliSeconds": "1000", + "_browser_header.xRobotsTag": "none", + "maxFailureWaitSeconds": "900", + "minimumQuickLoginWaitSeconds": "60", + "failureFactor": "30", + "actionTokenGeneratedByUserLifespan": "300", + "maxDeltaTimeSeconds": "43200", + "_browser_header.xContentTypeOptions": "nosniff", + "offlineSessionMaxLifespan": "5184000", + "actionTokenGeneratedByAdminLifespan": "43200", + "_browser_header.contentSecurityPolicyReportOnly": "", + "bruteForceProtected": "false", + "_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "waitIncrementSeconds": "60", + "offlineSessionMaxLifespanEnabled": "false" + }, + "users": [ + { + "username": "admin", + "enabled": true, + "totp": false, + "emailVerified": false, + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "NICTtwsvSxJ5hL8hLAuleDUv9jwZcuXgxviMXvR++cciyPtiIEStEaJUyfA9DOir59awjPrHOumsclPVjNBplA==", + "salt": "T/2P5o5oxFJUEk68BRURRg==", + "hashIterations": 27500, + "counter": 0, + "algorithm": "pbkdf2-sha256", + "digits": 0, + "period": 0, + "createdDate": 1554245879354, + "config": {} + } + ], + "disableableCredentialTypes": ["password"], + "requiredActions": [], + "realmRoles": ["admin", "managers", "user", "IT", "HR"], + "notBefore": 0, + "groups": [] + }, + { + "username": "alice", + "enabled": true, + "totp": false, + "emailVerified": false, + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "A3okqV2T/ybXTVEgKfosoSjP8Yc9IZbFP/SY4cEd6hag7TABQrQ6nUSuwagGt96l8cw1DTijO75PqX6uiTXMzw==", + "salt": "sl4mXx6T9FypPH/s9TngfQ==", + "hashIterations": 27500, + "counter": 0, + "algorithm": "pbkdf2-sha256", + "digits": 0, + "period": 0, + "createdDate": 1554245879116, + "config": {} + } + ], + "disableableCredentialTypes": ["password"], + "requiredActions": [], + "realmRoles": ["user", "HR"], + "notBefore": 0, + "groups": [] + }, + { + "username": "jdoe", + "enabled": true, + "totp": false, + "emailVerified": false, + "credentials": [ + { + "type": "password", + "hashedSaltedValue": "JV3DUNLjqOadjbBOtC4rvacQI553CGaDGAzBS8MR5ReCr7SwF3E6CsW3T7/XO8ITZAsch8+A/6loeuCoVLLJrg==", + "salt": "uCbOH7HZtyDtMd0E9DG/nw==", + "hashIterations": 27500, + "counter": 0, + "algorithm": "pbkdf2-sha256", + "digits": 0, + "period": 0, + "createdDate": 1554245879227, + "config": {} + } + ], + "disableableCredentialTypes": ["password"], + "requiredActions": [], + "realmRoles": ["managers", "user", "IT"], + "notBefore": 0, + "groups": [] + } + ], + "keycloakVersion": "6.0.0", + "userManagedAccessAllowed": false +} diff --git a/examples/jbpm-compact-architecture-example/docker-compose/pgadmin/pgpass b/examples/jbpm-compact-architecture-example/docker-compose/pgadmin/pgpass new file mode 100644 index 00000000000..11a6f7c6019 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/pgadmin/pgpass @@ -0,0 +1,3 @@ +postgres:5432:kogito:kogito-user:kogito-pass +postgres:5432:keycloak:kogito-user:kogito-pass +postgres:5432:postgres:kogito-user:kogito-pass \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/docker-compose/pgadmin/servers.json b/examples/jbpm-compact-architecture-example/docker-compose/pgadmin/servers.json new file mode 100644 index 00000000000..caafe268c0f --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/pgadmin/servers.json @@ -0,0 +1,14 @@ +{ + "Servers": { + "1": { + "Name": "kogito", + "Group": "Servers", + "Host": "postgres", + "Port": 5432, + "MaintenanceDB": "kogito", + "Username": "kogito-user", + "SSLMode": "disable", + "PassFile": "/var/lib/pgadmin/pgpass" + } + } +} diff --git a/examples/jbpm-compact-architecture-example/docker-compose/sql/init.sql b/examples/jbpm-compact-architecture-example/docker-compose/sql/init.sql new file mode 100644 index 00000000000..92ea9b4e5c6 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/sql/init.sql @@ -0,0 +1,33 @@ +CREATE ROLE "kogito-user" WITH + LOGIN + SUPERUSER + INHERIT + CREATEDB + CREATEROLE + NOREPLICATION + PASSWORD 'kogito-pass'; + +CREATE DATABASE kogito + WITH + OWNER = "kogito-user" + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.utf8' + LC_CTYPE = 'en_US.utf8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; + +CREATE DATABASE keycloak + WITH + OWNER = "kogito-user" + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.utf8' + LC_CTYPE = 'en_US.utf8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; + +GRANT ALL PRIVILEGES ON DATABASE postgres TO "kogito-user"; +GRANT ALL PRIVILEGES ON DATABASE kogito TO "kogito-user"; +GRANT ALL PRIVILEGES ON DATABASE kogito TO postgres; + +GRANT ALL PRIVILEGES ON DATABASE keycloak TO "kogito-user"; +GRANT ALL PRIVILEGES ON DATABASE keycloak TO postgres; \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/docker-compose/startServices.sh b/examples/jbpm-compact-architecture-example/docker-compose/startServices.sh new file mode 100755 index 00000000000..e8a42f5b2ee --- /dev/null +++ b/examples/jbpm-compact-architecture-example/docker-compose/startServices.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +PROFILE="full" + +echo "Script requires your Kogito Example to be compiled" + +PROJECT_VERSION=$(cd ../ && mvn help:evaluate -Dexpression=project.version -q -DforceStdout) +KOGITO_MANAGEMENT_CONSOLE_IMAGE=$(cd ../ && mvn help:evaluate -Dexpression=kogito.management-console.image -q -DforceStdout) +KOGITO_TASK_CONSOLE_IMAGE=$(cd ../ && mvn help:evaluate -Dexpression=kogito.task-console.image -q -DforceStdout) + + +if [ -n "$1" ]; then + if [[ ("$1" == "full") || ("$1" == "infra") || ("$1" == "example")]]; + then + PROFILE="$1" + else + echo "Unknown docker profile '$1'. The supported profiles are:" + echo "* 'infra': Use this profile to start only the minimum infrastructure to run the example (postgresql, data-index & jobs-service)." + echo "* 'example': Use this profile to start the example infrastructure and the kogito-example service. Requires the example to be compiled using the 'container' profile (-Pcontainer)" + echo "* 'full' (default): Starts full example setup, including infrastructure (database, data-index & jobs-service), the kogito-example-service container and the runtime consoles (management-console, task-console & keycloak). Requires the example to be compiled using the 'container' profile (-Pcontainer)" + exit 1; + fi +fi + +echo "PROJECT_VERSION=${PROJECT_VERSION}" > ".env" +echo "KOGITO_MANAGEMENT_CONSOLE_IMAGE=${KOGITO_MANAGEMENT_CONSOLE_IMAGE}" >> ".env" +echo "KOGITO_TASK_CONSOLE_IMAGE=${KOGITO_TASK_CONSOLE_IMAGE}" >> ".env" +echo "COMPOSE_PROFILES='${PROFILE}'" >> ".env" + +if [ "$(uname)" == "Darwin" ]; then + echo "DOCKER_GATEWAY_HOST=kubernetes.docker.internal" >> ".env" +elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then + echo "DOCKER_GATEWAY_HOST=172.17.0.1" >> ".env" +fi + +if [ ! -d "./svg" ] +then + echo "SVG folder does not exist. Have you compiled the project? mvn clean install -DskipTests" + exit 1 +fi + +docker compose up \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/docs/images/g1_1_mc_list.png b/examples/jbpm-compact-architecture-example/docs/images/g1_1_mc_list.png new file mode 100644 index 00000000000..4e5aa6274df Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g1_1_mc_list.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g1_2_mc_details.png b/examples/jbpm-compact-architecture-example/docs/images/g1_2_mc_details.png new file mode 100644 index 00000000000..f2b228f20d0 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g1_2_mc_details.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g1_3_mc_details_executed_job.png b/examples/jbpm-compact-architecture-example/docs/images/g1_3_mc_details_executed_job.png new file mode 100644 index 00000000000..1ab358819c3 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g1_3_mc_details_executed_job.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_10_mc_details_completed.png b/examples/jbpm-compact-architecture-example/docs/images/g2_10_mc_details_completed.png new file mode 100644 index 00000000000..610849f19ee Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_10_mc_details_completed.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_1_mc_list.png b/examples/jbpm-compact-architecture-example/docs/images/g2_1_mc_list.png new file mode 100644 index 00000000000..6526e8e7f23 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_1_mc_list.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_2_mc_details.png b/examples/jbpm-compact-architecture-example/docs/images/g2_2_mc_details.png new file mode 100644 index 00000000000..ec18201f08a Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_2_mc_details.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_3_tc_inbox.png b/examples/jbpm-compact-architecture-example/docs/images/g2_3_tc_inbox.png new file mode 100644 index 00000000000..0d612f76c80 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_3_tc_inbox.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_4_tc_hr_form.png b/examples/jbpm-compact-architecture-example/docs/images/g2_4_tc_hr_form.png new file mode 100644 index 00000000000..d89b41302da Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_4_tc_hr_form.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_5_tc_hr_form_notification.png b/examples/jbpm-compact-architecture-example/docs/images/g2_5_tc_hr_form_notification.png new file mode 100644 index 00000000000..8dd81fc4a92 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_5_tc_hr_form_notification.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_6_mc_details.png b/examples/jbpm-compact-architecture-example/docs/images/g2_6_mc_details.png new file mode 100644 index 00000000000..4970b8f8374 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_6_mc_details.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_7_tc_inbox.png b/examples/jbpm-compact-architecture-example/docs/images/g2_7_tc_inbox.png new file mode 100644 index 00000000000..03f63ff7b45 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_7_tc_inbox.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_8_tc_it_form.png b/examples/jbpm-compact-architecture-example/docs/images/g2_8_tc_it_form.png new file mode 100644 index 00000000000..5e6872a09c8 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_8_tc_it_form.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/g2_9_tc_inbox_empty.png b/examples/jbpm-compact-architecture-example/docs/images/g2_9_tc_inbox_empty.png new file mode 100644 index 00000000000..696433e93d3 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/g2_9_tc_inbox_empty.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/generate_offer_assignments.png b/examples/jbpm-compact-architecture-example/docs/images/generate_offer_assignments.png new file mode 100644 index 00000000000..2e3f93529f3 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/generate_offer_assignments.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/hiring_diagram.png b/examples/jbpm-compact-architecture-example/docs/images/hiring_diagram.png new file mode 100644 index 00000000000..cb57a2dfb9d Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/hiring_diagram.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/hr_interview_assignments.png b/examples/jbpm-compact-architecture-example/docs/images/hr_interview_assignments.png new file mode 100644 index 00000000000..63de050eb5e Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/hr_interview_assignments.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/it_interview_assignments.png b/examples/jbpm-compact-architecture-example/docs/images/it_interview_assignments.png new file mode 100644 index 00000000000..077430569d6 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/it_interview_assignments.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/mc_details_1.png b/examples/jbpm-compact-architecture-example/docs/images/mc_details_1.png new file mode 100644 index 00000000000..2c1c3b26abb Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/mc_details_1.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/mc_list.png b/examples/jbpm-compact-architecture-example/docs/images/mc_list.png new file mode 100644 index 00000000000..4fc32b05cc3 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/mc_list.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn.png b/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn.png new file mode 100644 index 00000000000..451313a264d Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn_decision.png b/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn_decision.png new file mode 100644 index 00000000000..f58d869d36f Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn_decision.png differ diff --git a/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn_types.png b/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn_types.png new file mode 100644 index 00000000000..d028d331da9 Binary files /dev/null and b/examples/jbpm-compact-architecture-example/docs/images/new_hiring_offer_dmn_types.png differ diff --git a/examples/jbpm-compact-architecture-example/env/index.js b/examples/jbpm-compact-architecture-example/env/index.js new file mode 100644 index 00000000000..4b9f86d2fa6 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/env/index.js @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const { varsWithName, composeEnv, getOrDefault } = require("@kie-tools-scripts/build-env"); + +const { + env: { kogitoManagementConsole: kogitoManagementConsoleEnv }, +} = require("@kie-tools/kogito-management-console/env"); + +const { + env: { kogitoTaskConsole: kogitoTaskConsoleEnv }, +} = require("@kie-tools/kogito-task-console/env"); + +module.exports = composeEnv([require("@kie-tools/root-env/env")], { + vars: varsWithName({ + JBPM_COMPACT_ARCHITECTURE_EXAMPLE__managementConsoleImage: { + default: `${kogitoManagementConsoleEnv.registry}/${kogitoManagementConsoleEnv.account}/${kogitoManagementConsoleEnv.name}:${kogitoManagementConsoleEnv.buildTag}`, + description: "The image for the Kogito Management Console Image.", + }, + JBPM_COMPACT_ARCHITECTURE_EXAMPLE__taskConsoleImage: { + default: `${kogitoTaskConsoleEnv.registry}/${kogitoTaskConsoleEnv.account}/${kogitoTaskConsoleEnv.name}:${kogitoTaskConsoleEnv.buildTag}`, + description: "The image for the Kogito Task Console Image.", + }, + }), + get env() { + return { + jbpmCompactArchitectureExample: { + kogitoManagementConsoleImage: getOrDefault(this.vars.JBPM_COMPACT_ARCHITECTURE_EXAMPLE__managementConsoleImage), + kogitoTaskConsoleImage: getOrDefault(this.vars.JBPM_COMPACT_ARCHITECTURE_EXAMPLE__taskConsoleImage), + version: require("../package.json").version, + }, + }; + }, +}); diff --git a/examples/jbpm-compact-architecture-example/install.js b/examples/jbpm-compact-architecture-example/install.js new file mode 100644 index 00000000000..47e591480b5 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/install.js @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const buildEnv = require("./env"); +const { setup, setPomProperty } = require("@kie-tools/maven-config-setup-helper"); + +setup(` + -Drevision=${buildEnv.env.jbpmCompactArchitectureExample.version} +`); + +setPomProperty({ + key: "kogito.management-console.image", + value: buildEnv.env.jbpmCompactArchitectureExample.kogitoManagementConsoleImage, +}); + +setPomProperty({ + key: "kogito.task-console.image", + value: buildEnv.env.jbpmCompactArchitectureExample.kogitoTaskConsoleImage, +}); diff --git a/examples/jbpm-compact-architecture-example/package.json b/examples/jbpm-compact-architecture-example/package.json new file mode 100644 index 00000000000..2ce94a9f7b6 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/package.json @@ -0,0 +1,55 @@ +{ + "private": true, + "name": "@kie-tools-examples/jbpm-compact-architecture-example", + "version": "0.0.0", + "description": "", + "license": "Apache-2.0", + "homepage": "https://github.com/apache/incubator-kie-tools", + "repository": { + "type": "git", + "url": "https://github.com/apache/incubator-kie-tools.git" + }, + "bugs": { + "url": "https://github.com/apache/incubator-kie-tools/issues" + }, + "scripts": { + "build": "run-script-os", + "build:darwin:linux": "mvn clean install -P container", + "build:dev": "run-script-if --bool \"$(build-env examples.build)\" --then run-script-os", + "build:dev:darwin:linux": "mvn clean compile -DskipTests", + "build:dev:win32": "pnpm powershell \"mvn clean compile `-DskipTests \"", + "build:prod": "pnpm lint && run-script-if --bool \"$(build-env examples.build)\" --then run-script-os", + "build:prod:darwin:linux": "mvn clean compile -DskipTests=$(build-env tests.run --not) -Dmaven.test.failure.ignore=$(build-env tests.ignoreFailures) -Pcontainer", + "build:prod:win32": "pnpm powershell \"mvn clean compile `-DskipTests `-Dmaven.test.failure.ignore=$(build-env tests.ignoreFailures) `-Pcontainer \"", + "install": "node install.js", + "lint": "echo 'Linting'", + "powershell": "@powershell -NoProfile -ExecutionPolicy Unrestricted -Command", + "quarkus:dev": "run-script-os", + "quarkus:dev:darwin:linux": "mvn clean package quarkus:dev -DskipTests -Pdevelopment", + "quarkus:dev:win32": "mvn clean package quarkus:dev `-DskipTests `-Pdevelopment", + "run": "run-script-os", + "run:darwin:linux": "cd ./docker-compose && sh startServices.sh", + "start": "run-script-os", + "start:darwin:linux": "pnpm run build && pnpm run run", + "start:win32": "echo Running full example ot supported in windows", + "stop": "run-script-os", + "stop:darwin:linux": "cd ./docker-compose && docker compose down" + }, + "dependencies": { + "@kie-tools/jbpm-quarkus-devui": "workspace:*", + "@kie-tools/maven-base": "workspace:*" + }, + "devDependencies": { + "@kie-tools/kogito-management-console": "workspace:*", + "@kie-tools/kogito-task-console": "workspace:*", + "@kie-tools/maven-config-setup-helper": "workspace:*", + "@kie-tools/root-env": "workspace:*", + "run-script-os": "^1.1.6" + }, + "kieTools": { + "requiredPreinstalledCliCommands": [ + "java", + "mvn" + ] + } +} \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/pom.xml b/examples/jbpm-compact-architecture-example/pom.xml new file mode 100644 index 00000000000..56b4cef9276 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/pom.xml @@ -0,0 +1,202 @@ + + + + 4.0.0 + + org.kie + kie-tools-maven-base + ${revision} + ./node_modules/@kie-tools/maven-base/pom.xml + + + jbpm-compact-architecture-quarkus-example + Kie-Tools Example :: jBPM Compact Architecture Quarkus Example + + + docker.io/apache/incubator-kie-kogito-management-console:main + docker.io/apache/incubator-kie-kogito-task-console:main + + + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-resteasy-jackson + + + io.quarkus + quarkus-smallrye-openapi + + + io.quarkus + quarkus-smallrye-health + + + + org.jbpm + jbpm-with-drools-quarkus + + + + org.kie + kie-addons-quarkus-process-management + + + org.kie + kogito-addons-quarkus-jobs-management + + + org.kie + kie-addons-quarkus-process-svg + + + org.kie + kie-addons-quarkus-source-files + + + + + io.quarkus + quarkus-jdbc-postgresql + + + io.quarkus + quarkus-agroal + + + org.kie + kie-addons-quarkus-persistence-jdbc + + + + + org.kie + kogito-addons-quarkus-data-index-postgresql + + + + + org.kie + kogito-addons-quarkus-data-index-persistence-postgresql + + + + + org.kie + kogito-addons-quarkus-jobs + + + org.kie.kogito + jobs-service-postgresql-common + + + + + org.kie + kogito-addons-quarkus-data-audit-jpa + + + org.kie + kogito-addons-quarkus-data-audit + + + + + + container + + container + + + + io.quarkus + quarkus-container-image-jib + + + + + development + + dev + + + + + org.jbpm + jbpm-quarkus-devui-bom + ${project.version} + pom + import + + + + + + org.jbpm + jbpm-quarkus-devui + + + + + + + ${project.artifactId} + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus-plugin.version} + + + + build + + + + + + maven-antrun-plugin + + + package + + run + + + + + + + + + + + + + + diff --git a/examples/jbpm-compact-architecture-example/src/main/java/org/kie/kogito/hr/CandidateData.java b/examples/jbpm-compact-architecture-example/src/main/java/org/kie/kogito/hr/CandidateData.java new file mode 100644 index 00000000000..eae14184da0 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/src/main/java/org/kie/kogito/hr/CandidateData.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.kie.kogito.hr; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +public class CandidateData { + + private String name; + + private String lastName; + + private String email; + + private Integer experience; + + private List skills; + + public CandidateData() { + } + + public CandidateData(String name, String lastName, String email, Integer experience, List skills) { + this.name = name; + this.lastName = lastName; + this.email = email; + this.experience = experience; + this.skills = skills; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Integer getExperience() { + return experience; + } + + public void setExperience(Integer experience) { + this.experience = experience; + } + + public List getSkills() { + return skills; + } + + public void setSkills(List skills) { + this.skills = skills; + } + + @JsonIgnore + public String getFullName() { + return name + " " + lastName; + } +} diff --git a/examples/jbpm-compact-architecture-example/src/main/java/org/kie/kogito/hr/Offer.java b/examples/jbpm-compact-architecture-example/src/main/java/org/kie/kogito/hr/Offer.java new file mode 100644 index 00000000000..a377b480aa0 --- /dev/null +++ b/examples/jbpm-compact-architecture-example/src/main/java/org/kie/kogito/hr/Offer.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.kie.kogito.hr; + +public class Offer { + + private String category; + + private Integer salary; + + public Offer() { + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public Integer getSalary() { + return salary; + } + + public void setSalary(Integer salary) { + this.salary = salary; + } +} diff --git a/examples/jbpm-compact-architecture-example/src/main/resources/META-INF/processSVG/hiring.svg b/examples/jbpm-compact-architecture-example/src/main/resources/META-INF/processSVG/hiring.svg new file mode 100644 index 00000000000..fba0500706c --- /dev/null +++ b/examples/jbpm-compact-architecture-example/src/main/resources/META-INF/processSVG/hiring.svg @@ -0,0 +1 @@ +HR InterviewIT InterviewNew Hiring Send notification HR Interview avoided Application denied Generate base offer Log OfferSend Offer to Candidate \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/src/main/resources/NewHiringOffer.dmn b/examples/jbpm-compact-architecture-example/src/main/resources/NewHiringOffer.dmn new file mode 100644 index 00000000000..67b0eded68d --- /dev/null +++ b/examples/jbpm-compact-architecture-example/src/main/resources/NewHiringOffer.dmn @@ -0,0 +1,163 @@ + + + + + + string + + + string + + + string + + + number + + + string + + + + + number + + + string + + "Software Engineer", "Senior Software Engineer", "Software Architect" + + + + + + + + + + + + + + + + + + count(CandidateData.skills) * 150 + + + + + + + + CandidateData.experience + + + + + "Software Engineer", "Senior Software Engineer", "Software Architect" + + + + + + + [0..5) + + + "Software Engineer" + + + 30000 + SalaryBonus + + + + + + + + [5..10) + + + "Senior Software Engineer" + + + 40000 + SalaryBonus + + + + + + + + >=10 + + + "Software Architect" + + + 50000 + SalaryBonus + + + + + + + + + + Offer + + + + + + + + + + 50 + 120 + 926 + + + 926 + + + 50 + 175 + 104 + 437 + 140 + + + 926 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/src/main/resources/application.properties b/examples/jbpm-compact-architecture-example/src/main/resources/application.properties new file mode 100644 index 00000000000..b2a3bf6b7fe --- /dev/null +++ b/examples/jbpm-compact-architecture-example/src/main/resources/application.properties @@ -0,0 +1,46 @@ +# Packaging +#quarkus.package.type=fast-jar + +#https://quarkus.io/guides/openapi-swaggerui +quarkus.http.cors=true +quarkus.smallrye-openapi.path=/docs/openapi.json +quarkus.swagger-ui.always-include=true +quarkus.kogito.data-index.graphql.ui.always-include=true +quarkus.http.test-port=0 + +# Kogito-service +kogito.service.url=http://localhost:8080 + +#Job-service +kogito.jobs-service.url=http://localhost:8080 +kogito.dataindex.http.url=http://localhost:8080 + +# run create tables scripts +quarkus.flyway.migrate-at-start=true +quarkus.flyway.baseline-on-migrate=true +quarkus.flyway.baseline-version=0.0 +quarkus.flyway.locations=classpath:/db/migration,classpath:/db/jobs-service,classpath:/db/data-audit/postgresql +quarkus.flyway.table=FLYWAY_RUNTIME_SERVICE + +kogito.persistence.type=jdbc +quarkus.datasource.db-kind=postgresql +%prod.quarkus.datasource.username=kogito-user +%prod.quarkus.datasource.password=kogito-pass +%prod.quarkus.datasource.jdbc.url=${QUARKUS_DATASOURCE_JDBC_URL:jdbc:postgresql://localhost:5432/kogito} +%prod.quarkus.datasource.reactive.url=${QUARKUS_DATASOURCE_REACTIVE_URL:postgresql://localhost:5432/kogito} + +quarkus.native.native-image-xmx=8g + +# profile to pack this example into a container, to use it execute activate the maven container profile, -Pcontainer +%container.quarkus.container-image.build=true +%container.quarkus.container-image.push=false +%container.quarkus.container-image.group=${USER} +%container.quarkus.container-image.registry=dev.local +%container.quarkus.container-image.tag=${project.version} +%container.quarkus.container-image.name=jppm-compact-architecture-example-service + +%dev.quarkus.kogito.devservices.enabled=false +%dev.jbpm.devui.users.jdoe.groups=admin,HR,IT + +# Disabling OIDC +quarkus.oidc.enabled=false \ No newline at end of file diff --git a/examples/jbpm-compact-architecture-example/src/main/resources/hiring.bpmn b/examples/jbpm-compact-architecture-example/src/main/resources/hiring.bpmn new file mode 100644 index 00000000000..3c043c24cfc --- /dev/null +++ b/examples/jbpm-compact-architecture-example/src/main/resources/hiring.bpmn @@ -0,0 +1,691 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _B11455DE-F77A-4251-A85B-4C66636E3CD9 + _7DDA574A-C220-4FEF-9784-22EF8052EDEC + System.out.println("###################################"); +System.out.println("To: " + candidateData.getEmail()); +System.out.println("Subject: Congratulations you made it!"); +System.out.println("Dear " + candidateData.getFullName() + ", we are happy to tell you that you've successfuly went trhough the hiring process. You'll find the fina Offer details in attached."); +System.out.println("Job Category: " + offer.getCategory()); +System.out.println("Base salary: " + offer.getSalary()); +System.out.println("###################################"); + + + + + + + + _9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5 + _ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383 + System.out.println("###################################"); +System.out.println("Generated offer for candidate: " + candidateData.getFullName()); +System.out.println("Job Category: " + offer.getCategory()); +System.out.println("Base salary: " + offer.getSalary()); +System.out.println("###################################"); + + + _7DDA574A-C220-4FEF-9784-22EF8052EDEC + + + + + + + + _59F9A0E6-7F9C-43A9-8920-5B40A91169E6 + _9C33F5EA-89C7-4ED1-B3C2-CF18DE439AF5 + + + + + + + + + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputX + + + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputX + + + + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_fileNameInputX + + + + + + + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_namespaceInputX + + + + + + + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_decisionInputX + + + + + + + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_modelInputX + + + + + + + candidateData + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_CandidateDataInputX + + + _F4D56F6C-4CFE-4D5C-BF5E-67261F68EF1A_OfferOutputX + offer + + + + _527D3164-4989-4D2C-B80B-9BA9D4C8FB89 + + + + + + + + _94172225-E124-4F14-98DA-C3D62C11254A + _527D3164-4989-4D2C-B80B-9BA9D4C8FB89 + System.out.println("###################################"); +System.out.println("Candidate " + candidateData.getFullName() + " don't meet the requirements for the position but we'll keep it on records for the future!"); +System.out.println("###################################"); + + + + _5334FFDC-1FCB-47E6-8085-36DC9A3D17B9 + _B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E + _C6E61C53-FD35-4347-B69E-30AA93AE4404 + _94172225-E124-4F14-98DA-C3D62C11254A + + + _5162ABF0-DD2E-4BDC-9A46-DDCFCB010287 + _59F9A0E6-7F9C-43A9-8920-5B40A91169E6 + _C6E61C53-FD35-4347-B69E-30AA93AE4404 + + + _C62F7EFB-A009-450A-81C7-57D36F0DF766 + _B11455DE-F77A-4251-A85B-4C66636E3CD9 + _B7FC63DD-C08F-4CB3-A51A-79C1B8B18E6E + + + + + + + + _7B41F971-C74D-4036-8A5E-EFF81C37986A + _5334FFDC-1FCB-47E6-8085-36DC9A3D17B9 + System.out.println("###################################"); +System.out.println("HR Interview have been avoided after reasonable time"); +System.out.println("###################################"); + + + + + + + + + _8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A + _5162ABF0-DD2E-4BDC-9A46-DDCFCB010287 + System.out.println("New Hiring has been created for candidate: " + candidateData.getFullName()); + +kcontext.setVariable("hr_approval", false); +kcontext.setVariable("it_approval", false); + + + + + + + + _A76C6603-0406-423C-940B-3403948DCA1F + _C62F7EFB-A009-450A-81C7-57D36F0DF766 + + + + + + + + + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputX + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputX + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX + + + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX + + + + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX + + + + + + + candidateData + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX + + + offer + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_offerInputX + + + it_approval + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveInputX + + + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX + + + + + + + _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX + it_approval + + + + jdoe + + + + + + + + + + _ACEE7578-B7D2-4EDF-B104-9ECF3DD8A383 + _A76C6603-0406-423C-940B-3403948DCA1F + + + + + + + + + + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputX + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputX + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX + + + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputX + + + + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX + + + + + + + candidateData + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX + + + offer + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerInputX + + + hr_approval + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveInputX + + + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX + + + + + + + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX + hr_approval + + + _B8C4F63C-81AD-4291-9C1B-84967277EEF6_offerOutputX + offer + + + + jdoe + + + + + _8863B46B-9B0F-40B9-AAB1-A7503CF9AA0A + + + _7B41F971-C74D-4036-8A5E-EFF81C37986A + + PT180S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _0IqVEG0AEDySCYWhrcdpgA + _0IqVEG0AEDySCYWhrcdpgA + + \ No newline at end of file diff --git a/packages/dev-deployment-base-image/env/index.js b/packages/dev-deployment-base-image/env/index.js index 6f8c8f01617..41b68d50034 100644 --- a/packages/dev-deployment-base-image/env/index.js +++ b/packages/dev-deployment-base-image/env/index.js @@ -47,7 +47,7 @@ module.exports = composeEnv([rootEnv], { default: "incubator-kie-sandbox-dev-deployment-base", description: "The image name.", }, - DEV_DEPLOYMENT_BASE_IMAGE__buildTags: { + DEV_DEPLOYMENT_BASE_IMAGE__buildTag: { default: rootEnv.env.root.streamName, description: "The image tag.", }, @@ -61,7 +61,7 @@ module.exports = composeEnv([rootEnv], { registry: getOrDefault(this.vars.DEV_DEPLOYMENT_BASE_IMAGE__registry), account: getOrDefault(this.vars.DEV_DEPLOYMENT_BASE_IMAGE__account), name: getOrDefault(this.vars.DEV_DEPLOYMENT_BASE_IMAGE__name), - tags: getOrDefault(this.vars.DEV_DEPLOYMENT_BASE_IMAGE__buildTags), + buildTag: getOrDefault(this.vars.DEV_DEPLOYMENT_BASE_IMAGE__buildTag), version: require("../package.json").version, }, }; diff --git a/packages/dev-deployment-base-image/package.json b/packages/dev-deployment-base-image/package.json index d373d4cb48f..f71582cdb89 100644 --- a/packages/dev-deployment-base-image/package.json +++ b/packages/dev-deployment-base-image/package.json @@ -19,12 +19,12 @@ "copy-upload-service-assets": "run-script-os", "copy-upload-service-assets:linux:darwin": "mkdir -p ./dist-dev && cp -R ./node_modules/@kie-tools/dev-deployment-upload-service/dist/dev-deployment-upload-service-linux-amd64 ./dist-dev/dev-deployment-upload-service", "copy-upload-service-assets:win32": "pnpm powershell \"Copy-Item -R ./node_modules/@kie-tools/dev-deployment-upload-service/dist/dev-deployment-upload-service-linux-amd64 ./dist-dev/dev-deployment-upload-service\"", - "create-test-image:build-only": "kie-tools--image-builder build -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\"", - "create-test-image:kind": "kie-tools--image-builder kind -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\" --kind-cluster-name kie-sandbox-dev-cluster", - "create-test-image:minikube": "kie-tools--image-builder minikube -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\"", - "create-test-image:openshift": "kie-tools--image-builder openshift -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\"", - "image:docker:build": "kie-tools--image-builder build -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\" --build-arg USER_ID_ARG=\"$(build-env devDeploymentBaseImage.userId)\" --build-arg HOME_PATH_ARG=\"$(build-env devDeploymentBaseImage.homePath)\"", - "image:podman:build": "kie-tools--image-builder build -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\" --build-arg USER_ID_ARG=\"$(build-env devDeploymentBaseImage.userId)\" --build-arg HOME_PATH_ARG=\"$(build-env devDeploymentBaseImage.homePath)\" -e podman", + "create-test-image:build-only": "kie-tools--image-builder build -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\"", + "create-test-image:kind": "kie-tools--image-builder kind -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\" --kind-cluster-name kie-sandbox-dev-cluster", + "create-test-image:minikube": "kie-tools--image-builder minikube -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\"", + "create-test-image:openshift": "kie-tools--image-builder openshift -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\"", + "image:docker:build": "kie-tools--image-builder build -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\" --build-arg USER_ID_ARG=\"$(build-env devDeploymentBaseImage.userId)\" --build-arg HOME_PATH_ARG=\"$(build-env devDeploymentBaseImage.homePath)\"", + "image:podman:build": "kie-tools--image-builder build -r \"$(build-env devDeploymentBaseImage.registry)\" -a \"$(build-env devDeploymentBaseImage.account)\" -n \"$(build-env devDeploymentBaseImage.name)\" -t \"$(build-env devDeploymentBaseImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentBaseImage.builderImage)\" --build-arg USER_ID_ARG=\"$(build-env devDeploymentBaseImage.userId)\" --build-arg HOME_PATH_ARG=\"$(build-env devDeploymentBaseImage.homePath)\" -e podman", "install": "node install.js && pnpm install:mvnw", "install:mvnw": "run-script-os", "install:mvnw:darwin:linux": "mvn -e org.apache.maven.plugins:maven-wrapper-plugin:3.3.0:wrapper", diff --git a/packages/dev-deployment-dmn-form-webapp-image/env/index.js b/packages/dev-deployment-dmn-form-webapp-image/env/index.js index ad783fca4ce..a10be8e74ae 100644 --- a/packages/dev-deployment-dmn-form-webapp-image/env/index.js +++ b/packages/dev-deployment-dmn-form-webapp-image/env/index.js @@ -35,7 +35,7 @@ module.exports = composeEnv([rootEnv], { default: "incubator-kie-sandbox-dev-deployment-dmn-form-webapp", description: "The image name.", }, - DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTags: { + DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTag: { default: rootEnv.env.root.streamName, description: "The image tag.", }, @@ -46,7 +46,7 @@ module.exports = composeEnv([rootEnv], { registry: getOrDefault(this.vars.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__registry), account: getOrDefault(this.vars.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__account), name: getOrDefault(this.vars.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__name), - tags: getOrDefault(this.vars.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTags), + buildTag: getOrDefault(this.vars.DEV_DEPLOYMENT_DMN_FORM_WEBAPP_IMAGE__buildTag), version: require("../package.json").version, }, }; diff --git a/packages/dev-deployment-dmn-form-webapp-image/package.json b/packages/dev-deployment-dmn-form-webapp-image/package.json index 5bc50f56546..a065e628376 100644 --- a/packages/dev-deployment-dmn-form-webapp-image/package.json +++ b/packages/dev-deployment-dmn-form-webapp-image/package.json @@ -18,12 +18,12 @@ "copy-assets": "run-script-os", "copy-assets:linux:darwin": "rimraf dist-dev && cp -R ./node_modules/@kie-tools/dev-deployment-dmn-form-webapp/dist/ dist-dev", "copy-assets:win32": "rimraf dist-dev && pnpm powershell \"Copy-Item -R ./node_modules/@kie-tools/dev-deployment-dmn-form-webapp/dist/ dist-dev\"", - "create-test-image:build-only": "kie-tools--image-builder build -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.tags)\"", - "create-test-image:kind": "kie-tools--image-builder kind -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.tags)\" --kind-cluster-name kie-sandbox-dev-cluster", - "create-test-image:minikube": "kie-tools--image-builder minikube -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.tags)\"", - "create-test-image:openshift": "kie-tools--image-builder openshift -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.tags)\"", - "image:docker:build": "kie-tools--image-builder build -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.tags)\"", - "image:podman:build": "kie-tools--image-builder build -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.tags)\" -e podman", + "create-test-image:build-only": "kie-tools--image-builder build -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.buildTag)\"", + "create-test-image:kind": "kie-tools--image-builder kind -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.buildTag)\" --kind-cluster-name kie-sandbox-dev-cluster", + "create-test-image:minikube": "kie-tools--image-builder minikube -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.buildTag)\"", + "create-test-image:openshift": "kie-tools--image-builder openshift -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.buildTag)\"", + "image:docker:build": "kie-tools--image-builder build -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.buildTag)\"", + "image:podman:build": "kie-tools--image-builder build -r \"$(pnpm build-env devDeploymentDmnFormWebappImage.registry)\" -a \"$(pnpm build-env devDeploymentDmnFormWebappImage.account)\" -n \"$(pnpm build-env devDeploymentDmnFormWebappImage.name)\" -t \"$(pnpm build-env devDeploymentDmnFormWebappImage.buildTag)\" -e podman", "powershell": "@powershell -NoProfile -ExecutionPolicy Unrestricted -Command" }, "dependencies": { diff --git a/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js b/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js index 259c8ffa825..cd452584f9b 100644 --- a/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js +++ b/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js @@ -22,7 +22,7 @@ const { varsWithName, composeEnv, getOrDefault } = require("@kie-tools-scripts/b const rootEnv = require("@kie-tools/root-env/env"); const { - env: { devDeploymentBaseImage: devDedevDeploymentBaseImageEnv }, + env: { devDeploymentBaseImage: devDeploymentBaseImageEnv }, } = require("@kie-tools/dev-deployment-base-image/env"); const { @@ -32,9 +32,7 @@ const { module.exports = composeEnv([rootEnv], { vars: varsWithName({ DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__builderImage: { - default: `${devDedevDeploymentBaseImageEnv.registry}/${devDedevDeploymentBaseImageEnv.account}/${ - devDedevDeploymentBaseImageEnv.name - }:${devDedevDeploymentBaseImageEnv.tags.split(" ")[0]}`, + default: `${devDeploymentBaseImageEnv.registry}/${devDeploymentBaseImageEnv.account}/${devDeploymentBaseImageEnv.name}:${devDeploymentBaseImageEnv.buildTag}`, description: "The image used in the FROM import.", }, DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__registry: { @@ -49,7 +47,7 @@ module.exports = composeEnv([rootEnv], { default: "incubator-kie-sandbox-dev-deployment-kogito-quarkus-blank-app", description: "The image name.", }, - DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTags: { + DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTag: { default: rootEnv.env.root.streamName, description: "The image tag.", }, @@ -65,7 +63,7 @@ module.exports = composeEnv([rootEnv], { registry: getOrDefault(this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__registry), account: getOrDefault(this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__account), name: getOrDefault(this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__name), - tags: getOrDefault(this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTags), + buildTag: getOrDefault(this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTag), version: require("../package.json").version, dev: { mavenM2RepoViaHttpImage: getOrDefault( diff --git a/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json b/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json index 891a35e7da3..cd74bc44c5d 100644 --- a/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json +++ b/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json @@ -23,12 +23,12 @@ "copy:quarkus-app": "run-script-os", "copy:quarkus-app:linux:darwin": " cp -R ./node_modules/@kie-tools/dev-deployment-kogito-quarkus-blank-app/ ./dist-dev/quarkus-app && rm -rf ./dist-dev/quarkus-app/node_modules ./dist-dev/quarkus-app/install.js ./dist-dev/quarkus-app/env ./dist-dev/quarkus-app/package.json", "copy:quarkus-app:win32": "pnpm powershell \"New-Item -ItemType Directory -Force -Path ./dist-dev/quarkus-app; Copy-Item -R ./node_modules/@kie-tools/dev-deployment-kogito-quarkus-blank-app/* ./dist-dev/quarkus-app -Exclude @('node_modules')\"", - "create-test-image:build-only": "kie-tools--image-builder build --allowHostNetworkAccess -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", - "create-test-image:kind": "kie-tools--image-builder kind -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/ --kind-cluster-name kie-sandbox-dev-cluster", - "create-test-image:minikube": "kie-tools--image-builder minikube -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", - "create-test-image:openshift": "kie-tools--image-builder openshift -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", - "image:docker:build": "kie-tools--image-builder build --allowHostNetworkAccess -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", - "image:podman:build": "kie-tools--image-builder build --allowHostNetworkAccess -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/ -e podman", + "create-test-image:build-only": "kie-tools--image-builder build --allowHostNetworkAccess -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", + "create-test-image:kind": "kie-tools--image-builder kind -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/ --kind-cluster-name kie-sandbox-dev-cluster", + "create-test-image:minikube": "kie-tools--image-builder minikube -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", + "create-test-image:openshift": "kie-tools--image-builder openshift -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", + "image:docker:build": "kie-tools--image-builder build --allowHostNetworkAccess -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/", + "image:podman:build": "kie-tools--image-builder build --allowHostNetworkAccess -r \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.buildTag)\" --build-arg BUILDER_IMAGE_ARG=\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/ -e podman", "install": "node install.js", "m2-repo-via-http:container:kill": "(docker container kill m2-repo-via-http || true) && (docker container rm m2-repo-via-http || true)", "m2-repo-via-http:container:run": "(pnpm m2-repo-via-http:container:kill || true) && docker run --name m2-repo-via-http -v ~/.m2/repository:/var/www/html -dit -p \"$(build-env devDeploymentKogitoQuarkusBlankAppImage.dev.mavenM2RepoViaHttpImagePort):80\" $(build-env devDeploymentKogitoQuarkusBlankAppImage.dev.mavenM2RepoViaHttpImage)", diff --git a/packages/jbpm-quarkus-devui/jbpm-quarkus-devui-deployment/src/main/java/org/jbpm/quarkus/devui/deployment/DevConsoleProcessor.java b/packages/jbpm-quarkus-devui/jbpm-quarkus-devui-deployment/src/main/java/org/jbpm/quarkus/devui/deployment/DevConsoleProcessor.java index 8da6046f33d..00c821cf90a 100644 --- a/packages/jbpm-quarkus-devui/jbpm-quarkus-devui-deployment/src/main/java/org/jbpm/quarkus/devui/deployment/DevConsoleProcessor.java +++ b/packages/jbpm-quarkus-devui/jbpm-quarkus-devui-deployment/src/main/java/org/jbpm/quarkus/devui/deployment/DevConsoleProcessor.java @@ -27,7 +27,6 @@ import java.util.stream.Collectors; import org.kie.kogito.quarkus.extensions.spi.deployment.KogitoDataIndexServiceAvailableBuildItem; -import org.kie.kogito.quarkus.extensions.spi.deployment.TrustyServiceAvailableBuildItem; import org.jbpm.quarkus.devui.deployment.data.UserInfo; import org.jbpm.quarkus.devui.runtime.config.DevConsoleRuntimeConfig; import org.jbpm.quarkus.devui.runtime.config.DevUIStaticArtifactsRecorder; @@ -104,10 +103,11 @@ public CardPageBuildItem pages( final ConfigurationBuildItem configurationBuildItem, final List systemPropertyBuildItems, final Optional dataIndexServiceAvailableBuildItem, - final Optional trustyServiceAvailableBuildItem, final Capabilities capabilities) { - CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); + if (dataIndexServiceAvailableBuildItem.isEmpty() && !capabilities.isPresent(DATA_INDEX_CAPABILITY)) { + return null; + } String uiPath = nonApplicationRootPathBuildItem.resolveManagementPath(BASE_RELATIVE_URL, managementInterfaceBuildTimeConfig, launchModeBuildItem, true); @@ -117,51 +117,43 @@ public CardPageBuildItem pages( String dataIndexUrl = getProperty(configurationBuildItem, systemPropertyBuildItems, "kogito.data-index.url"); String trustyServiceUrl = getProperty(configurationBuildItem, systemPropertyBuildItems, "kogito.trusty.http.url"); + CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); + cardPageBuildItem.addBuildTimeData("extensionBasePath", uiPath); cardPageBuildItem.addBuildTimeData("openapiPath", openapiPath); cardPageBuildItem.addBuildTimeData("devUIUrl", devUIUrl); cardPageBuildItem.addBuildTimeData("dataIndexUrl", dataIndexUrl); - cardPageBuildItem.addBuildTimeData("isTracingEnabled", trustyServiceAvailableBuildItem.isPresent()); + cardPageBuildItem.addBuildTimeData("isTracingEnabled", false); cardPageBuildItem.addBuildTimeData("trustyServiceUrl", trustyServiceUrl); cardPageBuildItem.addBuildTimeData("userData", readUsersInfo(devConsoleRuntimeConfig)); - if (dataIndexServiceAvailableBuildItem.isPresent() || capabilities.isPresent(DATA_INDEX_CAPABILITY)) { - cardPageBuildItem.addPage(Page.webComponentPageBuilder() - .componentLink("qwc-jbpm-quarkus-devui.js") - .metadata("page", "Processes") - .title("Process Instances") - .icon("font-awesome-solid:diagram-project") - .dynamicLabelJsonRPCMethodName("queryProcessInstancesCount")); - - cardPageBuildItem.addPage(Page.webComponentPageBuilder() - .componentLink("qwc-jbpm-quarkus-devui.js") - .metadata("page", "TaskInbox") - .title("Tasks") - .icon("font-awesome-solid:bars-progress") - .dynamicLabelJsonRPCMethodName("queryTasksCount")); - - cardPageBuildItem.addPage(Page.webComponentPageBuilder() - .componentLink("qwc-jbpm-quarkus-devui.js") - .metadata("page", "JobsManagement") - .title("Jobs") - .icon("font-awesome-solid:clock") - .dynamicLabelJsonRPCMethodName("queryJobsCount")); - - cardPageBuildItem.addPage(Page.webComponentPageBuilder() - .componentLink("qwc-jbpm-quarkus-devui.js") - .metadata("page", "Forms") - .title("Forms") - .icon("font-awesome-solid:table-cells") - .dynamicLabelJsonRPCMethodName("getFormsCount")); - } - - if (trustyServiceAvailableBuildItem.isPresent()) { - cardPageBuildItem.addPage(Page.webComponentPageBuilder() - .componentLink("qwc-jbpm-quarkus-devui.js") - .metadata("page", "Audit") - .title("Audit investigation") - .icon("font-awesome-solid:gauge-high")); - } + cardPageBuildItem.addPage(Page.webComponentPageBuilder() + .componentLink("qwc-jbpm-quarkus-devui.js") + .metadata("page", "Processes") + .title("Process Instances") + .icon("font-awesome-solid:diagram-project") + .dynamicLabelJsonRPCMethodName("queryProcessInstancesCount")); + + cardPageBuildItem.addPage(Page.webComponentPageBuilder() + .componentLink("qwc-jbpm-quarkus-devui.js") + .metadata("page", "TaskInbox") + .title("Tasks") + .icon("font-awesome-solid:bars-progress") + .dynamicLabelJsonRPCMethodName("queryTasksCount")); + + cardPageBuildItem.addPage(Page.webComponentPageBuilder() + .componentLink("qwc-jbpm-quarkus-devui.js") + .metadata("page", "JobsManagement") + .title("Jobs") + .icon("font-awesome-solid:clock") + .dynamicLabelJsonRPCMethodName("queryJobsCount")); + + cardPageBuildItem.addPage(Page.webComponentPageBuilder() + .componentLink("qwc-jbpm-quarkus-devui.js") + .metadata("page", "Forms") + .title("Forms") + .icon("font-awesome-solid:table-cells") + .dynamicLabelJsonRPCMethodName("getFormsCount")); return cardPageBuildItem; } diff --git a/packages/kogito-management-console/README.md b/packages/kogito-management-console/README.md index 9ef508b77fc..f31bd109d5a 100644 --- a/packages/kogito-management-console/README.md +++ b/packages/kogito-management-console/README.md @@ -37,7 +37,7 @@ This package contains the `Containerfile/Dockerfile` and scripts to build a cont export KOGITO_MANAGEMENT_CONSOLE__registry= export KOGITO_MANAGEMENT_CONSOLE__account= export KOGITO_MANAGEMENT_CONSOLE__name= - export KOGITO_MANAGEMENT_CONSOLE__buildTags= + export KOGITO_MANAGEMENT_CONSOLE__buildTag= ``` > Default values can be found [here](./env/index.js). diff --git a/packages/kogito-management-console/env/index.js b/packages/kogito-management-console/env/index.js index 29f0adfd48f..b943cfa9aa0 100644 --- a/packages/kogito-management-console/env/index.js +++ b/packages/kogito-management-console/env/index.js @@ -35,7 +35,7 @@ module.exports = composeEnv([rootEnv], { default: "incubator-kie-kogito-management-console", description: "The image name.", }, - KOGITO_MANAGEMENT_CONSOLE__buildTags: { + KOGITO_MANAGEMENT_CONSOLE__buildTag: { default: rootEnv.env.root.streamName, description: "The image tag.", }, @@ -50,7 +50,7 @@ module.exports = composeEnv([rootEnv], { registry: getOrDefault(this.vars.KOGITO_MANAGEMENT_CONSOLE__registry), account: getOrDefault(this.vars.KOGITO_MANAGEMENT_CONSOLE__account), name: getOrDefault(this.vars.KOGITO_MANAGEMENT_CONSOLE__name), - tags: getOrDefault(this.vars.KOGITO_MANAGEMENT_CONSOLE__buildTags), + buildTag: getOrDefault(this.vars.KOGITO_MANAGEMENT_CONSOLE__buildTag), port: getOrDefault(this.vars.KOGITO_MANAGEMENT_CONSOLE__port), version: require("../package.json").version, }, diff --git a/packages/kogito-management-console/package.json b/packages/kogito-management-console/package.json index 791e01fa38e..64a977ed1e0 100644 --- a/packages/kogito-management-console/package.json +++ b/packages/kogito-management-console/package.json @@ -24,8 +24,8 @@ "copy:webapp-assets:linux:darwin": "cp -R ./node_modules/@kie-tools/runtime-tools-management-console-webapp/dist/ ./dist-dev/runtime-tools-management-console-webapp", "copy:webapp-assets:win32": "pnpm powershell \"Copy-Item -R ./node_modules/@kie-tools/runtime-tools-management-console-webapp/dist/ ./dist-dev/runtime-tools-management-console-webapp\"", "env-json:schema:generate": "ts-json-schema-generator --tsconfig ./node_modules/@kie-tools/runtime-tools-management-console-webapp/tsconfig.json --path ./node_modules/@kie-tools/runtime-tools-management-console-webapp/src/env/EnvJson.ts --type EnvJson --id EnvJson --out ./dist-dev/EnvJson.schema.json", - "image:docker:build": "kie-tools--image-builder build -r \"$(build-env kogitoManagementConsole.registry)\" -a \"$(build-env kogitoManagementConsole.account)\" -n \"$(build-env kogitoManagementConsole.name)\" -t \"$(build-env kogitoManagementConsole.tags)\" --build-arg KOGITO_MANAGEMENT_CONSOLE_PORT=\"$(build-env kogitoManagementConsole.port)\"", - "image:podman:build": "kie-tools--image-builder build -r \"$(build-env kogitoManagementConsole.registry)\" -a \"$(build-env kogitoManagementConsole.account)\" -n \"$(build-env kogitoManagementConsole.name)\" -t \"$(build-env kogitoManagementConsole.tags)\" --build-arg KOGITO_MANAGEMENT_CONSOLE_PORT=\"$(build-env kogitoManagementConsole.port)\" -e podman" + "image:docker:build": "kie-tools--image-builder build -r \"$(build-env kogitoManagementConsole.registry)\" -a \"$(build-env kogitoManagementConsole.account)\" -n \"$(build-env kogitoManagementConsole.name)\" -t \"$(build-env kogitoManagementConsole.buildTag)\" --build-arg KOGITO_MANAGEMENT_CONSOLE_PORT=\"$(build-env kogitoManagementConsole.port)\"", + "image:podman:build": "kie-tools--image-builder build -r \"$(build-env kogitoManagementConsole.registry)\" -a \"$(build-env kogitoManagementConsole.account)\" -n \"$(build-env kogitoManagementConsole.name)\" -t \"$(build-env kogitoManagementConsole.buildTag)\" --build-arg KOGITO_MANAGEMENT_CONSOLE_PORT=\"$(build-env kogitoManagementConsole.port)\" -e podman" }, "devDependencies": { "@kie-tools/image-builder": "workspace:*", diff --git a/packages/kogito-task-console/README.md b/packages/kogito-task-console/README.md index 09b33a13c54..1e1aba7b894 100644 --- a/packages/kogito-task-console/README.md +++ b/packages/kogito-task-console/README.md @@ -37,7 +37,7 @@ This package contains the `Containerfile/Dockerfile` and scripts to build a cont export KOGITO_TASK_CONSOLE__registry= export KOGITO_TASK_CONSOLE__account= export KOGITO_TASK_CONSOLE__name= - export KOGITO_TASK_CONSOLE__buildTags= + export KOGITO_TASK_CONSOLE__buildTag= ``` > Default values can be found [here](./env/index.js). diff --git a/packages/kogito-task-console/env/index.js b/packages/kogito-task-console/env/index.js index 8bd2583e71b..814486d59fd 100644 --- a/packages/kogito-task-console/env/index.js +++ b/packages/kogito-task-console/env/index.js @@ -35,7 +35,7 @@ module.exports = composeEnv([rootEnv], { default: "incubator-kie-kogito-task-console", description: "The image name.", }, - KOGITO_TASK_CONSOLE__buildTags: { + KOGITO_TASK_CONSOLE__buildTag: { default: rootEnv.env.root.streamName, description: "The image tag.", }, @@ -50,7 +50,7 @@ module.exports = composeEnv([rootEnv], { registry: getOrDefault(this.vars.KOGITO_TASK_CONSOLE__registry), account: getOrDefault(this.vars.KOGITO_TASK_CONSOLE__account), name: getOrDefault(this.vars.KOGITO_TASK_CONSOLE__name), - tags: getOrDefault(this.vars.KOGITO_TASK_CONSOLE__buildTags), + buildTag: getOrDefault(this.vars.KOGITO_TASK_CONSOLE__buildTag), port: getOrDefault(this.vars.KOGITO_TASK_CONSOLE__port), version: require("../package.json").version, }, diff --git a/packages/kogito-task-console/package.json b/packages/kogito-task-console/package.json index 20a0a936ce9..fad3636b9bd 100644 --- a/packages/kogito-task-console/package.json +++ b/packages/kogito-task-console/package.json @@ -24,8 +24,8 @@ "copy:webapp-assets:linux:darwin": "cp -R ./node_modules/@kie-tools/runtime-tools-task-console-webapp/dist/ ./dist-dev/runtime-tools-task-console-webapp", "copy:webapp-assets:win32": "pnpm powershell \"Copy-Item -R ./node_modules/@kie-tools/runtime-tools-task-console-webapp/dist/ ./dist-dev/runtime-tools-task-console-webapp\"", "env-json:schema:generate": "ts-json-schema-generator --tsconfig ./node_modules/@kie-tools/runtime-tools-task-console-webapp/tsconfig.json --path ./node_modules/@kie-tools/runtime-tools-task-console-webapp/src/env/EnvJson.ts --type EnvJson --id EnvJson --out ./dist-dev/EnvJson.schema.json", - "image:docker:build": "kie-tools--image-builder build -r \"$(build-env kogitoTaskConsole.registry)\" -a \"$(build-env kogitoTaskConsole.account)\" -n \"$(build-env kogitoTaskConsole.name)\" -t \"$(build-env kogitoTaskConsole.tags)\" --build-arg KOGITO_TASK_CONSOLE_PORT=\"$(build-env kogitoTaskConsole.port)\"", - "image:podman:build": "kie-tools--image-builder build -r \"$(build-env kogitoTaskConsole.registry)\" -a \"$(build-env kogitoTaskConsole.account)\" -n \"$(build-env kogitoTaskConsole.name)\" -t \"$(build-env kogitoTaskConsole.tags)\" --build-arg KOGITO_TASK_CONSOLE_PORT=\"$(build-env kogitoTaskConsole.port)\" -e podman" + "image:docker:build": "kie-tools--image-builder build -r \"$(build-env kogitoTaskConsole.registry)\" -a \"$(build-env kogitoTaskConsole.account)\" -n \"$(build-env kogitoTaskConsole.name)\" -t \"$(build-env kogitoTaskConsole.buildTag)\" --build-arg KOGITO_TASK_CONSOLE_PORT=\"$(build-env kogitoTaskConsole.port)\"", + "image:podman:build": "kie-tools--image-builder build -r \"$(build-env kogitoTaskConsole.registry)\" -a \"$(build-env kogitoTaskConsole.account)\" -n \"$(build-env kogitoTaskConsole.name)\" -t \"$(build-env kogitoTaskConsole.buildTag)\" --build-arg KOGITO_TASK_CONSOLE_PORT=\"$(build-env kogitoTaskConsole.port)\" -e podman" }, "devDependencies": { "@kie-tools/image-builder": "workspace:*", diff --git a/packages/maven-base/pom.xml b/packages/maven-base/pom.xml index 4ef90a2b549..e393de4e9d3 100644 --- a/packages/maven-base/pom.xml +++ b/packages/maven-base/pom.xml @@ -139,6 +139,13 @@ pom import
+ + org.kie.kogito + kogito-apps-bom + ${version.org.kie.kogito} + pom + import + org.drools drools-bom diff --git a/packages/maven-config-setup-helper/index.js b/packages/maven-config-setup-helper/index.js index a8b00c6d3ab..8612c0ce73e 100755 --- a/packages/maven-config-setup-helper/index.js +++ b/packages/maven-config-setup-helper/index.js @@ -17,6 +17,7 @@ * under the License. */ +const { execSync } = require("child_process"); const fs = require("fs"); const path = require("path"); @@ -24,6 +25,23 @@ const MVN_CONFIG_ORIGINAL_FILE_PATH = path.join(".mvn", "maven.config.original") const MVN_CONFIG_FILE_PATH = path.join(".mvn", "maven.config"); module.exports = { + setPomProperty: ({ key, value }) => { + if (!key || !value) { + console.error("[maven-config-setup-helper] Wrong values provided"); + process.exit(1); + } + + if (process.platform === "win32") { + execSync(`mvn versions:set-property \`-Dproperty=${key} \`-DnewVersion=${value} \`-DgenerateBackupPoms=false`, { + stdio: "inherit", + shell: "powershell.exe", + }); + } else { + execSync(`mvn versions:set-property -Dproperty=${key} -DnewVersion=${value} -DgenerateBackupPoms=false`, { + stdio: "inherit", + }); + } + }, setup: (mavenConfigString) => { let originalMvnConfigString; if (fs.existsSync(MVN_CONFIG_ORIGINAL_FILE_PATH)) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9faba3aec0f..10931a711dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,7 +247,14 @@ importers: specifier: ^1.1.6 version: 1.1.6 - examples/dmn-quarkus-example: + examples/drools-process-usertasks-quarkus-example: + dependencies: + "@kie-tools/jbpm-quarkus-devui": + specifier: workspace:* + version: link:../../packages/jbpm-quarkus-devui + "@kie-tools/maven-base": + specifier: workspace:* + version: link:../../packages/maven-base devDependencies: "@kie-tools/maven-config-setup-helper": specifier: workspace:* @@ -259,7 +266,7 @@ importers: specifier: ^1.1.6 version: 1.1.6 - examples/drools-process-usertasks-quarkus-example: + examples/jbpm-compact-architecture-example: dependencies: "@kie-tools/jbpm-quarkus-devui": specifier: workspace:* @@ -268,6 +275,12 @@ importers: specifier: workspace:* version: link:../../packages/maven-base devDependencies: + "@kie-tools/kogito-management-console": + specifier: workspace:* + version: link:../../packages/kogito-management-console + "@kie-tools/kogito-task-console": + specifier: workspace:* + version: link:../../packages/kogito-task-console "@kie-tools/maven-config-setup-helper": specifier: workspace:* version: link:../../packages/maven-config-setup-helper @@ -6021,31 +6034,6 @@ importers: specifier: ^2.3.2 version: 2.3.2 - packages/kie-sandbox-image: - dependencies: - "@kie-tools/image-env-to-json": - specifier: workspace:* - version: link:../image-env-to-json - "@kie-tools/online-editor": - specifier: workspace:* - version: link:../online-editor - devDependencies: - "@kie-tools/image-builder": - specifier: workspace:* - version: link:../image-builder - "@kie-tools/root-env": - specifier: workspace:* - version: link:../root-env - rimraf: - specifier: ^3.0.2 - version: 3.0.2 - run-script-os: - specifier: ^1.1.6 - version: 1.1.6 - ts-json-schema-generator: - specifier: ^1.1.2 - version: 1.1.2 - packages/kie-sandbox-webapp-image: dependencies: "@kie-tools/image-env-to-json": diff --git a/prettier.config.js b/prettier.config.js index a89c8d5d5e7..363a281d4d1 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -25,5 +25,9 @@ module.exports = { files: "package.json", options: { parser: "package-json" }, }, + { + files: "**/*.xml", + options: { parser: "xml" }, + }, ], }; diff --git a/repo/graph.dot b/repo/graph.dot index 74f179a2141..20a23d4cf15 100644 --- a/repo/graph.dot +++ b/repo/graph.dot @@ -21,6 +21,9 @@ digraph G { "@kie-tools/root-env" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; "@kie-tools-examples/drools-process-usertasks-quarkus-example" [ color = "orange", fontcolor = "orange", style = "dashed, rounded" ]; "@kie-tools/jbpm-quarkus-devui" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; + "@kie-tools-examples/jbpm-compact-architecture-example" [ color = "orange", fontcolor = "orange", style = "dashed, rounded" ]; + "@kie-tools/kogito-management-console" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; + "@kie-tools/kogito-task-console" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; "@kie-tools-examples/ping-pong-view" [ color = "orange", fontcolor = "orange", style = "dashed, rounded" ]; "@kie-tools-core/envelope" [ color = "purple", fontcolor = "purple", style = "rounded" ]; "@kie-tools-examples/ping-pong-view-angular" [ color = "orange", fontcolor = "orange", style = "dashed, rounded" ]; @@ -131,9 +134,7 @@ digraph G { "@kie-tools/online-editor" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; "@kie-tools/kn-plugin-workflow" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; "@kie-tools/sonataflow-operator" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; - "@kie-tools/kogito-management-console" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; "@kie-tools/runtime-tools-management-console-webapp" [ color = "blue", fontcolor = "blue", style = "rounded" ]; - "@kie-tools/kogito-task-console" [ color = "black", fontcolor = "black", style = "dashed, rounded" ]; "@kie-tools/runtime-tools-task-console-webapp" [ color = "blue", fontcolor = "blue", style = "rounded" ]; "@kie-tools-core/kubernetes-bridge" [ color = "purple", fontcolor = "purple", style = "rounded" ]; "@kie-tools-core/workspace" [ color = "purple", fontcolor = "purple", style = "rounded" ]; @@ -204,6 +205,9 @@ digraph G { "kie-tools-examples-base64png-editor-vscode-extension" -> "@kie-tools-core/webpack-base" [ style = "dashed", color = "orange" ]; "@kie-tools-examples/commit-message-validation-service" -> "@kie-tools/root-env" [ style = "dashed", color = "orange" ]; "@kie-tools-examples/drools-process-usertasks-quarkus-example" -> "@kie-tools/jbpm-quarkus-devui" [ style = "solid", color = "orange" ]; + "@kie-tools-examples/jbpm-compact-architecture-example" -> "@kie-tools/jbpm-quarkus-devui" [ style = "solid", color = "orange" ]; + "@kie-tools-examples/jbpm-compact-architecture-example" -> "@kie-tools/kogito-management-console" [ style = "dashed", color = "orange" ]; + "@kie-tools-examples/jbpm-compact-architecture-example" -> "@kie-tools/kogito-task-console" [ style = "dashed", color = "orange" ]; "@kie-tools-examples/ping-pong-view" -> "@kie-tools-core/envelope" [ style = "solid", color = "orange" ]; "@kie-tools-examples/ping-pong-view-angular" -> "@kie-tools-examples/ping-pong-view" [ style = "solid", color = "orange" ]; "@kie-tools-examples/ping-pong-view-react" -> "@kie-tools-examples/ping-pong-view" [ style = "solid", color = "orange" ]; diff --git a/repo/graph.json b/repo/graph.json index 75b9eb78534..086b961df15 100644 --- a/repo/graph.json +++ b/repo/graph.json @@ -28,6 +28,13 @@ { "id": "@kie-tools/jbpm-quarkus-devui" }, { "id": "@kie-tools/maven-base" }, { "id": "@kie-tools/runtime-tools-process-dev-ui-webapp" }, + { "id": "@kie-tools-examples/jbpm-compact-architecture-example" }, + { "id": "@kie-tools/kogito-management-console" }, + { "id": "@kie-tools/kogito-task-console" }, + { "id": "@kie-tools/image-builder" }, + { "id": "@kie-tools/image-env-to-json" }, + { "id": "@kie-tools/runtime-tools-management-console-webapp" }, + { "id": "@kie-tools/runtime-tools-task-console-webapp" }, { "id": "@kie-tools-examples/ping-pong-view" }, { "id": "@kie-tools-core/envelope-bus" }, { "id": "@kie-tools-examples/ping-pong-view-angular" }, @@ -73,7 +80,6 @@ { "id": "@kie-tools/cors-proxy" }, { "id": "@kie-tools/cors-proxy-api" }, { "id": "@kie-tools/cors-proxy-image" }, - { "id": "@kie-tools/image-builder" }, { "id": "@kie-tools/dashbuilder" }, { "id": "@kie-tools/dashbuilder-component-assembler" }, { "id": "@kie-tools/maven-config-setup-helper" }, @@ -124,7 +130,6 @@ { "id": "@kie-tools/form-generation-tool" }, { "id": "@kie-tools/uniforms-bootstrap4-codegen" }, { "id": "@kie-tools/uniforms-patternfly-codegen" }, - { "id": "@kie-tools/image-env-to-json" }, { "id": "@kie-tools/import-java-classes-component" }, { "id": "@kie-tools/runtime-tools-process-webapp-components" }, { "id": "@kie-tools/runtime-tools-shared-webapp-components" }, @@ -143,10 +148,6 @@ { "id": "@kie-tools/sonataflow-operator" }, { "id": "@kie-tools/sonataflow-builder-image" }, { "id": "@kie-tools/sonataflow-devmode-image" }, - { "id": "@kie-tools/kogito-management-console" }, - { "id": "@kie-tools/runtime-tools-management-console-webapp" }, - { "id": "@kie-tools/kogito-task-console" }, - { "id": "@kie-tools/runtime-tools-task-console-webapp" }, { "id": "@kie-tools/unitables" }, { "id": "pmml-vscode-extension" }, { "id": "@kie-tools/python-venv" }, @@ -276,6 +277,64 @@ "target": "@kie-tools/runtime-tools-shared-webapp-components", "weight": 1 }, + { + "source": "@kie-tools-examples/jbpm-compact-architecture-example", + "target": "@kie-tools/jbpm-quarkus-devui", + "weight": 1 + }, + { + "source": "@kie-tools-examples/jbpm-compact-architecture-example", + "target": "@kie-tools/kogito-management-console", + "weight": 1 + }, + { + "source": "@kie-tools-examples/jbpm-compact-architecture-example", + "target": "@kie-tools/kogito-task-console", + "weight": 1 + }, + { "source": "@kie-tools/kogito-management-console", "target": "@kie-tools/image-builder", "weight": 1 }, + { "source": "@kie-tools/kogito-management-console", "target": "@kie-tools/image-env-to-json", "weight": 1 }, + { + "source": "@kie-tools/kogito-management-console", + "target": "@kie-tools/runtime-tools-management-console-webapp", + "weight": 1 + }, + { "source": "@kie-tools/kogito-task-console", "target": "@kie-tools/image-builder", "weight": 1 }, + { "source": "@kie-tools/kogito-task-console", "target": "@kie-tools/image-env-to-json", "weight": 1 }, + { + "source": "@kie-tools/kogito-task-console", + "target": "@kie-tools/runtime-tools-task-console-webapp", + "weight": 1 + }, + { "source": "@kie-tools/image-builder", "target": "@kie-tools/tsconfig", "weight": 1 }, + { "source": "@kie-tools/image-env-to-json", "target": "@kie-tools-core/webpack-base", "weight": 1 }, + { "source": "@kie-tools/image-env-to-json", "target": "@kie-tools/eslint", "weight": 1 }, + { "source": "@kie-tools/image-env-to-json", "target": "@kie-tools/tsconfig", "weight": 1 }, + { + "source": "@kie-tools/runtime-tools-management-console-webapp", + "target": "@kie-tools/runtime-tools-process-webapp-components", + "weight": 1 + }, + { + "source": "@kie-tools/runtime-tools-management-console-webapp", + "target": "@kie-tools/runtime-tools-shared-webapp-components", + "weight": 1 + }, + { + "source": "@kie-tools/runtime-tools-task-console-webapp", + "target": "@kie-tools-core/react-hooks", + "weight": 1 + }, + { + "source": "@kie-tools/runtime-tools-task-console-webapp", + "target": "@kie-tools/runtime-tools-process-webapp-components", + "weight": 1 + }, + { + "source": "@kie-tools/runtime-tools-task-console-webapp", + "target": "@kie-tools/runtime-tools-shared-webapp-components", + "weight": 1 + }, { "source": "@kie-tools-examples/ping-pong-view", "target": "@kie-tools-core/envelope", "weight": 1 }, { "source": "@kie-tools-core/envelope-bus", "target": "@kie-tools/eslint", "weight": 1 }, { "source": "@kie-tools-core/envelope-bus", "target": "@kie-tools/root-env", "weight": 1 }, @@ -480,7 +539,6 @@ { "source": "@kie-tools/cors-proxy-api", "target": "@kie-tools/tsconfig", "weight": 1 }, { "source": "@kie-tools/cors-proxy-image", "target": "@kie-tools/cors-proxy", "weight": 1 }, { "source": "@kie-tools/cors-proxy-image", "target": "@kie-tools/image-builder", "weight": 1 }, - { "source": "@kie-tools/image-builder", "target": "@kie-tools/tsconfig", "weight": 1 }, { "source": "@kie-tools/dashbuilder", "target": "@kie-tools/maven-base", "weight": 1 }, { "source": "@kie-tools/dashbuilder", "target": "@kie-tools/dashbuilder-component-assembler", "weight": 1 }, { @@ -782,9 +840,6 @@ { "source": "@kie-tools/uniforms-patternfly-codegen", "target": "@kie-tools-core/webpack-base", "weight": 1 }, { "source": "@kie-tools/uniforms-patternfly-codegen", "target": "@kie-tools/eslint", "weight": 1 }, { "source": "@kie-tools/uniforms-patternfly-codegen", "target": "@kie-tools/tsconfig", "weight": 1 }, - { "source": "@kie-tools/image-env-to-json", "target": "@kie-tools-core/webpack-base", "weight": 1 }, - { "source": "@kie-tools/image-env-to-json", "target": "@kie-tools/eslint", "weight": 1 }, - { "source": "@kie-tools/image-env-to-json", "target": "@kie-tools/tsconfig", "weight": 1 }, { "source": "@kie-tools/import-java-classes-component", "target": "@kie-tools-core/vscode-java-code-completion", @@ -870,45 +925,6 @@ { "source": "@kie-tools/sonataflow-builder-image", "target": "@kie-tools/sonataflow-image-common", "weight": 1 }, { "source": "@kie-tools/sonataflow-devmode-image", "target": "@kie-tools/sonataflow-image-common", "weight": 1 }, { "source": "@kie-tools/sonataflow-devmode-image", "target": "@kie-tools/sonataflow-quarkus-devui", "weight": 1 }, - { "source": "@kie-tools/kogito-management-console", "target": "@kie-tools/image-builder", "weight": 1 }, - { "source": "@kie-tools/kogito-management-console", "target": "@kie-tools/image-env-to-json", "weight": 1 }, - { - "source": "@kie-tools/kogito-management-console", - "target": "@kie-tools/runtime-tools-management-console-webapp", - "weight": 1 - }, - { - "source": "@kie-tools/runtime-tools-management-console-webapp", - "target": "@kie-tools/runtime-tools-process-webapp-components", - "weight": 1 - }, - { - "source": "@kie-tools/runtime-tools-management-console-webapp", - "target": "@kie-tools/runtime-tools-shared-webapp-components", - "weight": 1 - }, - { "source": "@kie-tools/kogito-task-console", "target": "@kie-tools/image-builder", "weight": 1 }, - { "source": "@kie-tools/kogito-task-console", "target": "@kie-tools/image-env-to-json", "weight": 1 }, - { - "source": "@kie-tools/kogito-task-console", - "target": "@kie-tools/runtime-tools-task-console-webapp", - "weight": 1 - }, - { - "source": "@kie-tools/runtime-tools-task-console-webapp", - "target": "@kie-tools-core/react-hooks", - "weight": 1 - }, - { - "source": "@kie-tools/runtime-tools-task-console-webapp", - "target": "@kie-tools/runtime-tools-process-webapp-components", - "weight": 1 - }, - { - "source": "@kie-tools/runtime-tools-task-console-webapp", - "target": "@kie-tools/runtime-tools-shared-webapp-components", - "weight": 1 - }, { "source": "@kie-tools/unitables", "target": "@kie-tools/boxed-expression-component", "weight": 1 }, { "source": "@kie-tools/unitables", "target": "@kie-tools/dmn-runner", "weight": 1 }, { "source": "pmml-vscode-extension", "target": "@kie-tools-core/vscode-extension", "weight": 1 }, @@ -1190,6 +1206,7 @@ "@kie-tools-examples/drools-process-usertasks-quarkus-example", "examples/drools-process-usertasks-quarkus-example" ], + ["@kie-tools-examples/jbpm-compact-architecture-example", "examples/jbpm-compact-architecture-example"], ["@kie-tools-examples/ping-pong-view", "examples/ping-pong-view"], ["@kie-tools-examples/ping-pong-view-angular", "examples/ping-pong-view-angular"], ["@kie-tools-examples/ping-pong-view-react", "examples/ping-pong-view-react"],