tuist/agent-skills

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.

First seen Mar 28, 2026

Installation

$ npx skills add tuist/agent-skills --skill compare-gradle-builds

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from tuist/agent-skills · top by installs.

npx skills add tuist/agent-skills

Browse all from tuist/agent-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 35
Default branch main
Open issues 1
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,942 B
  • docs SUMMARY.md 202 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 211 installs

SKILL.md

Compare Gradle Builds

Quick Start

You'll typically receive two build identifiers (IDs, dashboard URLs, or branch names). Follow these steps using the Tuist MCP tools:

  1. Use listgradlebuilds to find builds on each branch.
  2. Use getgradlebuild for both base and head builds.
  3. Use listgradlebuild_tasks to fetch task-level details for both builds.
  4. Compare duration, status, cache hit rates, and task outcomes.
  5. Summarize regressions, improvements, and recommendations.

If only one identifier is provided, use the project's default branch as the baseline.

Step 1: Resolve Builds

If base/head are build IDs or dashboard URLs

Fetch each directly with getgradlebuild(buildrunid: "<id>").

If base/head are branch names

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 getgradlebuild(buildrunid: "<id>").

Defaults

  • If no base is provided, use the project's default branch (usually main).
  • If no head is provided, detect the current git branch with git rev-parse --abbrev-ref HEAD.

Step 2: Compare Top-Level Metrics

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
taskslocalhit_count Compare local cache hit counts
tasksremotehit_count Compare remote cache hit counts
tasksexecutedcount Compare how many tasks ran (higher means more cache misses)
cacheabletaskscount Note if the cacheable task count changed
cachehitrate (localhits + remotehits) / cacheabletaskscount * 100
requested_tasks Ensure both builds ran the same tasks for a fair comparison
gradleversion / javaversion Note environment differences that affect comparability

Compute the cache miss delta: baseexecuted - headexecuted. Positive means head has fewer executions (improvement). Negative means regression.

Step 3: Drill Into Tasks

Use listgradlebuildtasks for both builds. Compare durationms and outcome per task path.

Look for:

  • Tasks that changed from localhit or remotehit to executed (cache invalidation).
  • Tasks that changed from executed to localhit or remotehit (cache improvement).
  • Tasks that changed to failed (new failures).
  • New tasks that appeared in the head build.
  • Tasks with significant duration increases.

Sort by absolute time difference to find the biggest regressions.

Filtering tasks

Use the outcome filter to focus on specific task states:

  • listgradlebuildtasks(buildrun_id: "<id>", outcome: "executed") to see only executed tasks.
  • listgradlebuildtasks(buildrun_id: "<id>", outcome: "failed") to see failures.
  • listgradlebuildtasks(buildrun_id: "<id>", cacheable: true) to see only cacheable tasks.

Step 4: Investigate Duration Regressions

If the head build is significantly slower:

  1. Check if requested_tasks differ (different task sets are not directly comparable).
  2. Check if cache hit rate dropped, which would explain longer builds.
  3. Look for tasks that changed from cache hits to executed.
  4. Check if gradleversion or javaversion changed, which can affect performance.
  5. Compare individual task durations to find the biggest contributors.

Step 5: Investigate Cache Changes

Compare task-level cache behavior:

  • Hit rate dropped: Possible causes include dependency changes, build configuration changes, or Gradle version updates that alter cache keys.
  • Hit rate improved: Likely due to better cache warming or fewer source changes.
  • Task count changed: New modules or tasks added/removed.
  • Outcome changes: Tasks moving between uptodate, localhit, remotehit, and executed reveal cache effectiveness.

Step 6: Check Build Context

Compare environment details:

  • gradleversion and javaversion: Different versions can affect build times and cache validity.
  • is_ci: CI vs local builds may have different performance characteristics.
  • gitbranch and gitcommit_sha: Verify the builds are from the expected commits.
  • rootprojectname: Ensure both builds are from the same project structure.

Summary Format

Produce a summary with:

  1. Overall verdict: Better, worse, or neutral compared to base.
  2. Duration: Absolute and percentage change in duration_ms.
  3. Cache hit rate: Change in hit rate with explanation.
  4. Task outcomes: Notable outcome changes (hit to executed, new failures).
  5. Status: Any status changes (success to failure or vice versa).
  6. Environment: Note any environment differences that affect comparability.
  7. Recommendations: Actionable next steps based on findings.

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

Done Checklist

  • Resolved both base and head builds
  • Compared duration, cache, and status metrics
  • Drilled into task-level outcomes for both builds
  • Identified root causes for any regressions
  • Provided actionable recommendations