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

import rustLogo from "../../../images/ci-insights/rust/logo.svg"
import IntegrationLogo from "../../../../components/IntegrationLogo.astro"
import MergifyCIUploadStep from "../../../../components/MergifyCIUploadStep.astro"
import MergifyCIUploadStepMatrix from "../../../../components/MergifyCIUploadStepMatrix.astro"
import CommonTroubleshootingTips from './_common-troubleshooting-tips.mdx'
import CIInsightsSetupNote from "../../../../components/CIInsightsSetupNote.astro"
import GhaMergifyCiQuarantineSetup from "./_gha_mergify_ci_quarantine_setup.mdx"

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

This guide shows how to generate JUnit reports from your Rust tests and upload
them to **CI Insights** using a GitHub Actions 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 GitHub Actions Workflow

<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
  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
  continue-on-error: true
  run: cargo test -- --nocapture 2>&1 | cargo2junit > junit.xml
```

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

<GhaMergifyCiQuarantineSetup />

## Verify and Review in CI 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 CI Insights.

You can then review your test results, including any failures or flaky tests,
directly in the [CI Insights
dashboard](https://dashboard.mergify.com/ci-insights/jobs).

## 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>
