GitHub Actions

Configure Flaky Tests detection using a GitHub Action

Before you start these steps, see the Test Frameworks docs for instructions on producing Trunk-compatible reports for your test runner.

Trunk Flaky Tests integrates with your CI by adding a step in your GitHub Action workflow to upload tests with the Trunk Uploader CLI.

Before you start on these steps, see the Test Frameworks docs for instructions on producing a Trunk-compatible output for your test framework.

Checklist

By the end of this guide, you should achieve the following.

After completing these checklist items, you'll be integrated with Trunk.

Trunk Organization Slug and Token

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

Trunk Slug

You can find your organization slug under Settings > Organization > General > Organization > Name. You'll save this as a variable in CI in a later step.

Trunk Token

You can find your token under Settings > Organization > General > API > API Key. 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 secretsarrow-up-right 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.

triangle-exclamation

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 Actionarrow-up-right.

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 pagearrow-up-right 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.

circle-exclamation

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.

circle-info

Direct Links to Job Logs is an optional configuration, and relies on a third-party actions dependencyarrow-up-right.

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 actionarrow-up-right 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

Last updated