# Other CI providers

The [GitHub Action](/docs/ci-and-prs/github-actions-setup) handles comments and commit statuses, so it only runs on GitHub. The scanner itself is a CLI, so it runs on any provider: GitLab CI, CircleCI, Jenkins, Buildkite, or a plain script.

## Exit codes

React Doctor exits `1` when it finds blocking issues and `0` when it doesn't. Every CI system reads that to decide pass or fail, so no extra wiring is needed.

```bash
# Scan the whole project. Fails the job on error-level issues (the default).
npx react-doctor@latest .
```

## Useful flags

<table>
  <thead>
    <tr>
      <th>Flag</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <code>--blocking &lt;level&gt;</code>
      </td>
      <td>
        Level that exits <code>1</code>: <code>error</code> (default),{" "}
        <code>warning</code>, or <code>none</code> (report only, always exit{" "}
        <code>0</code>)
      </td>
    </tr>
    <tr>
      <td>
        <code>--diff [base]</code>
      </td>
      <td>
        Scan only files changed against a base branch instead of everything
      </td>
    </tr>
    <tr>
      <td>
        <code>--changed-files-from &lt;file&gt;</code>
      </td>
      <td>Read the changed-file list from a file, one path per line</td>
    </tr>
    <tr>
      <td>
        <code>--project &lt;name&gt;</code>
      </td>
      <td>In a monorepo, scan only certain project(s), comma-separated</td>
    </tr>
    <tr>
      <td>
        <code>--json</code>
      </td>
      <td>Print a JSON report instead of text, for processing</td>
    </tr>
  </tbody>
</table>

See the [CLI reference](/docs/reference/cli-reference) for the full list.

## GitLab CI

```yaml
react-doctor:
  image: node:24
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  script:
    # Only scan files changed against the target branch.
    - npx react-doctor@latest . --diff "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" --blocking error
```

If the job exits non-zero, the pipeline fails. That is the same gate as the GitHub Action, without the comments.

CircleCI, Jenkins, and Buildkite follow the same shape: run `npx react-doctor@latest` in a Node 24 step and let the exit code decide the result.
