Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 6 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,8 @@ jobs:
run: npm run test:unit

- name: Start Camunda ${{ matrix.camunda }} with Docker Compose
run: |
cd assets/c8/${{ matrix.camunda }}
DATABASE=elasticsearch docker compose --profile elasticsearch up -d
env:
DATABASE: elasticsearch
working-directory: assets/c8/${{ matrix.camunda }}
run: docker compose up -d

- name: Wait for Camunda to be ready
run: |
Expand Down Expand Up @@ -79,19 +76,13 @@ jobs:

- name: Stop Camunda
if: always()
run: |
cd assets/c8/${{ matrix.camunda }}
DATABASE=elasticsearch docker compose --profile elasticsearch down -v
env:
DATABASE: elasticsearch
working-directory: assets/c8/${{ matrix.camunda }}
run: docker compose down -v

- name: Show Camunda logs on failure
if: failure()
run: |
cd assets/c8/${{ matrix.camunda }}
DATABASE=elasticsearch docker compose --profile elasticsearch logs
env:
DATABASE: elasticsearch
working-directory: assets/c8/${{ matrix.camunda }}
run: docker compose logs

release:
name: Release
Expand Down
23 changes: 7 additions & 16 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,9 @@ jobs:
run: npm run test:unit

- name: Start Camunda ${{ matrix.camunda }} with Docker Compose
run: |
cd assets/c8/${{ matrix.camunda }}
DATABASE=elasticsearch docker compose --profile elasticsearch up -d
env:
DATABASE: elasticsearch

working-directory: assets/c8/${{ matrix.camunda }}
run: docker compose up -d

- name: Wait for Camunda to be ready
run: |
echo "Waiting for Camunda at localhost:8080..."
Expand Down Expand Up @@ -76,16 +73,10 @@ jobs:

- name: Stop Camunda
if: always()
run: |
cd assets/c8/${{ matrix.camunda }}
DATABASE=elasticsearch docker compose --profile elasticsearch down -v
env:
DATABASE: elasticsearch
working-directory: assets/c8/${{ matrix.camunda }}
run: docker compose down -v

- name: Show Camunda logs on failure
if: failure()
run: |
cd assets/c8/${{ matrix.camunda }}
DATABASE=elasticsearch docker compose --profile elasticsearch logs
env:
DATABASE: elasticsearch
working-directory: assets/c8/${{ matrix.camunda }}
run: docker compose logs
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ web_modules/
.env.*
!.env.example
!.env.database.*
!assets/**/*/.env

# parcel-bundler cache (https://parceljs.org/)
.cache
Expand Down
8 changes: 8 additions & 0 deletions EXAMPLES.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ c8 create pi --id=order-process --variables='{"orderId":"12345","amount":100}'
# Create and wait for completion
c8 create pi --id=order-process --awaitCompletion

# Create and wait with custom timeout (30 seconds)
c8 create pi --id=order-process --awaitCompletion --requestTimeout=30000

# Note: --fetchVariables is reserved for future API support
# All variables are currently returned by default
```
Expand All @@ -71,6 +74,8 @@ c8 create pi --id=order-process --awaitCompletion

The `await` command is an alias for `create` with `--awaitCompletion`. It uses the Camunda 8 API's built-in server-side waiting to create a process instance and wait for completion.

The `--requestTimeout` option specifies the maximum time in milliseconds to wait for the process instance to complete. By default (or when set to 0), the generic request timeout configured in the cluster is used.

```bash
# Create and wait for completion (shorthand)
c8 await pi --id=order-process
Expand All @@ -79,6 +84,9 @@ c8 await process-instance --id=order-process
# With variables
c8 await pi --id=order-process --variables='{"orderId":"12345"}'

# With custom timeout (60 seconds)
c8 await pi --id=order-process --requestTimeout=60000

# Equivalent to:
c8 create pi --id=order-process --awaitCompletion

Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,16 @@ c8ctl create process-instance --id=myProcess
# Create process instance and wait for completion
c8ctl create pi --id=myProcess --awaitCompletion

# Create process instance with custom timeout (30 seconds)
c8ctl create pi --id=myProcess --awaitCompletion --requestTimeout=30000

# Await process instance completion (alias for create with --awaitCompletion)
c8ctl await pi --id=myProcess
c8ctl await process-instance --id=myProcess

# Await with custom timeout
c8ctl await pi --id=myProcess --requestTimeout=60000

# Cancel process instance
c8ctl cancel pi 123456

Expand Down
3 changes: 3 additions & 0 deletions assets/c8/8.8/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Default configuration for docker compose
# Activates the elasticsearch profile (vs opensearch)
COMPOSE_PROFILES=elasticsearch
4 changes: 2 additions & 2 deletions assets/c8/8.8/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,9 @@ services:
- 9600:9600
- 8080:8080
depends_on:
- ${DATABASE}
- elasticsearch
networks:
- zeebe_network
env_file:
- envs/.env.database.${DATABASE}
- envs/.env.database.elasticsearch

2 changes: 2 additions & 0 deletions assets/c8/8.9/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Default configuration for docker compose
CAMUNDA_VERSION=8.9.0-alpha4
184 changes: 55 additions & 129 deletions assets/c8/8.9/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,135 +1,61 @@
networks:
zeebe_network: {}

services:
postgres:
container_name: postgres
image: postgres:17.5-alpine
ports:
- '5432:5432'
environment:
POSTGRES_DB: identity
POSTGRES_USER: identity
POSTGRES_PASSWORD: 't2L@!AqSMg8%I%NmHM'
networks:
- zeebe_network

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.18.4
container_name: elasticsearch
profiles: ['elasticsearch']
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
- xpack.security.enabled=false
- 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m'
- path.repo=/usr/local/els-snapshots
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
- 9300:9300
networks:
- zeebe_network
restart: always
volumes:
- ./els-snapshots:/usr/local/els-snapshots

opensearch:
image: opensearchproject/opensearch:2.17.0
container_name: opensearch
profiles: ['opensearch']
environment:
- cluster.name=opensearch-cluster
- discovery.type=single-node
- plugins.security.disabled=true
- bootstrap.memory_lock=true # along with the memlock settings below, disables swapping
- 'OPENSEARCH_JAVA_OPTS=-Xms1024m -Xmx1024m' # minimum and maximum Java heap size, recommend setting both to 50% of system RAM
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=yourStrongPassword123!
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536 # maximum number of open files for the OpenSearch user, set to at least 65536 on modern systems
hard: 65536
ports:
- 9200:9200
- 9605:9605 # required for Performance Analyzer
networks:
- zeebe_network

kibana:
image: docker.elastic.co/kibana/kibana:8.18.4
profiles: ['elasticsearch']
ports:
- 5601:5601
environment:
- elasticsearch.hosts=http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- zeebe_network

keycloak:
depends_on:
- postgres
container_name: keycloak
image: quay.io/keycloak/keycloak:26.0
command: start-dev --http-relative-path=/auth
ports:
- '18080:8080'
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/identity
KC_DB_USERNAME: identity
KC_DB_PASSWORD: 't2L@!AqSMg8%I%NmHM'
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
healthcheck:
test: ['CMD-SHELL', 'exec 3<>/dev/tcp/localhost/8080 && echo -e "GET /auth/health/ready HTTP/1.1\nhost: localhost:8080\n" >&3 && timeout 1 cat <&3 | grep "200 OK"']
interval: 30s
timeout: 15s
retries: 8
start_period: 30s
networks:
- zeebe_network

camunda:
image: camunda/camunda:${CAMUNDA_VERSION}
container_name: camunda
image: camunda/camunda:SNAPSHOT
environment:
- 'JAVA_TOOL_OPTIONS=-Xms512m -Xmx1g'
- ZEEBE_BROKER_NETWORK_HOST=camunda
- SPRING_PROFILES_ACTIVE=e2e-test,consolidated-auth,tasklist,broker,operate,identity
- CAMUNDA_SECURITY_AUTHENTICATION_UNPROTECTEDAPI=false
- CAMUNDA_SECURITY_AUTHORIZATIONS_ENABLED=true
- CAMUNDA_SECURITY_AUTHENTICATION_METHOD=BASIC
- CAMUNDA_SECURITY_MULTITENANCY_CHECKSENABLED=false
- CAMUNDA_SECURITY_INITIALIZATION_USERS_0_USERNAME=demo
- CAMUNDA_SECURITY_INITIALIZATION_USERS_0_PASSWORD=demo
- CAMUNDA_SECURITY_INITIALIZATION_USERS_0_NAME=Demo
- CAMUNDA_SECURITY_INITIALIZATION_USERS_0_EMAIL=demo@example.com
- CAMUNDA_SECURITY_INITIALIZATION_DEFAULTROLES_ADMIN_USERS_0=demo
- CAMUNDA_SECURITY_INITIALIZATION_USERS_1_USERNAME=lisa
- CAMUNDA_SECURITY_INITIALIZATION_USERS_1_PASSWORD=lisa
- CAMUNDA_SECURITY_INITIALIZATION_USERS_1_NAME=lisa
- CAMUNDA_SECURITY_INITIALIZATION_USERS_1_EMAIL=lisa@example.com
- CAMUNDA_SECURITY_INITIALIZATION_DEFAULTROLES_ADMIN_USERS_1=lisa
- CAMUNDA_DATA_SECONDARY_STORAGE_TYPE=elasticsearch
- CAMUNDA_DATA_SECONDARY_STORAGE_ELASTICSEARCH_URL=http://elasticsearch:9200
- CAMUNDA_DATA_SECONDARYSTORAGE_ELASTICSEARCH_WAITFORIMPORTERS=false
- CAMUNDA_TASKLIST_V2_MODE_ENABLED=${CAMUNDA_TASKLIST_V2_MODE_ENABLED:-true}
SPRING_PROFILES_ACTIVE: 'broker,consolidated-auth'
ZEEBE_CLOCK_CONTROLLED: 'true'
ZEEBE_LOG_APPENDER: 'Stackdriver'
CAMUNDA_SECURITY_AUTHENTICATION_UNPROTECTEDAPI: 'true'
CAMUNDA_SECURITY_AUTHORIZATIONS_ENABLED: 'false'
# H2 / in-memory config (mirrors H2Configuration)
CAMUNDA_DATABASE_URL: 'jdbc:h2:mem:cpt;DB_CLOSE_DELAY=-1;MODE=PostgreSQL'
CAMUNDA_DATABASE_TYPE: 'rdbms'
CAMUNDA_DATABASE_USERNAME: 'sa'
CAMUNDA_DATABASE_PASSWORD: ''
CAMUNDA_DATA_SECONDARY_STORAGE_TYPE: 'rdbms'
ZEEBE_BROKER_EXPORTERS_RDBMS_CLASSNAME: 'io.camunda.exporter.rdbms.RdbmsExporter'
ZEEBE_BROKER_EXPORTERS_RDBMS_ARGS_FLUSH_INTERVAL: 'PT0S'
ZEEBE_BROKER_EXPORTERS_RDBMS_ARGS_DEFAULT_HISTORY_TTL: 'PT2S'
ZEEBE_BROKER_EXPORTERS_RDBMS_ARGS_MIN_HISTORY_CLEANUP_INTERVAL: 'PT2S'
ZEEBE_BROKER_EXPORTERS_RDBMS_ARGS_MAX_HISTORY_CLEANUP_INTERVAL: 'PT5S'
LOGGING_LEVEL_IO_CAMUNDA_DB_RDBMS: 'INFO'
LOGGING_LEVEL_ORG_MYBATIS: 'INFO'
ports:
- 26500:26500
- 9600:9600
- 8080:8080
depends_on:
- ${DATABASE}
- '8080:8080' # REST API (ZEEBE_REST_ADDRESS -> http://localhost:8080)
- '26500:26500' # gRPC Gateway
- '9600:9600' # Monitoring / actuator / test time control
# Uncomment if you need direct access to internal broker ports:
# - "26501:26501" # Command API (internal)
# - "26502:26502" # Internal API (internal)
healthcheck:
# Mimic readiness checks: uses monitoring port + health endpoint
test: ['CMD', 'wget', '-qO', '-', 'http://localhost:9600/actuator/health/status']
interval: 5s
timeout: 3s
retries: 30
networks:
- zeebe_network
env_file:
- envs/.env.database.${DATABASE}
- camunda-net

# connectors:
# image: camunda/connectors-bundle:SNAPSHOT
# container_name: camunda-connectors
# depends_on:
# camunda:
# condition: service_healthy
# environment:
# # Adapted from runtime: service name + internal port
# ZEEBE_CLIENT_BROKER_GATEWAY-ADDRESS: "camunda:26500"
# ZEEBE_CLIENT_SECURITY_PLAINTEXT: "true"
# # Optional additional env you might pass via framework (placeholders):
# # CONNECTORS_LOG_APPENDER: "Stackdriver"
# # CAMUNDA_CLIENT_GRPC-ADDRESS: "camunda:26500"
# # CAMUNDA_CLIENT_REST-ADDRESS: "http://camunda:8080"
# ports:
# - "8085:8080" # Expose connectors runtime (external 8085 -> internal 8080)
# networks:
# - camunda-net

networks:
camunda-net:
name: camunda-net
Comment on lines 1 to +61
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docker-compose infrastructure changes appear to be unrelated to the --requestTimeout feature. This PR should focus on adding the requestTimeout flag. Infrastructure simplifications (switching 8.9 to H2, hardcoding elasticsearch for 8.8, etc.) should be in a separate PR for easier review and to maintain clear commit history per the coding guidelines.

Copilot uses AI. Check for mistakes.
1 change: 0 additions & 1 deletion assets/c8/8.9/envs/.env.database.elasticsearch

This file was deleted.

6 changes: 6 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading