Skip to main content
GitHub Actions needs no pipeline changes and no exporter. Trunk collects CI data from the webhooks the Trunk GitHub App already receives.

Setup

1

Install the Trunk GitHub App

See Connecting to Trunk.The App’s existing Actions permission is what carries workflow and job results, so there is nothing extra to grant.
2

Turn on CI Intelligence for the repository

In the Trunk app, navigate to SettingsRepositories, find [your repository], and toggle CI Intelligence on.
3

Run a workflow

Push a commit, or open a pull request. Data appears as the run executes — you do not have to wait for it to finish.
Turn CI Intelligence on between runs, not during one. A run already in progress when you flip the toggle started before Trunk was listening, so its jobs have no run to attach to and are dropped. The first run started after the toggle is the first complete one you will see.

What you get

Re-runs are kept as separate attempts of the same run rather than replacing it, so a flaky job’s history shows every try.

Things worth knowing

Jobs are identified by their key, not their name

A job’s identity is what it is written as under jobs: — what github.job reports — not the name: it displays under. Display names change with matrix values and with edits; the key does not, so a job keeps its history when you rename it. A job Trunk has not resolved a key for yet is recorded under its rendered name and renamed in place once the workflow file is parsed.

Check runs appear under “Other checks”

A check run posted through the GitHub Checks API with the Actions token is reported by GitHub as a job of a workflow run — and not necessarily the run that created it. GitHub files it under the earliest check suite opened for the app on that commit, which is often an unrelated workflow. Trunk keeps these as real signal but does not show them as work the hosting workflow performed: they are hoisted into a separate Other checks lane in the commit trace. They have no queue time, because nothing was ever enqueued for them.

Runner labels are what the job asked for

runs-on: labels are recorded as the labels the job requested. The runner that picked it up had at least those, usually more — GitHub does not report the runner’s own label set on the webhook, so Trunk does not invent one.