skills/skills/compare-gradle-builds/SKILL.md
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