- Install JDK 17 and Maven 3.9 or newer. The build enforces this toolchain; run
mvn -B verifyfrom the repository root before building images. - Populate environment variables for Temporal (e.g.,
TEMPORAL_TARGET,TEMPORAL_NAMESPACE,TEMPORAL_TLS_ENABLED=false). - From the repo root, run
mvn -pl scan-api quarkus:devto boot the REST service. - Start Temporal developer server (Docker Compose or standalone) and configure the worker modules:
mvn -pl scan-worker-workflow quarkus:devplus the light/filter/opengrep workers. - If you are using the Temporal dev server, set
TEMPORAL_TARGET=localhost:7233andTEMPORAL_TLS_ENABLED=false. - Start the suppression mock if you want uploader integration testing:
mvn -pl suppression-service-mock quarkus:dev(defaults to port 8090) and setSUPPRESSION_SERVICE_URL=http://localhost:8090. - For repo cloning in the light worker, ensure
gitis installed and setGIT_CLONE_TOKENif required for private repositories. - Optional: set
ARTIFACTS_DIR=artifactsto control where the source tarball and suppression bundle are written. - Configure the OpenGrep worker with
OPENGREP_BIN=opengrepandOPENGREP_CONFIG=/path/to/rules.ymlto generate SARIF; the worker fails closed if either setting is absent instead of emitting an empty stub result. - Optional: start the triage service with Postgres:
mvn -pl triage-service quarkus:dev, setDB_HOST/DB_PORT/DB_NAME/DB_USER/DB_PASSWORD, configure JWT verification (MP_JWT_VERIFY_PUBLICKEY_LOCATIONorMP_JWT_VERIFY_PUBLICKEY), and setGIT_CLONE_TOKENfor private repos; theroleclaim must includesecurity:vuln_assessor:triager. UI lives athttp://localhost:8095/triage/and Swagger athttp://localhost:8095/swagger-ui. If you want PR URLs in responses, setTRIAGE_PR_URL_TEMPLATEwith{repo},{base}, and{branch}placeholders. - Optional: set
TRIAGE_SERVICE_URL=http://localhost:8095on the filter worker to persist potential false positives; configure the triage service policy location/cache viaTRIAGE_POLICY_PATHandTRIAGE_POLICY_CACHE_MINUTES(defaults to.autotriage/policy.celon the repo default branch). - Optional: enable ZeroFalse LLM suppressions in the filter worker with
ZEROFALSE_ENABLED=trueand configure a Quarkus LangChain4j provider (for examplequarkus.langchain4j.openai.*). - Optional tuning for ZeroFalse:
ZEROFALSE_MAX_FINDINGS,ZEROFALSE_MAX_TRACE_STEPS,ZEROFALSE_CONTEXT_LINES_BEFORE,ZEROFALSE_CONTEXT_LINES_AFTER,ZEROFALSE_PROMPTS_VARIANT. - Use cURL to POST
/scansand watch Temporal Web UI for workflow progress;/scans/{runId}returns structured status.
- Start a Temporal dev server on the host (or set
TEMPORAL_TARGETto your cluster). - From the repo root, run
scripts/podman-compose.ps1 up(PowerShell) orscripts/podman-compose.sh up(bash) to build and start containers. scan-apilistens on port 8080, the suppression mock on 8090, the triage service on 8095, and Postgres on 5432;ARTIFACTS_DIRis shared across workers via a podman volume.- To stop everything, run
scripts/podman-compose.ps1 downorscripts/podman-compose.sh down. - Optional overrides: set
GIT_CLONE_TOKENfor private repos andOPENGREP_BIN/OPENGREP_CONFIGfor real SARIF output.
- Build containers with
docker buildusing the Dockerfiles indocker/and push them to a registry. - Deploy Temporal (with TLS certs mounted via Secrets) and apply the manifests under
k8s/which wire config as env vars; triage service and database manifests are not yet included. - Ensure TLS cert volumes are mounted and the Temporal target URL is available via ConfigMap.
- Use Kubernetes Jobs or Deployments to schedule the worker replicas per queue: workflow, light, filter, opengrep.
- Monitor the
/healthendpoints and Temporal UI; rotate certificates by replacing the Secrets and restarting pods as needed.
- Java 17 is the compiler, test, CI, container-build, and production runtime baseline. Core triage tests are part of the normal reactor and must not be skipped.