Hive Hive
Sign in

feat(cli): surface the Tuist Run Report in the GitHub Actions job summary

GitHub issue · Closed

Metadata
Source
tuist/tuist #11040
Updated
Jun 24, 2026
Domains
CLI
Details

The Tuist GitHub App posts a “🛠️ Tuist Run Report” (tests, builds, …) as a pull request comment, gated on git_ref starting with refs/pull/. GitHub merge queue runs use refs like gh-readonly-queue/main/pr-123-<sha>, which never match, so those runs get no report and teams have to maintain their own JUnit reporting. This PR surfaces the report in the GitHub Actions job summary ($GITHUB_STEP_SUMMARY) so it shows up inline on the run, regardless of how the workflow was triggered.

What it looks like

The Tuist Run Report in a GitHub Actions job summary

What changed

The CLI renders the summary locally from data it already has and appends it to $GITHUB_STEP_SUMMARY when running in GitHub Actions:

  • The test command derives per-scheme counts and failed-test names from parseTestStatuses (the lightweight xcresult status read already used for quarantine/retry); the build command captures scheme / outcome / duration around the xcodebuild invocation. Both are stashed on RunMetadataStorage as RunReportTestRun / RunReportBuildRun.
  • GitHubActionsJobSummaryService renders Tests, Failed Tests, and Builds tables plus a link to the dashboard run, and appends them to the job summary. It’s best-effort and never fails the command it reports on.

Why CLI-rendered, not server-rendered

The first iteration fetched a server-rendered report from a new endpoint. That can’t work in the hosted setup: tuist test/build upload the raw result bundle / activity log with status processing, and the server materializes the results asynchronously (the xcresult / activity-log processors). At command end the data isn’t queryable yet, and — unlike the pull request comment, which those processors re-render when they finish — the job summary is written once by the CLI and can’t converge afterward. Rendering from a lightweight local parse (already on the hot path) is immediate and reliable. Server-only insights such as flaky tests and bundle-size deltas stay in the PR comment / dashboard, which the summary links to.

Scope is GitHub Actions, tests + builds. It’s automatic when a report exists, mirroring the always-on PR comment, so no new flag or config knob was added.

Validation

  • CLI: the tuist scheme and the Tuist-Workspace test target both compile with the compilation cache disabled; SwiftFormat and SwiftLint are clean on the touched files. The renderer is unit-tested (logic is pure); test execution runs in CI.
  • Server: no net change — the first iteration’s endpoint, OpenAPI operation, RunReportURLs refactor, and GetRunJobSummaryService were reverted, so the server side is identical to main.

🤖 Generated with Claude Code

Comments
T
tuist[bot] Jun 10, 2026

🛠️ Tuist Run Report 🛠️

Previews 📦
App Commit Open on device
Tuist 871e012ef
Tests 🧪
Scheme Status Cache hit rate Tests Skipped Ran Commit
TuistAcceptanceTests 0 % 0 0 0 871e012ef
TuistApp 61 % 28 0 28 ad1d150ea
TuistUnitTests 32 % 604 38 566 871e012ef
Builds 🔨
Scheme Status Duration Commit
TuistAcceptanceTests 3m 56s 871e012ef
TuistApp 1.1s 871e012ef
TuistUnitTests 3m 58s 871e012ef
Bundles 🧰
Bundle Commit Install size Download size
Tuist 871e012ef 20.0 MBΔ -285.0 KB (-1.40%) 14.9 MBΔ -124.8 KB (-0.83%)
TA
tuist-atlas[bot] Jun 12, 2026

This feature is now available in version 4.199.0. Update to surface the Tuist Run Report in your GitHub Actions job summary.