Skip to main content
The integration model matches GitHub: one geval binary, signals file, contract YAML, then branch on exit status.

Example job

geval-gate:
  stage: test
  image: ubuntu:22.04
  script:
    - apt-get update && apt-get install -y curl
    - curl -fsSL https://github.com/geval-labs/geval/releases/latest/download/geval-linux-x86_64 -o geval
    - chmod +x geval
    - python scripts/export_signals.py > signals.json
    - ./geval check --contract .geval/contract.yaml --signals signals.json --env prod
  rules:
    - if: $CI_MERGE_REQUEST_ID

Exit codes

CodeMeaning
0PASS — job succeeds
1REQUIRE_APPROVAL
2BLOCK
See Exit codes for semantics and scripting patterns.

Multiple contracts

./geval check \
  -c .geval/contract.yaml \
  -c shared/gates/security.yaml \
  --signals signals.json
(Adjust paths — second path must be a contract file, not a raw policy.)

See also

GitHub Actions · check