> ## Documentation Index
> Fetch the complete documentation index at: https://docs.geval.io/llms.txt
> Use this file to discover all available pages before exploring further.

# GitLab CI

> Run Geval in GitLab CI/CD with the release binary and contract-driven exit codes.

The integration model matches GitHub: **one `geval` binary**, **signals file**, **contract YAML**, then branch on **exit status**.

## Example job

```yaml theme={null}
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

| Code | Meaning             |
| ---- | ------------------- |
| `0`  | PASS — job succeeds |
| `1`  | REQUIRE\_APPROVAL   |
| `2`  | BLOCK               |

See [Exit codes](/integration/exit-codes) for semantics and scripting patterns.

## Multiple contracts

```bash theme={null}
./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](/integration/github-actions) · [check](/cli/check)
