Skip to main content
Trunk Flaky Tests integrates with your CI by adding a step in your GitHub Action workflow to upload tests with the Trunk Analytics CLI. Before you start these steps, see the Test Frameworks docs for instructions on producing Trunk-compatible reports for your test framework.

Setup steps

Work through the steps below in order. Once you’ve finished the last one, you’re set up — navigate to app.trunk.io to see your results.

Trunk Organization Slug and Token

Before setting up uploads to Trunk, you must sign in to app.trunk.io and obtain your Trunk organization slug and token.

Trunk Slug

You can find your organization slug under SettingsOrganizationGeneral. You’ll save this as a variable in CI in a later step.

Trunk Token

You can find your token under SettingsOrganizationGeneral, in the API section. Since this is a secret, do not leak it publicly. Ensure you get your organization token, not your project/repo token.

Add Your Trunk Token and Organization Slug as Secrets

Store the Trunk slug and API token obtained in the previous step in your repo as GitHub secrets named TRUNK_ORG_URL_SLUG and TRUNK_API_TOKEN respectively.

Upload to Trunk

Add an Upload Test Results step after running tests in each of your CI jobs that run tests. This should minimally include all jobs that run on pull requests, as well as jobs that run on your main or stable branches, for example, main, master, or develop.
It is important to upload test results from CI runs on stable branches, such as main, master, or develop. This will give you a stronger signal about the health of your code and tests.Trunk can also detect test flakes on PR and merge branches. To best detect flaky tests, it is recommended to upload test results from stable, PR, and merge branch CI runs.Learn more about detection

Example GitHub Actions Workflow

The following is an example of a GitHub Actions workflow step to upload test results after your tests using Trunk’s Analytics Uploader Action. To find out how to produce the report files the uploader needs, see the instructions for your test framework in the Test Frameworks docs.
See the GitHub Actions Reference page for all available CLI arguments and usage.

Enable quarantining

You can quarantine flaky tests by wrapping the test command or as a follow-up step.
Using the Trunk Analytics Uploader Action in your GitHub Actions Workflow files, may need modifications to your workflow files to support quarantining.If you upload your test results as a second step after you run your tests, you need to add continue-on-error: true on your test step so your CI job will continue even on failures.
Here’s an example file.
If you want to run the test command and upload in a single step, the test command must be run via the Analytics Uploader through the run: <COMMAND TO RUN TESTS> parameter.This will override the response code of the test command. Make sure to set continue-on-error: false so un-quarantined tests are blocking.

Stale files

Ensure you report every test run in CI and clean up stale files produced by your test framework. If you’re reusing test runners and using a glob like **/junit.xml to upload tests, stale files not cleaned up will be included in the current test run, throwing off detection of flakiness. You should clean up all your results files after every upload step.

Validate Your Uploads

Once your workflow has run on a stable branch, navigate to app.trunk.io and confirm Trunk received your results.
  • The Uploads tab lists every report Trunk has ingested, with status and any warnings (missing file paths, malformed XML, and so on).
  • The Tests tab shows individual test cases once an upload has been processed.
If a recent run isn’t showing up, check the action logs for upload errors and confirm your TRUNK_API_TOKEN and TRUNK_ORG_URL_SLUG secrets are set on the repo running the workflow.
Direct Links to Job Logs is an optional configuration, and relies on a third-party actions dependency.
By default, Trunk Flaky Tests links to your overall workflow run when you click “Logs” on a test failure. However, GitHub Actions makes it difficult to get a direct link to the specific job where the test ran. If you want direct links to individual job logs instead of the workflow run, you can manually set the JOB_URL environment variable using a third-party action to extract the job ID.

Setup

  1. Add the job ID extraction step to your workflow using a community action:
  1. Pass the job URL when uploading test results:

Complete Example

Here’s a full workflow example with direct job linking:

How It Works

  • The ayachensiyuan/get-action-job-id action extracts the GitHub Actions job ID
  • We construct the full job URL using: https://github.com/{repo}/actions/runs/{run_id}/job/{job_id}
  • This URL is passed to Trunk via the JOB_URL environment variable
  • When you click “Logs” on a test failure in Trunk, you’ll go directly to that job’s logs instead of the workflow overview

Notes

  • The job-name parameter must exactly match your job’s name field
  • The GITHUB_TOKEN must have appropriate permissions to read workflow job information
  • If the job ID extraction fails, Trunk will fall back to linking to the workflow run