You can automatically detect and manage flaky tests in your Go projects by integrating with Trunk. This document explains how to configure Go to output JUnit XML reports that can be uploaded to Trunk for analysis.Documentation Index
Fetch the complete documentation index at: https://trunk-4cab4936-mintlify-sync-from-docs-1778014214.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Why an Extra Step for go test?
The standard Go test runner, go test, is excellent for executing tests and providing immediate feedback to developers. However, it does not natively produce test reports in the JUnit XML format that Trunk Flaky Tests requires for ingestion and analysis. Therefore, an additional tool is needed to convert the output of go test into this compatible format. This intermediate step ensures that Trunk can accurately process your test results and identify flaky tests.
Checklist
By the end of this guide, you should achieve the following before proceeding to the next steps to configure your CI provider.- Generate a compatible test report (JUnit XML).
- Configure the report file path or glob
- Disable retries for better detection accuracy
- Test uploads locally
Generating JUnit XML Reports from Go Tests
Before integrating with Trunk, you need to generate a Trunk-compatible report. For Go,go test does not output JUnit XML by default, so you must use a tool to format it.
- go test + go-junit-report
- gotestsum
Update your existing Then pipe
go test usage to generate json and use go-junit-report to convert your standard Go testing output into JUnit XML.go test into the go-junit-report:go test doesn’t directly output JUnit XML, you’ll use a tool to convert its output. Here are two common options:
Option 1: Using gotestsum
- What it is:
gotestsumis a Go test runner that wrapsgo test. It executes your tests (usinggo test -jsonfor more structured input) and can format the results into JUnit XML, alongside other human-readable formats and test run summaries. - Why choose this approach: You might prefer
gotestsumif you favor using a single command that serves as a wrapper to both execute your Go tests (by callinggo testinternally) and directly generate the JUnit XML report required for flaky test analysis. - Installation: Download from releases or install via
go install:
- Usage:
Option 2: Using go-junit-report
- What it is:
go-junit-reportis a tool that converts the output of a standardgo testcommand into JUnit XML. This is achieved by runninggo testand then piping its output togo-junit-reportas a separate step. - Why choose this approach: You might prefer
go-junit-reportif you want to keep yourgo testcommand distinct and add a separate, explicit step for converting its output to JUnit XML, often suitable for a minimal setup focused purely on this conversion. - Installation:
- Usage: For reliable report generation, use
go test -jsonand pipe its output. The-parser gojsonflag tellsgo-junit-reportto expect this JSON stream:
Report File Path
The tools will write a JUnit test report to the file specified (e.g.,junit-gotestsum.xml or report-go-junit.xml). You’ll need this path when configuring uploads to Trunk.
Disable Retries
Regardless of the tool chosen, you need to disable automatic retries if you previously enabled them. Retries compromise the accurate detection of flaky tests.If you’re using a package like retry, disable it to get more accurate results from Trunk.
Try It Locally
- Linux (x64)
- Linux (arm64)
- macOS (arm64)
- macOS (x64)
Test Upload
Before modifying your CI jobs to automatically upload test results to Trunk, try uploading a single test run manually. You make an upload to Trunk using the following command:Next Steps
Configure your CI to upload test runs to Trunk. Find the guides for your CI framework below:| Azure DevOps Pipelines | azure-devops-pipelines | azure.png | |
| BitBucket Pipelines | bitbucket-pipelines | bitbucket.png | |
| BuildKite | buildkite | buildkite.png | |
| CircleCI | circleci | circle-ci.png | |
| Drone CI | droneci | drone.png | |
| GitHub Actions | github-actions | github.png | |
| Gitlab | gitlab | gitlab.png | |
| Jenkins | jenkins | jenkins.png | |
| Semaphore | semaphoreci | semaphore.png | |
| TeamCity | https://github.com/trunk-io/docs/blob/main/flaky-tests/get-started/frameworks/broken-reference/README.md | teamcity.png | |
| Travis CI | travisci | travis.png | |
| Other CI Providers | otherci | other.png |