一键导入
compare-gradle-builds
// Compares two Gradle build runs to identify duration regressions, cache changes, and task outcome differences. Can be invoked with build IDs, dashboard URLs, or branch names.
// Compares two Gradle build runs to identify duration regressions, cache changes, and task outcome differences. Can be invoked with build IDs, dashboard URLs, or branch names.
Project-specific PR-review rules for the tuist/tuist Elixir codebases (server, cache, processor, xcode_processor, tuist_common, noora). Focuses on the things only this repo knows — authorization invariants, tenancy, write-only ClickHouse, Mimic placement, migration timestamptz, data-export updates, marketing changelog entries, and i18n.
Project-specific PR-review rules for the tuist/tuist Swift codebase (cli). Focuses on the things only this repo knows — preferring value types, the testing framework choice, and migration of XCTest to Swift Testing.
Guides day-to-day work in Tuist-generated Xcode workspaces, including generation, build and test commands, and buildable folders. Use when working in a Tuist-generated project or when users mention `tuist generate`, `xcodebuild test`, or generated workspaces.
Migrates existing Xcode projects to Tuist generated workspaces with build and run validation, external dependency mapping, and migration checklists. Use when adopting Tuist for an existing app or converting a hand-edited Xcode project to generated projects.
Analyzes Xcode selective testing effectiveness for a test run, showing which test targets were skipped or ran, and diagnosing regressions in test selection. Can compare two test runs to identify what changed.
Compares two Xcode build runs to identify duration regressions, cache changes, and new issues. Can be invoked with build IDs, dashboard URLs, or branch names (e.g. `tuist compare-builds --base main --head feature-branch`).
| name | compare-gradle-builds |
| description | Compares two Gradle build runs to identify duration regressions, cache changes, and task outcome differences. Can be invoked with build IDs, dashboard URLs, or branch names. |
You'll typically receive two build identifiers (IDs, dashboard URLs, or branch names). Follow these steps using the Tuist MCP tools:
list_gradle_builds to find builds on each branch.get_gradle_build for both base and head builds.list_gradle_build_tasks to fetch task-level details for both builds.If only one identifier is provided, use the project's default branch as the baseline.
Fetch each directly with get_gradle_build(build_run_id: "<id>").
List recent builds on each branch and pick the latest:
list_gradle_builds(account_handle: "...", project_handle: "...", git_branch: "<branch>", page_size: 1)
Then fetch full details with get_gradle_build(build_run_id: "<id>").
main).git rev-parse --abbrev-ref HEAD.After fetching both builds, compare:
| Metric | What to check |
|---|---|
duration_ms | Flag if head is >10% slower than base |
status | Flag if base succeeded but head failed |
tasks_local_hit_count | Compare local cache hit counts |
tasks_remote_hit_count | Compare remote cache hit counts |
tasks_executed_count | Compare how many tasks ran (higher means more cache misses) |
cacheable_tasks_count | Note if the cacheable task count changed |
cache_hit_rate | (local_hits + remote_hits) / cacheable_tasks_count * 100 |
requested_tasks | Ensure both builds ran the same tasks for a fair comparison |
gradle_version / java_version | Note environment differences that affect comparability |
Compute the cache miss delta: base_executed - head_executed. Positive means head has fewer executions (improvement). Negative means regression.
Use list_gradle_build_tasks for both builds. Compare duration_ms and outcome per task path.
Look for:
local_hit or remote_hit to executed (cache invalidation).executed to local_hit or remote_hit (cache improvement).failed (new failures).Sort by absolute time difference to find the biggest regressions.
Use the outcome filter to focus on specific task states:
list_gradle_build_tasks(build_run_id: "<id>", outcome: "executed") to see only executed tasks.list_gradle_build_tasks(build_run_id: "<id>", outcome: "failed") to see failures.list_gradle_build_tasks(build_run_id: "<id>", cacheable: true) to see only cacheable tasks.If the head build is significantly slower:
requested_tasks differ (different task sets are not directly comparable).executed.gradle_version or java_version changed, which can affect performance.Compare task-level cache behavior:
up_to_date, local_hit, remote_hit, and executed reveal cache effectiveness.Compare environment details:
gradle_version and java_version: Different versions can affect build times and cache validity.is_ci: CI vs local builds may have different performance characteristics.git_branch and git_commit_sha: Verify the builds are from the expected commits.root_project_name: Ensure both builds are from the same project structure.Produce a summary with:
duration_ms.Example:
Build Comparison: base (abc123 on main) vs head (def456 on feature-x)
Duration: 45200ms -> 62800ms (+39%) -- REGRESSION
Cache hit rate: 85% -> 72% (-13%) -- 8 tasks went from cache hit to executed
Status: success -> success
Root cause: Cache hit rate dropped because 8 tasks had invalidated caches.
The :app:compileKotlin task changed from remote_hit to executed,
cascading to 7 downstream tasks.
Recommendations:
- Investigate which source changes invalidated :app:compileKotlin cache
- Consider splitting large modules to reduce cache invalidation cascading