---
title: Rust Integration with Mergify
description: Report your test results from Rust tests to Mergify
---

<IntegrationLogo src={rustLogo} alt="Rust logo" />

This guide shows how to generate JUnit reports from your Rust tests and upload
them to **Test Insights** using your CI workflow.

## Generate a JUnit Report with Rust Tests

Rust's built-in test framework doesn't natively output JUnit XML reports, but
you can use third-party tools to convert the test output to JUnit format.

### Using cargo2junit

Install `cargo2junit` which converts Rust test output to JUnit XML:

```bash
cargo install cargo2junit
```

Then run your tests and pipe the output:

```bash
cargo test -- --nocapture 2>&1 | cargo2junit > junit.xml
```

### Using cargo-nextest

`cargo-nextest` is a modern test runner that supports JUnit output natively:

```bash
cargo install cargo-nextest
```

Run tests with JUnit output:

```bash
cargo nextest run --message-format junit > junit.xml
```

### Using custom test script

You can also create a simple script that runs tests and converts output:

```bash
#!/bin/bash
cargo test --message-format json 2>&1 | tee test-results.json
# Convert JSON to JUnit XML using a tool like jq or custom script
# This approach requires additional tooling
```

### Using GitHub Actions with cargo-nextest

For the most reliable results, we recommend using `cargo-nextest`:

```bash
cargo install cargo-nextest
cargo nextest run --message-format junit --output-file junit.xml
```

## Update Your CI Workflow

### GitHub Actions

<CIInsightsSetupNote />

After generating the JUnit report, add a step to upload the results to CI
Insights using the `mergifyio/gha-mergify-ci` action.

For example, in your workflow file:

```yaml
- name: Install cargo-nextest
  uses: taiki-e/install-action@nextest

- name: Run Rust Tests and Generate JUnit Report
  id: tests
  continue-on-error: true
  run: cargo nextest run --message-format junit --output-file junit.xml
```

<MergifyCIUploadStep reportPath="junit.xml" />

Alternative approach using cargo2junit:

```yaml
- name: Install cargo2junit
  uses: taiki-e/install-action@cargo2junit

- name: Run Rust Tests and Generate JUnit Report
  id: tests
  continue-on-error: true
  run: cargo test -- --nocapture 2>&1 | cargo2junit > junit.xml
```

<MergifyCIUploadStep reportPath="junit.xml" />
<MergifyCIUploadStepMatrix reportPath="junit.xml" />

<GhaMergifyCiQuarantineSetup />

### Buildkite

<BuildkiteCIUploadStep reportPath="junit.xml" />
<BuildkiteCIUploadStepMatrix reportPath="junit.xml" />

<BuildkiteCIQuarantineSetup />

### Any CI (Mergify CLI)

<MergifyCliUploadStep reportPath="junit.xml" testCommand="cargo test -- --nocapture 2>&1 | cargo2junit > junit.xml" />

## Verify and Review in Test Insights

After pushing these changes:

1. Your GitHub Actions workflow will execute your Rust tests.
2. A JUnit report (junit.xml) is generated.
3. The Mergify CI action uploads the report to Test Insights.

<ReviewInTestInsights />

## Troubleshooting Tips

<ul>
  <li>Tool Installation: Ensure `cargo-nextest` or `cargo2junit` is properly installed before running tests.</li>
  <li>Output Format: Verify that the chosen tool generates valid JUnit XML format.</li>

  <CommonTroubleshootingTips />
</ul>
