Thanks for contributing. This repository contains the Java client, AI agent SDK, Spring integrations, examples, and end-to-end tests.
All participation is governed by the Code of Conduct.
- Java 21+
- Docker for examples and integration tests that start Conductor
Run formatting before committing:
./gradlew spotlessApplyRun the SDK test suite:
./gradlew test jacocoTestReportThe tests module also has an integration suite (-PIntegrationTests) that runs against a
real Conductor server, separate from the unit suite above. scripts/run-integration-oss.sh
mirrors the integration-tests-oss job in integration-tests.yml: it starts a local Conductor OSS +
Postgres stack (defined in scripts/docker-compose-oss.yaml), waits for /health, runs the
integration suite, and tears the stack down on exit.
scripts/run-integration-oss.sh # against `latest`
scripts/run-integration-oss.sh --version 3.32.0-rc18
scripts/run-integration-oss.sh --keep-up # leave the stack running afterwards
scripts/run-integration-oss.sh --include-gated # also run tests normally skipped as Orkes-onlyThe script always prints the resolved conductoross/conductor tag and pulls it before
starting the stack, since latest (the local default) is a mutable tag — without an
explicit pull, docker compose up would silently reuse a stale cached image instead of
fetching the current one. It also always runs Gradle with --rerun-tasks, since the test
task's up-to-date check doesn't account for env vars like CONDUCTOR_SERVER_TYPE or the
state of the live server underneath — without it, a rerun after changing gating or switching
server versions could silently report a stale cached result instead of executing anything.
The script doesn't pin a JDK itself, but CI runs on Zulu 21. If your local default JDK is
newer (e.g. 23) you may hit Unsupported class file major version errors compiling tests —
set JAVA_HOME explicitly to match CI:
JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-21.jdk/Contents/Home ./scripts/run-integration-oss.shTests annotated @DisabledIfEnvironmentVariable(named = "CONDUCTOR_SERVER_TYPE", matches = "oss") skip themselves against plain OSS because they exercise Orkes-managed-only features
(e.g. the Service Registry, Authorization, Prompts/Integrations, Environment Variables, and
Secrets APIs, plus a handful of task/workflow endpoints OSS doesn't implement or that hit
known Postgres-persistence bugs). Each annotation's disabledReason documents the specific,
empirically-confirmed gap — treat those as the source of truth rather than a list here, since
they can drift as OSS gains features. If you add or remove that annotation, re-verify against
a freshly-pulled image first: a test that fails against a stale local image may pass against
current OSS, and vice versa.
Compile the maintained agent examples when changing their APIs or documentation:
./gradlew :agent-examples:compileJava- Keep changes focused and include tests for behavior changes.
- Update the relevant documentation and examples when public APIs or commands change.
- Do not add secrets, credentials, or private endpoints to source, tests, or documentation.
- Open pull requests against
mainand complete the pull-request template.
To contribute across the broader project, browse Conductor OSS contribution opportunities and follow the upstream contribution guide.